diff --git a/tools/toolchain/install_cp2k_toolchain.sh b/tools/toolchain/install_cp2k_toolchain.sh index 4ff22f8285..1ab896d920 100755 --- a/tools/toolchain/install_cp2k_toolchain.sh +++ b/tools/toolchain/install_cp2k_toolchain.sh @@ -110,7 +110,6 @@ OPTIONS: Default = 200 --target-cpu Compile for the specified target CPU (e.g. haswell or generic), i.e. do not optimize for the actual host system which is the default (native). ---no-arch-files Do not generate arch files. --dry-run Write only config files, but don't actually build packages. The --enable-FEATURE options follow the rules: @@ -251,15 +250,13 @@ The --with-PKG options follow the rules: FURTHER INSTRUCTIONS All packages to be installed locally will be downloaded and built inside -./build, and then installed into package specific directories inside -./install. +./build, and then installed into package specific directories inside ./install. -Both ./build and ./install are safe to delete, as they contain -only the files and directories that are generated by this script. However, -once all the packages are installed, and you compile CP2K using the arch -files provided by this script, then you must keep ./install in exactly -the same location as it was first created, as it contains tools and libraries -your version of CP2K binary will depend on. +Both ./build and ./install are safe to delete, as they contain only the files +and directories that are generated by this script. However, once all the +packages are installed and you compiled CP2K then you must keep ./install in +exactly the same location as it was first created, as it contains tools and +libraries your version of CP2K binary will depend on. It should be safe to terminate running of this script in the middle of a build process. The script will know if a package has been successfully @@ -374,7 +371,6 @@ fi # default enable options dry_run="__FALSE__" -no_arch_files="__FALSE__" enable_tsan="__FALSE__" enable_opencl="__FALSE__" enable_cuda="__FALSE__" @@ -517,9 +513,6 @@ while [ $# -ge 1 ]; do user_input="${1#*=}" export LIBINT_LMAX="${user_input}" ;; - --no-arch-files) - no_arch_files="__TRUE__" - ;; --dry-run) dry_run="__TRUE__" ;; @@ -1056,9 +1049,20 @@ else ./scripts/stage7/install_stage7.sh ./scripts/stage8/install_stage8.sh ./scripts/stage9/install_stage9.sh - if [ "${no_arch_files}" = "__FALSE__" ]; then - ./scripts/generate_arch_files.sh - fi + cat << EOF +========================== usage ========================= +Done! +To use the installed tools and libraries and cp2k version +compiled with it you will first need to execute at the prompt: + source ${SETUPFILE} +To build CP2K you should change directory: + cd cp2k/ + cmake -S . -B build -DCP2K_USE_EVERYTHING=ON + cmake --build build -j 32 + +See also https://manual.cp2k.org/trunk/getting-started/build-from-source.html + +EOF fi #EOF diff --git a/tools/toolchain/scripts/arch_base.tmpl b/tools/toolchain/scripts/arch_base.tmpl deleted file mode 100644 index bd250b252f..0000000000 --- a/tools/toolchain/scripts/arch_base.tmpl +++ /dev/null @@ -1,18 +0,0 @@ -CC = ${CC_arch} -CXX = ${CXX_arch} -AR = ar -r -FC = ${FC_arch} -LD = ${LD_arch} -# -DFLAGS = ${DFLAGS} -# -WFLAGS = ${WFLAGS} -# -FCDEBFLAGS = ${FCDEBFLAGS} -CFLAGS = ${CFLAGS} -CXXFLAGS = ${CXXFLAGS} -FCFLAGS = ${FCFLAGS} -# -LDFLAGS = ${LDFLAGS} -LDFLAGS_C = ${LDFLAGS_C} -LIBS = ${LIBS} diff --git a/tools/toolchain/scripts/generate_arch_files.sh b/tools/toolchain/scripts/generate_arch_files.sh deleted file mode 100755 index 54cebcb66e..0000000000 --- a/tools/toolchain/scripts/generate_arch_files.sh +++ /dev/null @@ -1,513 +0,0 @@ -#!/bin/bash -e - -# TODO: Review and if possible fix shellcheck errors. -# shellcheck disable=all - -[ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=$0 -SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_NAME")" && pwd -P)" - -source "${SCRIPT_DIR}"/common_vars.sh -source "${SCRIPT_DIR}"/tool_kit.sh -source "${SCRIPT_DIR}"/signal_trap.sh -source "${INSTALLDIR}"/toolchain.conf -source "${INSTALLDIR}"/toolchain.env - -# ------------------------------------------------------------------------ -# generate arch file for compiling cp2k -# ------------------------------------------------------------------------ - -echo "==================== generating arch files ====================" -echo "arch files can be found in the ${INSTALLDIR}/arch subdirectory" -! [ -f "${INSTALLDIR}/arch" ] && mkdir -p ${INSTALLDIR}/arch -cd ${INSTALLDIR}/arch - -# ------------------------- -# set compiler flags -# ------------------------- - -# need to switch between FC and MPICC etc in arch file, but cannot use -# same variable names, so use _arch suffix -CC_arch="IF_MPI(${MPICC}|${CC})" -CXX_arch="IF_MPI(${MPICXX}|${CXX})" -FC_arch="IF_MPI(${MPIFC}|${FC})" -LD_arch="IF_MPI(${MPIFC}|${FC})" - -# we always want good line information and backtraces -if [ "${with_intel}" != "__DONTUSE__" ]; then - if [ "${TARGET_CPU}" = "native" ]; then - BASEFLAGS="-fPIC -fp-model=precise -g -qopenmp -traceback -xHost" - elif [ "${TARGET_CPU}" = "generic" ]; then - BASEFLAGS="-fPIC -fp-model=precise -g -mtune=${TARGET_CPU} -qopenmp -traceback" - else - BASEFLAGS="-fPIC -fp-model=precise -g -march=${TARGET_CPU} -mtune=${TARGET_CPU} -qopenmp -traceback" - fi - OPT_FLAGS="-O2 -funroll-loops" - LDFLAGS_C="-nofor-main" -elif [ "${with_amd}" != "__DONTUSE__" ]; then - if [ "${TARGET_CPU}" = "generic" ]; then - BASEFLAGS="-fPIC -fopenmp -g -mtune=${TARGET_CPU}" - else - BASEFLAGS="-fPIC -fopenmp -g -march=${TARGET_CPU} -mtune=${TARGET_CPU}" - fi - OPT_FLAGS="-O2 -mllvm -enable-newgvn=true" - LDFLAGS_C="-fno-fortran-main" -else - if [ "${TARGET_CPU}" = "generic" ]; then - BASEFLAGS="-fno-omit-frame-pointer -fopenmp -g -mtune=${TARGET_CPU} IF_ASAN(-fsanitize=address|)" - else - BASEFLAGS="-fno-omit-frame-pointer -fopenmp -g -march=${TARGET_CPU} -mtune=${TARGET_CPU} IF_ASAN(-fsanitize=address|)" - fi - OPT_FLAGS="-O3 -funroll-loops" - LDFLAGS_C="" -fi - -NOOPT_FLAGS="-O1" - -# those flags that do not influence code generation are used always, the others if debug -if [ "${with_intel}" == "__DONTUSE__" ] && [ "${with_amd}" == "__DONTUSE__" ]; then - FCDEB_FLAGS="-fbacktrace -ffree-form -fimplicit-none -std=f2008" - FCDEB_FLAGS_DEBUG="-fsanitize=leak -fcheck=all,no-array-temps -ffpe-trap=invalid,zero,overflow -finit-derived -finit-real=snan -finit-integer=-42 -Werror=realloc-lhs -finline-matmul-limit=0" -else - FCDEB_FLAGS="" - FCDEB_FLAGS_DEBUG="" -fi - -# code coverage generation flags -COVERAGE_FLAGS="-O1 -coverage -fkeep-static-functions" -COVERAGE_DFLAGS="-D__NO_ABORT" - -# profile based optimization, see https://www.cp2k.org/howto:pgo -PROFOPT_FLAGS="\$(PROFOPT)" - -# special flags for gfortran -# https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html -# we error out for these warnings (-Werror=uninitialized -Wno-maybe-uninitialized -> error on variables that must be used uninitialized) -WFLAGS_ERROR="-Werror=aliasing -Werror=ampersand -Werror=c-binding-type -Werror=character-truncation -Werror=intrinsic-shadow -Werror=intrinsics-std -Werror=line-truncation -Werror=tabs -Werror=target-lifetime -Werror=underflow -Werror=unused-but-set-variable -Werror=unused-variable -Werror=unused-dummy-argument -Werror=unused-parameter -Werror=unused-label -Werror=conversion -Werror=zerotrip -Wno-maybe-uninitialized" -# we just warn for those (that eventually might be promoted to WFLAGSERROR). It is useless to put something here with 100s of warnings. -WFLAGS_WARN="-Wuninitialized -Wuse-without-only" -# while here we collect all other warnings, some we'll ignore -# TODO: -Wpedantic with -std2008 requires us to drop the old MPI-90 interface entirely and SIRIUS (-Wuninitialized) and DBCSR (default initializers) to initialize their types -WFLAGS_WARNALL="-Wno-pedantic -Wall -Wextra -Wsurprising -Warray-temporaries -Wconversion-extra -Wimplicit-interface -Wimplicit-procedure -Wreal-q-constant -Walign-commons -Wfunction-elimination -Wrealloc-lhs -Wcompare-reals -Wzerotrip" - -# IEEE_EXCEPTIONS dependency -IEEE_EXCEPTIONS_DFLAGS="-D__HAS_IEEE_EXCEPTIONS" - -# check all of the above flags, filter out incompatible flags for the -# current version of gcc in use -if [ "${with_intel}" == "__DONTUSE__" ] && [ "${with_amd}" == "__DONTUSE__" ]; then - OPT_FLAGS=$(allowed_gfortran_flags $OPT_FLAGS) - NOOPT_FLAGS=$(allowed_gfortran_flags $NOOPT_FLAGS) - FCDEB_FLAGS=$(allowed_gfortran_flags $FCDEB_FLAGS) - FCDEB_FLAGS_DEBUG=$(allowed_gfortran_flags $FCDEB_FLAGS_DEBUG) - COVERAGE_FLAGS=$(allowed_gfortran_flags $COVERAGE_FLAGS) - WFLAGS_ERROR=$(allowed_gfortran_flags $WFLAGS_ERROR) - WFLAGS_WARN=$(allowed_gfortran_flags $WFLAGS_WARN) - WFLAGS_WARNALL=$(allowed_gfortran_flags $WFLAGS_WARNALL) -else - WFLAGS_ERROR="" - WFLAGS_WARN="" - WFLAGS_WARNALL="" -fi - -# check if ieee_exeptions module is available for the current version -# of gfortran being used -if ! (check_gfortran_module ieee_exceptions); then - IEEE_EXCEPTIONS_DFLAGS="" -fi - -# concatenate the above flags into WFLAGS, FCDEBFLAGS, DFLAGS and -# finally into FCFLAGS and CFLAGS -WFLAGS="$WFLAGS_ERROR $WFLAGS_WARN IF_WARNALL(${WFLAGS_WARNALL}|)" -FCDEBFLAGS="$FCDEB_FLAGS IF_DEBUG($FCDEB_FLAGS_DEBUG|)" -DFLAGS="${CP_DFLAGS} IF_DEBUG($IEEE_EXCEPTIONS_DFLAGS -D__CHECK_DIAG|) IF_COVERAGE($COVERAGE_DFLAGS|)" -# language independent flags -G_CFLAGS="$BASEFLAGS" -G_CFLAGS="$G_CFLAGS IF_COVERAGE($COVERAGE_FLAGS|IF_DEBUG($NOOPT_FLAGS|$OPT_FLAGS))" -G_CFLAGS="$G_CFLAGS IF_DEBUG(|$PROFOPT_FLAGS)" -G_CFLAGS="$G_CFLAGS $CP_CFLAGS" -if [ "${with_intel}" == "__DONTUSE__" ] && [ "${with_amd}" == "__DONTUSE__" ]; then - # FCFLAGS, for gfortran - FCFLAGS="$G_CFLAGS \$(FCDEBFLAGS) \$(WFLAGS) \$(DFLAGS)" - FCFLAGS+=" IF_MPI($(allowed_gfortran_flags "-fallow-argument-mismatch")|)" -else - FCFLAGS="$G_CFLAGS \$(FCDEBFLAGS) \$(WFLAGS) \$(DFLAGS)" -fi -# CFLAGS, special flags for gcc - -# TODO: Remove -Wno-vla-parameter after upgrade to gcc 11.3. -# https://gcc.gnu.org/bugzilla//show_bug.cgi?id=101289 -if [ "${with_intel}" != "__DONTUSE__" ]; then - CFLAGS="${G_CFLAGS} -std=c17 -Wall \$(DFLAGS)" - CXXFLAGS="${G_CFLAGS} -std=c++17 -Wall \$(DFLAGS)" - FCFLAGS="${FCFLAGS} -diag-disable=8291 -diag-disable=8293 -fpp -fpscomp logicals -free" - # Suppress warnings and add include path to omp_lib.mod explicitly. - # No clue why the Intel oneAPI setup script does not include that path (bug?) - FCFLAGS="${FCFLAGS} -diag-disable=10448 -I/opt/intel/oneapi/2024.1/opt/compiler/include/intel64" -elif [ "${with_amd}" != "__DONTUSE__" ]; then - CFLAGS="$G_CFLAGS -std=c17 -Wall \$(DFLAGS)" -else - CFLAGS="${G_CFLAGS} -std=c17 -Wall -Wextra -Wno-vla-parameter -Wno-deprecated-declarations \$(DFLAGS)" -fi - -# Linker flags -# About --whole-archive see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52590 -STATIC_FLAGS="-static -Wl,--whole-archive -lpthread -Wl,--no-whole-archive" -# Get unfortunately ignored: -static-libgcc -static-libstdc++ -static-libgfortran -LDFLAGS="IF_STATIC(${STATIC_FLAGS}|) \$(FCFLAGS) ${CP_LDFLAGS}" - -# Library flags -# add standard libs -LIBS="${CP_LIBS} -lstdc++" - -if [ "${with_intel}" == "__DONTUSE__" ] && [ "${with_amd}" == "__DONTUSE__" ]; then - CXXFLAGS+=" -std=c++17 \$(DFLAGS) -Wno-deprecated-declarations" -else - CXXFLAGS+=" -std=c++17 \$(DFLAGS)" -fi -# CUDA handling -if [ "${ENABLE_CUDA}" = __TRUE__ ] && [ "${GPUVER}" != no ]; then - CUDA_LIBS="-lcudart -lnvrtc -lcuda -lcufft -lcublasLt -lcublas -lrt IF_DEBUG(-lnvToolsExt|)" - CUDA_DFLAGS="-D__OFFLOAD_CUDA -D__DBCSR_ACC IF_DEBUG(-D__OFFLOAD_PROFILING|)" - if [ "${with_cusolvermp}" != "__DONTUSE__" ]; then - CUDA_LIBS+=" -lcusolverMp -lcusolver -lcal -lnvidia-ml" - CUDA_DFLAGS+=" -D__CUSOLVERMP" - fi - LIBS="${LIBS} IF_CUDA(${CUDA_LIBS}|)" - DFLAGS="IF_CUDA(${CUDA_DFLAGS}|) ${DFLAGS}" - NVFLAGS="-g -arch sm_${ARCH_NUM} -O3 -allow-unsupported-compiler -Xcompiler='-fopenmp -Wall -Wextra' --std=c++11 \$(DFLAGS)" - check_command nvcc "cuda" - check_lib -lcudart "cuda" - check_lib -lnvrtc "cuda" - check_lib -lcuda "cuda" - check_lib -lcufft "cuda" - check_lib -lcublasLt "cuda" - check_lib -lcublas "cuda" - - # Set include flags - CUDA_FLAGS="" - add_include_from_paths CUDA_FLAGS "cuda.h" $INCLUDE_PATHS - NVFLAGS+=" ${CUDA_FLAGS}" - NVCC_TOPDIR="$(dirname $(command -v nvcc))/.." - CUDA_PATH="${CUDA_PATH:-${CUDA_HOME:-${NVCC_TOPDIR:-/CUDA_HOME-notset}}}" - CFLAGS+=" IF_CUDA(-I${CUDA_PATH}/include|)" - CXXFLAGS+=" IF_CUDA(-I${CUDA_PATH}/include|)" - - # Set LD-flags - CUDA_LDFLAGS="" - add_lib_from_paths CUDA_LDFLAGS "libcudart.*" $LIB_PATHS - add_lib_from_paths CUDA_LDFLAGS "libnvrtc.*" $LIB_PATHS - add_lib_from_paths CUDA_LDFLAGS "libcuda.*" $LIB_PATHS - add_lib_from_paths CUDA_LDFLAGS "libcufft.*" $LIB_PATHS - add_lib_from_paths CUDA_LDFLAGS "libcublas.*" $LIB_PATHS - export CUDA_LDFLAGS="${CUDA_LDFLAGS}" - LDFLAGS+=" IF_CUDA(${CUDA_LDFLAGS}|)" -fi - -# HIP handling -if [ "${ENABLE_HIP}" = __TRUE__ ] && [ "${GPUVER}" != no ]; then - check_command hipcc "hip" - check_lib -lhipblas "hip" - add_lib_from_paths HIP_LDFLAGS "libhipblas.*" $LIB_PATHS - check_lib -lhipfft "hip" - add_lib_from_paths HIP_LDFLAGS "libhipfft.*" $LIB_PATHS - - HIP_INCLUDES="-I${ROCM_PATH}/include" - case "${GPUVER}" in - Mi50) - check_lib -lamdhip64 "hip" - add_lib_from_paths HIP_LDFLAGS "libamdhip64.*" $LIB_PATHS - check_lib -lhipfft "hip" - add_lib_from_paths HIP_LDFLAGS "libhipfft.*" $LIB_PATHS - check_lib -lrocblas "hip" - add_lib_from_paths HIP_LDFLAGS "librocblas.*" $LIB_PATHS - check_lib -lroctx64 "hip" - add_lib_from_paths HIP_LDFLAGS "libroctx64.*" $LIB_PATHS - check_lib -lroctracer64 "hip" - add_lib_from_paths HIP_LDFLAGS "libroctracer64.*" $LIB_PATHS - HIP_FLAGS+="-fPIE -D__HIP_PLATFORM_AMD__ -g --offload-arch=gfx906 -O3 --std=c++11 -Wall -Wextra \$(DFLAGS)" - LIBS+=" IF_HIP(-lamdhip64 -lhipfft -lhipblas -lrocblas IF_DEBUG(-lroctx64 -lroctracer64|)|)" - DFLAGS+=" IF_HIP(-D__HIP_PLATFORM_AMD__ -D__OFFLOAD_HIP IF_DEBUG(-D__OFFLOAD_PROFILING|)|) -D__DBCSR_ACC" - CXXFLAGS+=" -std=c++14 -fopenmp -Wall -Wextra" - ;; - Mi100) - check_lib -lamdhip64 "hip" - add_lib_from_paths HIP_LDFLAGS "libamdhip64.*" $LIB_PATHS - check_lib -lhipfft "hip" - add_lib_from_paths HIP_LDFLAGS "libhipfft.*" $LIB_PATHS - check_lib -lrocblas "hip" - add_lib_from_paths HIP_LDFLAGS "librocblas.*" $LIB_PATHS - check_lib -lroctx64 "hip" - add_lib_from_paths HIP_LDFLAGS "libroctx64.*" $LIB_PATHS - check_lib -lroctracer64 "hip" - add_lib_from_paths HIP_LDFLAGS "libroctracer64.*" $LIB_PATHS - HIP_FLAGS+="-fPIE -D__HIP_PLATFORM_AMD__ -g --offload-arch=gfx908 -O3 --std=c++11 -Wall -Wextra \$(DFLAGS)" - LIBS+=" IF_HIP(-lamdhip64 -lhipfft -lhipblas -lrocblas IF_DEBUG(-lroctx64 -lroctracer64|)|)" - DFLAGS+=" IF_HIP(-D__HIP_PLATFORM_AMD__ -D__OFFLOAD_HIP IF_DEBUG(-D__OFFLOAD_PROFILING|)|) -D__DBCSR_ACC" - CXXFLAGS+=" -std=c++14 -fopenmp -Wall -Wextra" - ;; - Mi250) - check_lib -lamdhip64 "hip" - add_lib_from_paths HIP_LDFLAGS "libamdhip64.*" $LIB_PATHS - check_lib -lhipfft "hip" - add_lib_from_paths HIP_LDFLAGS "libhipfft.*" $LIB_PATHS - check_lib -lrocblas "hip" - add_lib_from_paths HIP_LDFLAGS "librocblas.*" $LIB_PATHS - check_lib -lroctx64 "hip" - add_lib_from_paths HIP_LDFLAGS "libroctx64.*" $LIB_PATHS - check_lib -lroctracer64 "hip" - add_lib_from_paths HIP_LDFLAGS "libroctracer64.*" $LIB_PATHS - HIP_FLAGS+="-fPIE -D__HIP_PLATFORM_AMD__ -g --offload-arch=gfx90a -munsafe-fp-atomics -O3 --std=c++11 -Wall -Wextra \$(DFLAGS)" - LIBS+=" IF_HIP(-lamdhip64 -lhipfft -lhipblas -lrocblas IF_DEBUG(-lroctx64 -lroctracer64|)|)" - DFLAGS+=" IF_HIP(-D__HIP_PLATFORM_AMD__ -D__OFFLOAD_HIP IF_DEBUG(-D__OFFLOAD_PROFILING|)|) -D__DBCSR_ACC" - CXXFLAGS+=" -std=c++14 -fopenmp -Wall -Wextra" - ;; - *) - check_command nvcc "cuda" - check_lib -lcudart "cuda" - check_lib -lnvrtc "cuda" - check_lib -lcuda "cuda" - check_lib -lcufft "cuda" - check_lib -lcublas "cuda" - DFLAGS+=" IF_HIP(-D__HIP_PLATFORM_NVIDIA__ -D__HIP_PLATFORM_NVCC__ -D__OFFLOAD_HIP |) -D__DBCSR_ACC" - HIP_FLAGS+=" -g -arch sm_${ARCH_NUM} -O3 -Xcompiler='-fopenmp -Wall -Wextra' --std=c++11 \$(DFLAGS)" - add_include_from_paths CUDA_CFLAGS "cuda.h" $INCLUDE_PATHS - HIP_INCLUDES+=" -I${CUDA_PATH:-${CUDA_HOME:-/CUDA_HOME-notset}}/include" - # GCC issues lots of warnings for hip/nvidia_detail/hip_runtime_api.h - CFLAGS+=" -Wno-error ${CUDA_CFLAGS}" - CXXFLAGS+=" -std=c++14 -Wno-error ${CUDA_CFLAGS}" - # Set LD-flags - # Multiple definition because of hip/include/hip/nvidia_detail/nvidia_hiprtc.h - LDFLAGS+=" -Wl,--allow-multiple-definition" - LIBS+=" -lhipfft -lhipblas -lhipfft -lnvrtc -lcudart -lcufft -lcublas -lcuda" - add_lib_from_paths HIP_LDFLAGS "libcudart.*" $LIB_PATHS - add_lib_from_paths HIP_LDFLAGS "libnvrtc.*" $LIB_PATHS - add_lib_from_paths HIP_LDFLAGS "libcuda.*" $LIB_PATHS - add_lib_from_paths HIP_LDFLAGS "libcufft.*" $LIB_PATHS - add_lib_from_paths HIP_LDFLAGS "libcublas.*" $LIB_PATHS - ;; - esac - - LDFLAGS+=" ${HIP_LDFLAGS}" - CFLAGS+=" ${HIP_INCLUDES}" - CXXFLAGS+=" ${HIP_INCLUDES}" -fi - -# OpenCL handling (GPUVER is not a prerequisite) -if [ "${ENABLE_OPENCL}" = __TRUE__ ]; then - OPENCL_DFLAGS="-D__DBCSR_ACC" - # avoid duplicating FLAGS - if [[ "${GPUVER}" == no || ("${ENABLE_CUDA}" != __TRUE__ && "${ENABLE_HIP}" != __TRUE__) ]]; then - OPENCL_FLAGS="${CFLAGS} ${OPENCL_DFLAGS} ${DFLAGS}" - DFLAGS="IF_OPENCL(${OPENCL_DFLAGS} ${DFLAGS}|)" - # Set include flags - OPENCL_INCLUDES="" - add_include_from_paths -p OPENCL_INCLUDES "CL" $INCLUDE_PATHS - if [ -e "${OPENCL_INCLUDES}/CL/cl.h" ]; then - OPENCL_FLAGS+=" ${OPENCL_INCLUDES}" - fi - fi - # Append OpenCL library to LIBS - LIBOPENCL=$(ldconfig -p 2> /dev/null | grep -m1 OpenCL | rev | cut -d' ' -f1 | rev) - if [ -e "${LIBOPENCL}" ]; then - echo "Found library ${LIBOPENCL}" - LIBS+=" IF_OPENCL(${LIBOPENCL}|)" - else - LIBS+=" IF_OPENCL(-lOpenCL|)" - fi -fi - -# ------------------------- -# generate the arch files -# ------------------------- - -# generator for CP2K ARCH files -gen_arch_file() { - # usage: gen_arch_file file_name flags - # - # If the flags are present they are assumed to be on, otherwise - # they switched off - require_env ARCH_FILE_TEMPLATE - local __filename=$1 - shift - local __flags=$@ - local __full_flag_list="MPI DEBUG CUDA WARNALL COVERAGE" - local __flag="" - for __flag in $__full_flag_list; do - eval "local __${__flag}=off" - done - for __flag in $__flags; do - eval "__${__flag}=on" - done - # generate initial arch file - cat $ARCH_FILE_TEMPLATE > $__filename - # add additional parts - if [ "$__CUDA" = "on" ]; then - cat << EOF >> $__filename -# -GPUVER = \${GPUVER} -OFFLOAD_CC = \${NVCC} -OFFLOAD_FLAGS = \${NVFLAGS} -OFFLOAD_TARGET = cuda -EOF - fi - - if [ "$__HIP" = "on" ]; then - cat << EOF >> $__filename -# -GPUVER = \${GPUVER} -OFFLOAD_CC = \${ROCM_PATH}/hip/bin/hipcc -OFFLOAD_FLAGS = \${HIP_FLAGS} \${HIP_INCLUDES} -OFFLOAD_TARGET = hip -EOF - fi - - if [ "$__OPENCL" = "on" ]; then - cat << EOF >> $__filename -# -override DBCSR_USE_ACCEL = opencl -EOF - if [ "${OPENCL_FLAGS}" ]; then - cat << EOF >> $__filename -OFFLOAD_FLAGS = \${OPENCL_FLAGS} -EOF - fi - fi - - if [ "$__WARNALL" = "on" ]; then - cat << EOF >> $__filename -# -SHELL := bash -FC := set -o pipefail && \\\${FC} -CC := set -o pipefail && \\\${CC} -CXX := set -o pipefail && \\\${CXX} -LD := set -o pipefail && \\\${LD} -FCLOGPIPE = 2>&1 | tee \\\$(notdir \\\$<).warn -EOF - fi - if [ "$with_gcc" != "__DONTUSE__" ]; then - cat << EOF >> $__filename -# -FYPPFLAGS = -n --line-marker-format=gfortran5 -EOF - fi - if [ "${with_intel}" != "__DONTUSE__" ]; then - if [ "${with_ifx}" != "__DONTUSE__" ]; then - cat << EOF >> $__filename -# -# IFX workarounds -hfx_contraction_methods.o: FCFLAGS += -O1 -EOF - else # IFORT - cat << EOF >> $__filename -# -# IFORT workarounds -mp2_optimize_ri_basis.o: FCFLAGS += -O0 -hfx_contraction_methods.o: FCFLAGS += -O1 -paw_basis_types.o: FCFLAGS += -O1 -# ICX workaround (used along with IFORT) -grid_dgemm_prepare_pab.o: CFLAGS += -O2 -EOF - fi - fi - # replace variable values in output file using eval - local __TMPL=$(cat $__filename) - eval "printf \"${__TMPL}\n\"" > $__filename - # pass this to parsers to replace all of the IF_XYZ statements - "${SCRIPTDIR}/parse_if.py" -i -f "${__filename}" $__flags - echo "Wrote ${INSTALLDIR}/arch/$__filename" -} - -rm -f ${INSTALLDIR}/arch/local* -# normal production arch files -if [ "${with_intel}" != "__DONTUSE__" ] || [ "${with_amd}" != "__DONTUSE__" ]; then - gen_arch_file "local.ssmp" - gen_arch_file "local.sdbg" DEBUG -else - gen_arch_file "local.ssmp" - gen_arch_file "local_static.ssmp" STATIC - gen_arch_file "local.sdbg" DEBUG - gen_arch_file "local_asan.ssmp" ASAN - gen_arch_file "local_coverage.sdbg" COVERAGE -fi -arch_vers="ssmp sdbg" - -if [ "$MPI_MODE" != no ]; then - if [ "${with_intel}" != "__DONTUSE__" ] || [ "${with_amd}" != "__DONTUSE__" ]; then - gen_arch_file "local.psmp" MPI - gen_arch_file "local.pdbg" MPI DEBUG - else - gen_arch_file "local.psmp" MPI - gen_arch_file "local.pdbg" MPI DEBUG - gen_arch_file "local_asan.psmp" MPI ASAN - gen_arch_file "local_static.psmp" MPI STATIC - gen_arch_file "local_warn.psmp" MPI WARNALL - gen_arch_file "local_coverage.pdbg" MPI COVERAGE - fi - arch_vers="${arch_vers} psmp pdbg" -fi - -# opencl enabled arch files -if [ "$ENABLE_OPENCL" = __TRUE__ ]; then - gen_arch_file "local_opencl.ssmp" OPENCL - gen_arch_file "local_opencl.sdbg" OPENCL DEBUG - if [ "$MPI_MODE" != no ]; then - gen_arch_file "local_opencl.psmp" OPENCL MPI - gen_arch_file "local_opencl.pdbg" OPENCL MPI DEBUG - gen_arch_file "local_opencl_warn.psmp" OPENCL MPI WARNALL - gen_arch_file "local_coverage_opencl.pdbg" OPENCL MPI COVERAGE - fi - DBCSR_OPENCL=OPENCL -fi - -# cuda enabled arch files -if [ "$ENABLE_CUDA" = __TRUE__ ]; then - gen_arch_file "local_cuda.ssmp" CUDA ${DBCSR_OPENCL} - gen_arch_file "local_cuda.sdbg" CUDA ${DBCSR_OPENCL} DEBUG - if [ "$MPI_MODE" != no ]; then - gen_arch_file "local_cuda.psmp" CUDA ${DBCSR_OPENCL} MPI - gen_arch_file "local_cuda.pdbg" CUDA ${DBCSR_OPENCL} MPI DEBUG - gen_arch_file "local_cuda_warn.psmp" CUDA ${DBCSR_OPENCL} MPI WARNALL - gen_arch_file "local_coverage_cuda.pdbg" CUDA ${DBCSR_OPENCL} MPI COVERAGE - fi -fi - -# hip enabled arch files -if [ "$ENABLE_HIP" = __TRUE__ ]; then - gen_arch_file "local_hip.ssmp" HIP - gen_arch_file "local_hip.sdbg" HIP DEBUG - if [ "$MPI_MODE" != no ]; then - gen_arch_file "local_hip.psmp" HIP MPI - gen_arch_file "local_hip.pdbg" HIP MPI DEBUG - gen_arch_file "local_hip_warn.psmp" HIP MPI WARNALL - gen_arch_file "local_coverage_hip.pdbg" HIP MPI COVERAGE - fi -fi - -cd "${ROOTDIR}" - -# ------------------------- -# print out user instructions -# ------------------------- - -cat << EOF -========================== usage ========================= -Done! -Now copy: - cp ${INSTALLDIR}/arch/* to the cp2k/arch/ directory -To use the installed tools and libraries and cp2k version -compiled with it you will first need to execute at the prompt: - source ${SETUPFILE} -To build CP2K you should change directory: - cd cp2k/ - make -j $(get_nprocs) ARCH=local VERSION="${arch_vers}" - -arch files for GPU enabled CUDA versions are named "local_cuda.*" -arch files for GPU enabled HIP versions are named "local_hip.*" -arch files for OpenCL (GPU) versions are named "local_opencl.*" -arch files for coverage versions are named "local_coverage.*" - -Note that these pre-built arch files are for the GNU compiler, users have to adapt them for other compilers. -It is possible to use the provided CP2K arch files as guidance. -EOF - -#EOF