From ae6f7bfca4dd2191ccbe27ce252aaffe78a39fc1 Mon Sep 17 00:00:00 2001 From: Matthias Krack Date: Mon, 27 Jan 2025 16:10:45 +0100 Subject: [PATCH] Extend Toolchain/CMake build script (no container) --- tools/docker/scripts/build_cp2k_cmake.sh | 113 +++++++++++++++++------ tools/docker/scripts/install_dbcsr.sh | 34 ++++++- 2 files changed, 114 insertions(+), 33 deletions(-) diff --git a/tools/docker/scripts/build_cp2k_cmake.sh b/tools/docker/scripts/build_cp2k_cmake.sh index 6acb4689d7..c259ec6dcf 100755 --- a/tools/docker/scripts/build_cp2k_cmake.sh +++ b/tools/docker/scripts/build_cp2k_cmake.sh @@ -1,6 +1,6 @@ #!/bin/bash -# author: Ole Schuett +# authors: Ole Schuett, Matthias Krack if (($# != 2)); then echo "Usage: build_cp2k_cmake.sh " @@ -10,11 +10,47 @@ fi PROFILE=$1 VERSION=$2 +[[ -z "${log_lines}" ]] && log_lines="100" +[[ -z "${maxtasks}" ]] && maxtasks="12" +[[ -z "${mpi_implementation}" ]] && mpi_implementation="mpich" +[[ -z "${target_cpu}" ]] && target_cpu="native" + +if [[ "${PROFILE}" == "toolchain-cwd" ]]; then + CWD="${PWD}" + TOOLCHAIN_DIR="${CWD}/tools/toolchain" + INSTALL_PREFIX="${CWD}/install/${VERSION}" + # Build or update CP2K toolchain if needed + echo "==================== Building CP2K toolchain ==========" + cd "${TOOLCHAIN_DIR}" || exit 1 + rm -rf build + echo "Found GCC $(gcc -dumpfullversion) compiler" + if [[ "${VERSION}" == "ssmp" ]]; then + echo "Building for target CPU ${target_cpu} without MPI" + ./install_cp2k_toolchain.sh -j "${maxtasks}" --mpi-mode=no --no-arch-files --log-lines="${log_lines}" --target-cpu="${target_cpu}" \ + --with-gcc --with-dftd4 --with-hdf5 --with-libtorch --with-trexio + elif [[ "${VERSION}" == "psmp" ]]; then + echo "Building for target CPU ${target_cpu} using ${mpi_implementation}" + ./install_cp2k_toolchain.sh --install-all -j "${maxtasks}" --no-arch-files --log-lines="${log_lines}" --target-cpu="${target_cpu}" \ + --with-gcc --with-"${mpi_implementation}" --with-libsmeagol + else + echo "ERROR: Unknown version ${VERSION} specified" + exit 1 + fi + cd "${CWD}" || exit 1 + # Install DBCSR if needed + "${CWD}/tools/docker/scripts/install_dbcsr.sh" "${PROFILE}" "${VERSION}" + PROFILE="toolchain" +else + TOOLCHAIN_DIR="/opt/cp2k-toolchain" + INSTALL_PREFIX="/opt/cp2k" +fi + echo "==================== Building CP2K ====================" # Using Ninja because of https://gitlab.kitware.com/cmake/cmake/issues/18188 # Run CMake. +[[ -d build ]] && rm -rf build mkdir build cd build || exit 1 @@ -22,7 +58,7 @@ if [[ "${PROFILE}" == "spack" ]]; then eval "$(spack env activate myenv --sh)" elif [[ "${PROFILE}" == "toolchain" ]]; then # shellcheck disable=SC1091 - source /opt/cp2k-toolchain/install/setup + source "${TOOLCHAIN_DIR}/install/setup" fi # TODO: Reconcile PROFILE/VERSION with CP2K_BUILD_OPTIONS in CMakeLists.txt. @@ -54,20 +90,22 @@ if [[ "${PROFILE}" == "spack" ]] && [[ "${VERSION}" == "psmp" ]]; then elif [[ "${PROFILE}" == "toolchain" ]] && [[ "${VERSION}" == "ssmp" ]]; then cmake \ -GNinja \ - -DCMAKE_INSTALL_PREFIX=/opt/cp2k \ - -Werror=dev \ + -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \ + -DCMAKE_INSTALL_LIBDIR=lib \ -DCP2K_BLAS_VENDOR=OpenBLAS \ - -DCP2K_USE_LIBINT2=ON \ - -DCP2K_USE_LIBXC=ON \ + -DCP2K_USE_COSMA=OFF \ + -DCP2K_USE_DFTD4=ON \ + -DCP2K_USE_DLAF=OFF \ -DCP2K_USE_FFTW3=ON \ - -DCP2K_USE_SPGLIB=ON \ + -DCP2K_USE_LIBINT2=ON \ + -DCP2K_USE_LIBTORCH=ON \ + -DCP2K_USE_LIBXC=ON \ -DCP2K_USE_LIBXSMM=ON \ - -DCP2K_USE_VORI=ON \ -DCP2K_USE_MPI=OFF \ -DCP2K_USE_MPI_F08=OFF \ - -DCP2K_USE_COSMA=OFF \ - -DCP2K_USE_DLAF=OFF \ - -DCP2K_USE_LIBTORCH=ON \ + -DCP2K_USE_SPGLIB=ON \ + -DCP2K_USE_VORI=ON \ + -Werror=dev \ .. |& tee ./cmake.log CMAKE_EXIT_CODE=$? @@ -96,25 +134,26 @@ elif [[ "${PROFILE}" == "toolchain" ]] && [[ "${VERSION}" == "psmp" ]]; then # https://github.com/cp2k/cp2k/issues/3416 cmake \ -GNinja \ - -DCMAKE_INSTALL_PREFIX=/opt/cp2k \ - -Werror=dev \ + -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \ + -DCMAKE_INSTALL_LIBDIR=lib \ -DCP2K_BLAS_VENDOR=OpenBLAS \ - -DCP2K_USE_LIBINT2=ON \ - -DCP2K_USE_LIBXC=ON \ - -DCP2K_USE_FFTW3=ON \ - -DCP2K_USE_SPGLIB=ON \ - -DCP2K_USE_VORI=ON \ - -DCP2K_USE_MPI=ON \ - -DCP2K_USE_MPI_F08=ON \ - -DCP2K_USE_LIBXSMM=ON \ - -DCP2K_USE_PLUMED=ON \ - -DCP2K_USE_SPLA=ON \ - -DCP2K_USE_ELPA=ON \ -DCP2K_USE_COSMA=ON \ - -DCP2K_USE_SIRIUS=OFF \ - -DCP2K_USE_LIBTORCH=ON \ -DCP2K_USE_DFTD4=ON \ -DCP2K_USE_DLAF=OFF \ + -DCP2K_USE_ELPA=ON \ + -DCP2K_USE_FFTW3=ON \ + -DCP2K_USE_LIBINT2=ON \ + -DCP2K_USE_LIBTORCH=ON \ + -DCP2K_USE_LIBXC=ON \ + -DCP2K_USE_LIBXSMM=ON \ + -DCP2K_USE_MPI=ON \ + -DCP2K_USE_MPI_F08=ON \ + -DCP2K_USE_PLUMED=ON \ + -DCP2K_USE_SIRIUS=OFF \ + -DCP2K_USE_SPGLIB=ON \ + -DCP2K_USE_SPLA=ON \ + -DCP2K_USE_VORI=ON \ + -Werror=dev \ .. |& tee ./cmake.log CMAKE_EXIT_CODE=$? @@ -219,12 +258,30 @@ if grep -A5 'CMake Warning' ./cmake.log; then fi # Compile CP2K. -echo -en '\nCompiling cp2k...' +echo -en '\nCompiling CP2K ... ' if ninja --verbose &> ninja.log; then echo "done." + # Install CP2K. + echo -en '\nInstalling CP2K ... ' + if ninja --verbose install &> install.log; then + echo "done." + echo "" + echo " Run the following commands after a successful CP2K build" + echo "" + echo " source ${CWD}/tools/toolchain/install/setup" + echo " export LD_LIBRARY_PATH=${INSTALL_PREFIX}/lib:\$LD_LIBRARY_PATH" + echo " export PATH=${INSTALL_PREFIX}/bin:\$PATH" + echo "" + echo " A CP2K regression test can be run with" + echo " tests/do_regtest.py install/${VERSION}/bin ${VERSION}" + else + echo -e "failed.\n\n" + tail -n "${log_lines}" install.log + exit 1 + fi else echo -e "failed.\n\n" - tail -n 100 ninja.log + tail -n "${log_lines}" ninja.log mkdir -p /workspace/artifacts/ cp ninja.log /workspace/artifacts/ echo -e "\nSummary: Compilation failed." diff --git a/tools/docker/scripts/install_dbcsr.sh b/tools/docker/scripts/install_dbcsr.sh index 729d295248..c503503f6e 100755 --- a/tools/docker/scripts/install_dbcsr.sh +++ b/tools/docker/scripts/install_dbcsr.sh @@ -13,6 +13,25 @@ DBCSR_sha256="d55e4f052f28d1ed0faeaa07557241439243287a184d1fd27f875c8b9ca6bd96" echo "==================== Installing DBCSR ====================" +if [[ "${PROFILE}" == "toolchain-cwd" ]]; then + CWD=${PWD} + TOOLCHAIN_DIR="${CWD}/tools/toolchain" + INSTALL_PREFIX="${TOOLCHAIN_DIR}/install/dbcsr-${DBCSR_ver}/${VERSION}" + DBCSR_DIR="${INSTALL_PREFIX}/lib/cmake/dbcsr" + echo "export DBCSR_DIR=${INSTALL_PREFIX}/lib/cmake/dbcsr" >> "${TOOLCHAIN_DIR}/install/setup" + if [[ -d "${DBCSR_DIR}" ]]; then + echo "dbcsr-${DBCSR_ver} is already installed, skipping it." + exit + else + [[ ! -d "${TOOLCHAIN_DIR}/build" ]] && mkdir -p "${TOOLCHAIN_DIR}/build" + cd "${TOOLCHAIN_DIR}/build" + fi + PROFILE="toolchain" +else + TOOLCHAIN_DIR="/opt/cp2k-toolchain" + INSTALL_PREFIX="/opt/dbcsr" +fi + wget -q "https://github.com/cp2k/dbcsr/releases/download/v${DBCSR_ver}/dbcsr-${DBCSR_ver}.tar.gz" echo "${DBCSR_sha256} dbcsr-${DBCSR_ver}.tar.gz" | sha256sum --check > /dev/null @@ -23,8 +42,13 @@ mkdir build cd build if [[ "${PROFILE}" == "toolchain" ]]; then - # shellcheck disable=SC1091 - source /opt/cp2k-toolchain/install/setup + if [[ -f "${TOOLCHAIN_DIR}/install/setup" ]]; then + # shellcheck disable=SC1091 + source "${TOOLCHAIN_DIR}/install/setup" + else + echo "ERROR: Toolchain setup file not found" + exit 1 + fi fi if [[ "${VERSION}" == "ssmp" ]]; then @@ -36,7 +60,7 @@ else exit 1 fi -if ! cmake -DCMAKE_INSTALL_PREFIX=/opt/dbcsr -DUSE_MPI=${USE_MPI} -DUSE_OPENMP=ON -DUSE_SMM=blas .. &> cmake.log; then +if ! cmake -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" -DCMAKE_INSTALL_LIBDIR=lib -DUSE_MPI=${USE_MPI} -DUSE_OPENMP=ON -DUSE_SMM=blas .. &> cmake.log; then cat cmake.log exit 1 fi @@ -51,7 +75,7 @@ if ! make install VERBOSE=1 &> install.log; then exit 1 fi -cd .. -rm -rf build "dbcsr-${DBCSR_ver}" "dbcsr-${DBCSR_ver}.tar.gz" +cd ../.. +rm -rf "dbcsr-${DBCSR_ver}" "dbcsr-${DBCSR_ver}.tar.gz" #EOF