From 85b8a9b49c10d557fd7a980df5c112ee8f438efe Mon Sep 17 00:00:00 2001 From: SY Wang Date: Sat, 13 Jun 2026 20:58:02 +0800 Subject: [PATCH] Attempt to fix CMake and toolchain behavior regarding LibXS path (#5365) Co-authored-by: Taillefumier Mathieu <29380261+mtaillefumier@users.noreply.github.com> Co-authored-by: Hans Pabst --- CMakeLists.txt | 117 +++----- cmake/cp2kConfig.cmake.in | 13 +- cmake/modules/FindLIBXS.cmake | 96 ------- cmake/modules/FindLIBXSMM.cmake | 59 ---- src/CMakeLists.txt | 33 ++- src/aobasis/ai_contraction_sphi.F | 86 +----- src/dbm/Makefile | 8 +- src/dbm/dbm_multiply_cpu.c | 2 +- src/dbm/dbm_multiply_opencl.c | 6 +- src/grid/dgemm/grid_dgemm_utils.c | 2 +- src/offload/offload_library.c | 2 +- src/offload/offload_mempool.c | 6 +- src/offload/offload_runtime.h | 2 +- tools/docker/Dockerfile.test_gcc10 | 6 +- tools/docker/Dockerfile.test_gcc11 | 6 +- tools/docker/Dockerfile.test_gcc12 | 6 +- tools/docker/Dockerfile.test_gcc13 | 6 +- tools/docker/Dockerfile.test_gcc14 | 6 +- tools/docker/Dockerfile.test_gcc15 | 6 +- tools/docker/Dockerfile.test_gcc16 | 6 +- tools/docker/Dockerfile.test_gcc9 | 6 +- tools/docker/Dockerfile.test_minimal | 6 +- .../Dockerfile.test_spack_psmp-rockylinux | 4 +- tools/docker/generate_dockerfiles.py | 8 +- tools/spack/cp2k_deps_p.yaml | 6 +- tools/spack/cp2k_deps_s-static.yaml | 6 +- tools/spack/cp2k_deps_s.yaml | 6 +- .../cp2k_dev/packages/dbcsr/package.py | 259 ++++++++++++++++++ .../cp2k_dev/packages/libxs/package.py | 3 +- .../cp2k_dev/packages/libxsmm/package.py | 136 +-------- tools/toolchain/install_cp2k_toolchain.sh | 1 + .../toolchain/scripts/stage4/install_libxs.sh | 42 +-- .../scripts/stage4/install_libxsmm.sh | 58 +--- .../scripts/stage4/install_libxstream.sh | 54 ++-- .../toolchain/scripts/stage9/install_dbcsr.sh | 21 +- 35 files changed, 479 insertions(+), 611 deletions(-) delete mode 100644 cmake/modules/FindLIBXS.cmake delete mode 100644 cmake/modules/FindLIBXSMM.cmake create mode 100644 tools/spack/spack_repo/cp2k_dev/packages/dbcsr/package.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 8fc30740c5..7c8dd4fba8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -137,6 +137,9 @@ option(CP2K_USE_OPENPMD "Enable support for I/O via openPMD" OFF) option(CP2K_USE_LIBXC "Enable LibXC support" ${CP2K_USE_EVERYTHING}) option(CP2K_USE_GAUXC "Enable GauXC support" ${CP2K_USE_EVERYTHING}) option(CP2K_USE_MPI "Enable MPI support" ${CP2K_USE_EVERYTHING}) +option(CP2K_USE_LIBXS + "Enable LIBXS support; required if OpenCL backend enabled" + ${CP2K_USE_EVERYTHING}) option(CP2K_USE_PEXSI "Enable PEXSI support" ${CP2K_USE_EVERYTHING}) option(CP2K_USE_SPGLIB "Enable Spglib support" ${CP2K_USE_EVERYTHING}) option(CP2K_USE_TREXIO "Enable TREXIO support" ${CP2K_USE_EVERYTHING}) @@ -170,7 +173,10 @@ cmake_dependent_option(CP2K_USE_SPLA "Enable SpLA support" ${CP2K_USE_EVERYTHING} "CP2K_USE_MPI" OFF) cmake_dependent_option(CP2K_USE_MIMIC "Enable MIMIC support" ${CP2K_USE_EVERYTHING} "CP2K_USE_MPI" OFF) -option(CP2K_USE_LIBXS "Enable libxs support" ON) + +cmake_dependent_option(CP2K_USE_LIBXSMM "Enable LIBXSMM JIT-kernel for LIBXS" + ${CP2K_USE_EVERYTHING} "CP2K_USE_LIBXS" OFF) + cmake_dependent_option(CP2K_USE_LIBVDWXC "Enable libvdwxc support with SIRIUS" ${CP2K_USE_EVERYTHING} "CP2K_USE_SIRIUS" OFF) @@ -466,14 +472,14 @@ if(CP2K_USE_DBCSR_CONFIG) ) endif() else() - find_package(DBCSR 2.6 REQUIRED) + find_package(DBCSR 2.8 REQUIRED) endif() # SMM (Small Matrix-Matrix multiplication) if(CP2K_USE_LIBXS) - find_package(LIBXS REQUIRED) - find_package(LIBXSMM) - if(LIBXSMM_FOUND) + find_package(libxs REQUIRED) + if(CP2K_USE_LIBXSMM) + find_package(libxsmm CONFIG REQUIRED) message(STATUS "Using LIBXS + LIBXSMM for Small Matrix Multiplication") else() message(STATUS "Using LIBXS for Small Matrix Multiplication") @@ -653,7 +659,9 @@ find_package(OpenMP REQUIRED COMPONENTS Fortran C CXX) # Discover OpenCL backend via LIBXSTREAM. if(CP2K_USE_ACCEL MATCHES "OPENCL") if(NOT CP2K_USE_LIBXS) - message(FATAL_ERROR "OpenCL backend requires LIBXS (CP2K_USE_LIBXS=ON).") + message( + FATAL_ERROR + "CP2K_USE_LIBXS is not set but LIBXS is required for OpenCL backend.") endif() message("\n------------------------------------------------------------") message("- OPENCL -") @@ -666,66 +674,20 @@ if(CP2K_USE_ACCEL MATCHES "OPENCL") list(APPEND CMAKE_PREFIX_PATH "$ENV{CUDA_PATH}") endif() find_package(OpenCL REQUIRED) + find_package(libxstream REQUIRED) + message(STATUS "Using LIBXSTREAM for the OpenCL backend") - # Locate LIBXSTREAM: user override > DBCSR hint > pkg-config > path probing - set(LIBXSTREAMROOT - "" - CACHE PATH "Root directory of LIBXSTREAM") - if(NOT LIBXSTREAMROOT AND DBCSR_LIBXSTREAMROOT) - set(LIBXSTREAMROOT "${DBCSR_LIBXSTREAMROOT}") - endif() - if(NOT LIBXSTREAMROOT AND PkgConfig_FOUND) - pkg_check_modules(_LIBXSTREAM QUIET libxstream) - if(_LIBXSTREAM_FOUND) - pkg_get_variable(LIBXSTREAMROOT libxstream prefix) - endif() - endif() - if(NOT LIBXSTREAMROOT) - foreach(_dir "${CMAKE_SOURCE_DIR}/../libxstream" "$ENV{HOME}/libxstream") - if(EXISTS "${_dir}/include/libxstream.h") - set(LIBXSTREAMROOT "${_dir}") - break() - endif() - endforeach() - endif() - if(NOT LIBXSTREAMROOT OR NOT EXISTS "${LIBXSTREAMROOT}/include/libxstream.h") - message( - FATAL_ERROR - "LIBXSTREAMROOT not found. Set -DLIBXSTREAMROOT=/path/to/libxstream") - endif() - message(STATUS "Using LIBXSTREAM from ${LIBXSTREAMROOT}") - set(_libxstream_suffixes_save ${CMAKE_FIND_LIBRARY_SUFFIXES}) - if(BUILD_SHARED_LIBS) - set(CMAKE_FIND_LIBRARY_SUFFIXES .so .dylib) + unset(CP2K_OPENCL_BACKEND CACHE) + if(EXISTS "${LIBXSTREAM_INCLUDE_DIRS}/libxstream/opencl") + set(CP2K_OPENCL_BACKEND "${LIBXSTREAM_INCLUDE_DIRS}/libxstream") else() - set(CMAKE_FIND_LIBRARY_SUFFIXES .a) - endif() - find_library( - CP2K_LIBXSTREAM_LIBRARY xstream - PATHS "${LIBXSTREAMROOT}/lib" - NO_DEFAULT_PATH) - if(NOT CP2K_LIBXSTREAM_LIBRARY) - set(CMAKE_FIND_LIBRARY_SUFFIXES ${_libxstream_suffixes_save}) - find_library( - CP2K_LIBXSTREAM_LIBRARY xstream - PATHS "${LIBXSTREAMROOT}/lib" - NO_DEFAULT_PATH) - endif() - set(CMAKE_FIND_LIBRARY_SUFFIXES ${_libxstream_suffixes_save}) - if(NOT CP2K_LIBXSTREAM_LIBRARY) - message(FATAL_ERROR "libxstream library not found in ${LIBXSTREAMROOT}/lib") - endif() - - set(CP2K_OPENCL_BACKEND "${LIBXSTREAMROOT}/include") - set(CP2K_OPENCL_SCRIPT "${LIBXSTREAMROOT}/scripts/tool_opencl.sh") - if(EXISTS ${CP2K_OPENCL_SCRIPT}) - set(CP2K_OPENCL_COMMON - "${LIBXSTREAMROOT}/include/opencl/libxstream_atomics.h") - set(CP2K_USE_OPENCL ON) - message(STATUS "OpenCL backend found") - else() - message(FATAL_ERROR "OpenCL backend not found (${CP2K_OPENCL_SCRIPT})") + set(CP2K_OPENCL_BACKEND "${LIBXSTREAM_INCLUDE_DIRS}") endif() + set(CP2K_OPENCL_SAMPLES "${LIBXSTREAM_SMM_DIR}") + set(CP2K_OPENCL_SCRIPT "${LIBXSTREAM_OPENCL_SCRIPT}") + set(CP2K_OPENCL_COMMON "${LIBXSTREAM_OPENCL_SCRIPT}") + set(CP2K_USE_OPENCL ON) + message(STATUS "OpenCL backend found") endif() message("\n------------------------------------------------------------") @@ -737,24 +699,7 @@ if(CP2K_USE_ELPA) endif() if(CP2K_USE_LIBXC) - find_package(Libxc 7 QUIET CONFIG) - if(NOT Libxc_FOUND AND PkgConfig_FOUND) - pkg_check_modules(CP2K_LIBXCF03 QUIET IMPORTED_TARGET GLOBAL libxcf03>=7) - if(NOT CP2K_LIBXCF03_FOUND) - pkg_check_modules(CP2K_LIBXCF03 REQUIRED IMPORTED_TARGET GLOBAL libxc>=7) - endif() - pkg_check_modules(CP2K_LIBXC QUIET IMPORTED_TARGET GLOBAL libxc>=7) - if(NOT TARGET Libxc::xcf03) - add_library(Libxc::xcf03 INTERFACE IMPORTED) - target_link_libraries( - Libxc::xcf03 - INTERFACE PkgConfig::CP2K_LIBXCF03 - $<$:PkgConfig::CP2K_LIBXC>) - endif() - elseif(NOT Libxc_FOUND) - message( - FATAL_ERROR "LibXC >= 7 not found (tried CMake config and pkg-config)") - endif() + find_package(Libxc 7 REQUIRED) endif() if(CP2K_USE_GAUXC) @@ -826,6 +771,8 @@ if(CP2K_USE_DLAF) "${CP2K_DLAF_FORTRAN_LIBRARY}" DIRECTORY) get_filename_component(CP2K_DLAF_FORTRAN_PREFIX "${CP2K_DLAF_FORTRAN_PREFIX}" DIRECTORY) + # we will need to fix this issue later because it requires small + # modifications of the dlaf build system. It should not be hardcoded. if(EXISTS "${CP2K_DLAF_FORTRAN_PREFIX}/include/dlaf_fortran.mod") list(APPEND CP2K_DLAF_INCLUDE_DIRS "${CP2K_DLAF_FORTRAN_PREFIX}/include") @@ -955,10 +902,6 @@ if(CP2K_USE_ACE) endif() if(CP2K_USE_TBLITE) - find_package(mctc-lib REQUIRED) - find_package(toml-f REQUIRED) - find_package(dftd4 REQUIRED) - find_package(s-dftd3 REQUIRED) find_package(tblite REQUIRED) add_library(cp2k::tblite INTERFACE IMPORTED) target_link_libraries( @@ -1390,6 +1333,10 @@ if(NOT CP2K_USE_LIBXS) message(" - LIBXS") endif() +if(NOT CP2K_USE_LIBXSMM) + message(" - LIBXSMM") +endif() + if(NOT CP2K_USE_LIBINT2) message(" - Libint2") endif() diff --git a/cmake/cp2kConfig.cmake.in b/cmake/cp2kConfig.cmake.in index 4bfddff1fc..394fe95d15 100644 --- a/cmake/cp2kConfig.cmake.in +++ b/cmake/cp2kConfig.cmake.in @@ -38,9 +38,20 @@ if(NOT TARGET cp2k::cp2k) find_dependency(DBCSR 2.8 REQUIRED) + if (@CP2K_USE_LIBXSMM@) + set(CP2K_USE_LIBXSMM @CP2K_USE_LIBXSMM@) + find_dependency(libxsmm REQUIRED) + endif() + if(@CP2K_USE_LIBXS@) set(CP2K_USE_LIBXS @CP2K_USE_LIBXS@) - find_dependency(LIBXS REQUIRED) + find_dependency(libxs REQUIRED) + endif() + + if(@CP2K_USE_OPENCL@) + set(CP2K_USE_OPENCL @CP2K_USE_OPENCL@) + find_dependency(OpenCL REQUIRED) + find_dependency(libxstream REQUIRED) endif() if(@CP2K_USE_HIP@) diff --git a/cmake/modules/FindLIBXS.cmake b/cmake/modules/FindLIBXS.cmake deleted file mode 100644 index 49e240c430..0000000000 --- a/cmake/modules/FindLIBXS.cmake +++ /dev/null @@ -1,96 +0,0 @@ -#!-------------------------------------------------------------------------------------------------! -#! CP2K: A general program to perform molecular dynamics simulations ! -#! Copyright 2000-2026 CP2K developers group ! -#! ! -#! SPDX-License-Identifier: GPL-2.0-or-later ! -#!-------------------------------------------------------------------------------------------------! - -include(FindPackageHandleStandardArgs) -include(cp2k_utils) -find_package(PkgConfig QUIET) - -cp2k_set_default_paths(LIBXS "LIBXS") - -# Path probing: DBCSR hint > sibling of source > $HOME > /opt -if(CP2K_LIBXS_ROOT STREQUAL "/usr") - if(DBCSR_LIBXSROOT AND EXISTS "${DBCSR_LIBXSROOT}/include/libxs.h") - set(CP2K_LIBXS_ROOT "${DBCSR_LIBXSROOT}") - else() - foreach(_dir "${CMAKE_SOURCE_DIR}/../libxs" "$ENV{HOME}/libxs" "/opt/libxs") - if(EXISTS "${_dir}/include/libxs.h") - set(CP2K_LIBXS_ROOT "${_dir}") - break() - endif() - endforeach() - endif() -endif() - -if(PKG_CONFIG_FOUND) - if(BUILD_SHARED_LIBS) - pkg_check_modules(CP2K_LIBXS IMPORTED_TARGET GLOBAL libxs-shared) - else() - pkg_check_modules(CP2K_LIBXS IMPORTED_TARGET GLOBAL libxs-static) - endif() - if(NOT CP2K_LIBXS_FOUND) - pkg_check_modules(CP2K_LIBXS IMPORTED_TARGET GLOBAL libxs) - endif() -endif() - -if(NOT CP2K_LIBXS_FOUND) - set(_libxs_suffixes_save ${CMAKE_FIND_LIBRARY_SUFFIXES}) - if(BUILD_SHARED_LIBS) - set(CMAKE_FIND_LIBRARY_SUFFIXES .so .dylib) - else() - set(CMAKE_FIND_LIBRARY_SUFFIXES .a) - endif() - cp2k_find_libraries(LIBXS xs) - if(NOT CP2K_LIBXS_FOUND) - set(CMAKE_FIND_LIBRARY_SUFFIXES ${_libxs_suffixes_save}) - cp2k_find_libraries(LIBXS xs) - endif() - set(CMAKE_FIND_LIBRARY_SUFFIXES ${_libxs_suffixes_save}) -endif() - -if(NOT CP2K_LIBXS_INCLUDE_DIRS) - cp2k_include_dirs(LIBXS "libxs.h;include/libxs.h") -endif() - -if(CP2K_LIBXS_INCLUDE_DIRS) - find_package_handle_standard_args(LIBXS DEFAULT_MSG CP2K_LIBXS_INCLUDE_DIRS - CP2K_LIBXS_LINK_LIBRARIES) -else() - find_package_handle_standard_args(LIBXS DEFAULT_MSG CP2K_LIBXS_LINK_LIBRARIES) -endif() - -if(NOT TARGET cp2k::LIBXS::libxs) - add_library(cp2k::LIBXS::libxs INTERFACE IMPORTED) - if(CP2K_LIBXS_FOUND) - if(CP2K_LIBXS_LIBRARY_DIRS) - target_link_directories(cp2k::LIBXS::libxs INTERFACE - ${CP2K_LIBXS_LIBRARY_DIRS}) - endif() - set_target_properties( - cp2k::LIBXS::libxs PROPERTIES INTERFACE_LINK_LIBRARIES - "${CP2K_LIBXS_LINK_LIBRARIES}") - if(CP2K_LIBXS_INCLUDE_DIRS) - if(CP2K_LIBXS_PREFIX) - set_target_properties( - cp2k::LIBXS::libxs - PROPERTIES INTERFACE_INCLUDE_DIRECTORIES - "${CP2K_LIBXS_INCLUDE_DIRS};${CP2K_LIBXS_PREFIX}/include") - else() - set_target_properties( - cp2k::LIBXS::libxs PROPERTIES INTERFACE_INCLUDE_DIRECTORIES - "${CP2K_LIBXS_INCLUDE_DIRS}") - endif() - endif() - endif() -endif() - -if(NOT TARGET cp2k::LIBXS) - add_library(cp2k::LIBXS INTERFACE IMPORTED) - target_link_libraries(cp2k::LIBXS INTERFACE cp2k::LIBXS::libxs) -endif() - -mark_as_advanced(CP2K_LIBXS_INCLUDE_DIRS CP2K_LIBXS_LIBRARY_DIRS - CP2K_LIBXS_LINK_LIBRARIES) diff --git a/cmake/modules/FindLIBXSMM.cmake b/cmake/modules/FindLIBXSMM.cmake deleted file mode 100644 index bfe4f977cb..0000000000 --- a/cmake/modules/FindLIBXSMM.cmake +++ /dev/null @@ -1,59 +0,0 @@ -#!-------------------------------------------------------------------------------------------------! -#! CP2K: A general program to perform molecular dynamics simulations ! -#! Copyright 2000-2026 CP2K developers group ! -#! ! -#! SPDX-License-Identifier: GPL-2.0-or-later ! -#!-------------------------------------------------------------------------------------------------! - -include(FindPackageHandleStandardArgs) - -# Probe: user override > DBCSR hint > sibling of LIBXS > environment > common -# paths -if(NOT LIBXSMMROOT) - foreach(_dir - "${DBCSR_LIBXSMMROOT}" "$ENV{LIBXSMMROOT}" "${LIBXSROOT}/../libxsmm" - "${CMAKE_SOURCE_DIR}/../libxsmm" "$ENV{HOME}/libxsmm") - if(EXISTS "${_dir}/include/libxsmm.h") - set(LIBXSMMROOT "${_dir}") - break() - endif() - endforeach() -endif() - -if(LIBXSMMROOT) - find_path( - CP2K_LIBXSMM_INCLUDE_DIR libxsmm.h - PATHS "${LIBXSMMROOT}/include" - NO_DEFAULT_PATH) - set(_libxsmm_suffixes_save ${CMAKE_FIND_LIBRARY_SUFFIXES}) - if(BUILD_SHARED_LIBS) - set(CMAKE_FIND_LIBRARY_SUFFIXES .so .dylib) - else() - set(CMAKE_FIND_LIBRARY_SUFFIXES .a) - endif() - find_library( - CP2K_LIBXSMM_LIBRARY xsmm - PATHS "${LIBXSMMROOT}/lib" - NO_DEFAULT_PATH) - if(NOT CP2K_LIBXSMM_LIBRARY) - set(CMAKE_FIND_LIBRARY_SUFFIXES ${_libxsmm_suffixes_save}) - find_library( - CP2K_LIBXSMM_LIBRARY xsmm - PATHS "${LIBXSMMROOT}/lib" - NO_DEFAULT_PATH) - endif() - set(CMAKE_FIND_LIBRARY_SUFFIXES ${_libxsmm_suffixes_save}) -endif() - -find_package_handle_standard_args(LIBXSMM DEFAULT_MSG CP2K_LIBXSMM_INCLUDE_DIR - CP2K_LIBXSMM_LIBRARY) - -if(LIBXSMM_FOUND AND NOT TARGET cp2k::LIBXSMM) - add_library(cp2k::LIBXSMM UNKNOWN IMPORTED) - set_target_properties( - cp2k::LIBXSMM - PROPERTIES IMPORTED_LOCATION "${CP2K_LIBXSMM_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${CP2K_LIBXSMM_INCLUDE_DIR}") -endif() - -mark_as_advanced(CP2K_LIBXSMM_INCLUDE_DIR CP2K_LIBXSMM_LIBRARY) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 64b8e94e40..95e4915bcd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1551,7 +1551,7 @@ if(CP2K_USE_CUDA "${CMAKE_CURRENT_BINARY_DIR}/${CP2K_DBM_OPENCL_KERNEL}.h") add_custom_command( COMMAND - ${CP2K_OPENCL_SCRIPT} -b 6 -p \"\" -I "${LIBXSTREAMROOT}/include" + ${CP2K_OPENCL_SCRIPT} -b 6 -p \"\" -I "${CP2K_OPENCL_BACKEND}" ${CMAKE_CURRENT_SOURCE_DIR}/${CP2K_DBM_OPENCL_KERNEL} "${CP2K_DBM_OPENCL_GENHDR}" DEPENDS ${CP2K_OPENCL_SCRIPT} ${CP2K_OPENCL_COMMON} @@ -1561,8 +1561,10 @@ if(CP2K_USE_CUDA add_custom_target(cp2k_dbm_opencl_kernel DEPENDS "${CP2K_DBM_OPENCL_GENHDR}") include_directories(${CMAKE_CURRENT_BINARY_DIR}/dbm) - include_directories(${LIBXSTREAMROOT}/include) - include_directories(${LIBXSTREAMROOT}/samples) + include_directories(${CP2K_OPENCL_BACKEND}) + if(CP2K_OPENCL_SAMPLES) + include_directories(${CP2K_OPENCL_SAMPLES}) + endif() list(APPEND CP2K_DBM_SRCS_C dbm/dbm_multiply_opencl.c) else() list(APPEND CP2K_SRCS_GPU ${CP2K_DBM_SRCS_GPU}) @@ -1634,10 +1636,10 @@ add_library(cp2k_linalg_libs INTERFACE) target_link_libraries( cp2k_linalg_libs INTERFACE cp2k::LAPACK::lapack - $<$:cp2k::LIBXS::libxs> - $<$:cp2k::LIBXSMM> - $<$:${CP2K_LIBXSTREAM_LIBRARY}> $<$:OpenCL::OpenCL> + $<$:libxstream::libxstream> + $<$:libxs::libxs> + $<$:libxsmm::libxsmm> cp2k::BLAS::blas $<$:cp2k_cuda_libs> $<$:cp2k_hip_libs> @@ -1729,7 +1731,9 @@ elseif(CP2K_USE_ACCEL MATCHES "HIP") "${CMAKE_HIP_ARCHITECTURES}") elseif(CP2K_USE_ACCEL MATCHES "OPENCL") include_directories(${CP2K_OPENCL_BACKEND}) - include_directories(${LIBXSTREAMROOT}/samples) + if(CP2K_OPENCL_SAMPLES) + include_directories(${CP2K_OPENCL_SAMPLES}) + endif() include_directories(${OpenCL_INCLUDE_DIR}) endif() @@ -1849,7 +1853,6 @@ target_compile_definitions( $<$:__COSMA> $<$:__LIBXS> $<$:__BLAS> - $<$:__LIBXSMM> $<$:__LIBXSMM> $<$:__LIBXSTREAM> $<$:__SIRIUS_DFTD3> @@ -1883,6 +1886,16 @@ endif() add_library(cp2k::cp2k ALIAS cp2k) +if(CP2K_USE_LIBXS) + message(STATUS "Adding libxs_jit.F from dependency libxs for compilation") + get_target_property(_libxs_incdirs libxs::libxs INTERFACE_INCLUDE_DIRECTORIES) + find_path(CP2K_LIBXS_JIT_DIR "libxs_jit.F" HINTS ${_libxs_incdirs}) + if(CP2K_LIBXS_JIT_DIR) + target_sources(cp2k PRIVATE "${CP2K_LIBXS_JIT_DIR}/libxs_jit.F") + endif() + unset(_libxs_incdirs) +endif() + # ############################################################################## # applications # ############################################################################## @@ -1973,7 +1986,7 @@ target_compile_definitions( dbm_miniapp PRIVATE $<$:__LIBXS> $<$:__BLAS> - $<$:__LIBXSMM> + $<$:__LIBXSMM> $<$:__MKL>) if(CP2K_DISABLE_DBM_GPU) @@ -1995,7 +2008,7 @@ foreach(__app grid_miniapp grid_unittest) ${__app} PRIVATE $<$:__LIBXS> $<$:__BLAS> - $<$:__LIBXSMM> + $<$:__LIBXSMM> $<$:__MKL>) if(CP2K_DISABLE_GRID_GPU) diff --git a/src/aobasis/ai_contraction_sphi.F b/src/aobasis/ai_contraction_sphi.F index fc3eddbbbb..21560f953e 100644 --- a/src/aobasis/ai_contraction_sphi.F +++ b/src/aobasis/ai_contraction_sphi.F @@ -16,9 +16,8 @@ MODULE ai_contraction_sphi USE kinds, ONLY: dp, int_8 #if defined(__LIBXS) - USE LIBXS, ONLY: libxs_gemm_config_t, libxs_gemm_dispatch, & - libxs_gemm_call, LIBXS_DATATYPE_F64 - USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_LOC, C_FUNLOC + USE LIBXS_JIT, ONLY: libxs_gemm_config_t, libxs_gemm_dispatch, & + libxs_gemm_call, LIBXS_DATATYPE_F64, C_LOC #endif #include "../base/base_uses.f90" @@ -265,47 +264,6 @@ CONTAINS #if defined(__LIBXS) TYPE(libxs_gemm_config_t) :: cfg1, cfg2 INTEGER :: rc1, rc2 -#if defined(__MKL) - INTERFACE - FUNCTION mkl_cblas_jit_create_dgemm(jitter, & - layout, transa, transb, m, n, k, & - alpha, lda, ldb, beta, ldc) & - RESULT(status) BIND(C) - USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_PTR, C_INT, C_DOUBLE - INTEGER(C_INT) :: status - TYPE(C_PTR) :: jitter - INTEGER(C_INT), VALUE :: layout, transa, transb - INTEGER(C_INT), VALUE :: m, n, k, lda, ldb, ldc - REAL(C_DOUBLE), VALUE :: alpha, beta - END FUNCTION - FUNCTION mkl_jit_get_dgemm_ptr(jitter) RESULT(ptr) BIND(C) - USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_FUNPTR, C_PTR - TYPE(C_FUNPTR) :: ptr - TYPE(C_PTR), INTENT(IN), VALUE :: jitter - END FUNCTION - END INTERFACE -#endif -#if defined(__LIBXSMM) - INTERFACE - FUNCTION libxsmm_dispatch_gemm(shape, flags, prefetch) & - RESULT(fn) BIND(C) - USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_FUNPTR, C_INT - INTEGER(C_INT), INTENT(IN) :: shape(10) - INTEGER(C_INT), INTENT(IN), VALUE :: flags, prefetch - TYPE(C_FUNPTR) :: fn - END FUNCTION - END INTERFACE -#endif - INTERFACE - SUBROUTINE dgemm_blas(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc) & - BIND(C, NAME="dgemm_") - USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_INT, C_CHAR, C_DOUBLE - CHARACTER(1, C_CHAR), INTENT(IN) :: transa, transb - INTEGER(C_INT), INTENT(IN) :: m, n, k, lda, ldb, ldc - REAL(C_DOUBLE), INTENT(IN) :: alpha, beta, a(*), b(*) - REAL(C_DOUBLE), INTENT(INOUT) :: c(*) - END SUBROUTINE - END INTERFACE #endif CALL timeset(routineN, handle) @@ -343,46 +301,14 @@ CONTAINS #if defined(__LIBXS) IF (ab_first) THEN rc1 = libxs_gemm_dispatch(cfg1, LIBXS_DATATYPE_F64, 'N', 'N', & - nsgfa, ncob, ncoa, nsgfa, ncoa, nsgfa, 1.0D0, 0.0D0 & -#if defined(__MKL) - , jit_create_dgemm=C_FUNLOC(mkl_cblas_jit_create_dgemm) & - , jit_get_dgemm=C_FUNLOC(mkl_jit_get_dgemm_ptr) & -#endif -#if defined(__LIBXSMM) - , xgemm_dispatch=C_FUNLOC(libxsmm_dispatch_gemm) & -#endif - , dgemm_blas=C_FUNLOC(dgemm_blas)) + nsgfa, ncob, ncoa, nsgfa, ncoa, nsgfa, 1.0D0, 0.0D0) rc2 = libxs_gemm_dispatch(cfg2, LIBXS_DATATYPE_F64, 'N', 'N', & - nsgfa, nsgfb, ncob, nsgfa, ncob, nsgfa, 1.0D0, 0.0D0 & -#if defined(__MKL) - , jit_create_dgemm=C_FUNLOC(mkl_cblas_jit_create_dgemm) & - , jit_get_dgemm=C_FUNLOC(mkl_jit_get_dgemm_ptr) & -#endif -#if defined(__LIBXSMM) - , xgemm_dispatch=C_FUNLOC(libxsmm_dispatch_gemm) & -#endif - , dgemm_blas=C_FUNLOC(dgemm_blas)) + nsgfa, nsgfb, ncob, nsgfa, ncob, nsgfa, 1.0D0, 0.0D0) ELSE rc1 = libxs_gemm_dispatch(cfg1, LIBXS_DATATYPE_F64, 'N', 'N', & - ncoa, nsgfb, ncob, ncoa, ncob, ncoa, 1.0D0, 0.0D0 & -#if defined(__MKL) - , jit_create_dgemm=C_FUNLOC(mkl_cblas_jit_create_dgemm) & - , jit_get_dgemm=C_FUNLOC(mkl_jit_get_dgemm_ptr) & -#endif -#if defined(__LIBXSMM) - , xgemm_dispatch=C_FUNLOC(libxsmm_dispatch_gemm) & -#endif - , dgemm_blas=C_FUNLOC(dgemm_blas)) + ncoa, nsgfb, ncob, ncoa, ncob, ncoa, 1.0D0, 0.0D0) rc2 = libxs_gemm_dispatch(cfg2, LIBXS_DATATYPE_F64, 'N', 'N', & - nsgfa, nsgfb, ncoa, nsgfa, ncoa, nsgfa, 1.0D0, 0.0D0 & -#if defined(__MKL) - , jit_create_dgemm=C_FUNLOC(mkl_cblas_jit_create_dgemm) & - , jit_get_dgemm=C_FUNLOC(mkl_jit_get_dgemm_ptr) & -#endif -#if defined(__LIBXSMM) - , xgemm_dispatch=C_FUNLOC(libxsmm_dispatch_gemm) & -#endif - , dgemm_blas=C_FUNLOC(dgemm_blas)) + nsgfa, nsgfb, ncoa, nsgfa, ncoa, nsgfa, 1.0D0, 0.0D0) END IF IF (0 /= rc1 .AND. 0 /= rc2) THEN IF (ab_first) THEN diff --git a/src/dbm/Makefile b/src/dbm/Makefile index 13f3703ded..594c4e2e06 100644 --- a/src/dbm/Makefile +++ b/src/dbm/Makefile @@ -67,7 +67,7 @@ endif ifneq ($(LIBXS),0) LIBXSROOT ?= $(wildcard $(CP2KHOME)/../libxs) ifneq ($(LIBXSROOT),) -CFLAGS += -D__LIBXS -D__BLAS -I$(LIBXSROOT)/include +CFLAGS += -D__LIBXS -D__BLAS -I$(LIBXSROOT) LIBS += $(LIBXSROOT)/lib/libxs.a # LIBXSMM headers enable JIT kernel dispatch inside LIBXS. LIBXSMMROOT ?= $(wildcard $(LIBXSROOT)/../libxsmm) @@ -88,7 +88,7 @@ ifneq ($(OPENCL),0) ifneq ($(LIBXS),0) LIBXSTREAMROOT ?= $(wildcard $(CP2KHOME)/../libxstream) ifneq ($(LIBXSTREAMROOT),) -CFLAGS += -D__LIBXSTREAM -I$(LIBXSTREAMROOT)/include +CFLAGS += -D__LIBXSTREAM -I$(LIBXSTREAMROOT) LIBS += $(LIBXSTREAMROOT)/lib/libxstream.a else OPENCL := 0 @@ -163,9 +163,9 @@ realclean: clean # Enable OpenCL offload backend. ifneq ($(OPENCL),0) OPENCL_SRC := $(PROJHOME)/dbm_multiply_opencl.cl -OPENCL_CMN := $(wildcard $(LIBXSTREAMROOT)/include/opencl/*.h) +OPENCL_CMN := $(wildcard $(LIBXSTREAMROOT)/libxstream/opencl/*.h) OPENCL_GEN := $(LIBXSTREAMROOT)/scripts/tool_opencl.sh -OPENCL_ARG := -b 6 -p "" -I $(LIBXSTREAMROOT)/include +OPENCL_ARG := -b 6 -p "" -I $(LIBXSTREAMROOT)/libxstream ifneq (,$(filter-out 0,$(DBG))) OPENCL_ARG += -d diff --git a/src/dbm/dbm_multiply_cpu.c b/src/dbm/dbm_multiply_cpu.c index 34534e661c..5d98ce944f 100644 --- a/src/dbm/dbm_multiply_cpu.c +++ b/src/dbm/dbm_multiply_cpu.c @@ -14,7 +14,7 @@ #include #endif #if defined(__LIBXS) -#include +#include #endif /******************************************************************************* diff --git a/src/dbm/dbm_multiply_opencl.c b/src/dbm/dbm_multiply_opencl.c index bd48a7df71..e74fa83c1b 100644 --- a/src/dbm/dbm_multiply_opencl.c +++ b/src/dbm/dbm_multiply_opencl.c @@ -9,9 +9,9 @@ #include "dbm_multiply_gpu_kernel.h" #include "dbm_multiply_opencl.cl.h" -#include -#include -#include +#include +#include +#include #if !defined(OPENCL_DBM_SOURCE_MULTIPLY) #error "OpenCL kernel source code not found!" diff --git a/src/grid/dgemm/grid_dgemm_utils.c b/src/grid/dgemm/grid_dgemm_utils.c index 6a67fd2c87..886c55b8bc 100644 --- a/src/grid/dgemm/grid_dgemm_utils.c +++ b/src/grid/dgemm/grid_dgemm_utils.c @@ -20,7 +20,7 @@ #include #endif #if defined(__LIBXS) -#include +#include #endif #include "../common/grid_common.h" diff --git a/src/offload/offload_library.c b/src/offload/offload_library.c index 343b6943c9..86587cfc5a 100644 --- a/src/offload/offload_library.c +++ b/src/offload/offload_library.c @@ -18,7 +18,7 @@ #elif defined(__OFFLOAD_HIP) #include #elif defined(__OFFLOAD_OPENCL) -#include +#include #endif #if defined(__OFFLOAD_PROFILING) diff --git a/src/offload/offload_mempool.c b/src/offload/offload_mempool.c index 51ec670766..ffbe08daf1 100644 --- a/src/offload/offload_mempool.c +++ b/src/offload/offload_mempool.c @@ -22,10 +22,10 @@ #endif #if defined(__LIBXSTREAM) -#include -#include +#include +#include #elif defined(__LIBXS) -#include +#include #endif #define OFFLOAD_MEMPOOL_PRINT(FN, MSG, OUTPUT_UNIT) \ diff --git a/src/offload/offload_runtime.h b/src/offload/offload_runtime.h index dacd5004e5..c40c6b3efe 100644 --- a/src/offload/offload_runtime.h +++ b/src/offload/offload_runtime.h @@ -39,7 +39,7 @@ #include #elif defined(__OFFLOAD_OPENCL) /* Types, macros, and functions provided by libxstream_cp2k.h. */ -#include +#include #endif #ifdef __cplusplus diff --git a/tools/docker/Dockerfile.test_gcc10 b/tools/docker/Dockerfile.test_gcc10 index 8c77654ea2..d78afe63fd 100644 --- a/tools/docker/Dockerfile.test_gcc10 +++ b/tools/docker/Dockerfile.test_gcc10 @@ -52,7 +52,7 @@ COPY ./tools/toolchain/scripts/VERSION \ COPY ./tools/toolchain/install_cp2k_toolchain.sh . RUN ./install_cp2k_toolchain.sh \ --mpi-mode=no \ - --with-dbcsr \ + --with-dbcsr=install \ --with-gcc=system \ --with-cmake=system \ --with-ninja=system \ @@ -60,9 +60,11 @@ RUN ./install_cp2k_toolchain.sh \ --with-libxc=no \ --with-libint=no \ --with-fftw=no \ - --with-libxsmm=no \ + --with-libxsmm=install \ + --with-libxs=install \ --with-spglib=no \ --with-libvori=no \ + --with-tblite=no \ --dry-run # Dry-run leaves behind config files for the followup install scripts. diff --git a/tools/docker/Dockerfile.test_gcc11 b/tools/docker/Dockerfile.test_gcc11 index 1d0c5dfc67..4a9eae31a5 100644 --- a/tools/docker/Dockerfile.test_gcc11 +++ b/tools/docker/Dockerfile.test_gcc11 @@ -52,7 +52,7 @@ COPY ./tools/toolchain/scripts/VERSION \ COPY ./tools/toolchain/install_cp2k_toolchain.sh . RUN ./install_cp2k_toolchain.sh \ --mpi-mode=no \ - --with-dbcsr \ + --with-dbcsr=install \ --with-gcc=system \ --with-cmake=system \ --with-ninja=system \ @@ -60,9 +60,11 @@ RUN ./install_cp2k_toolchain.sh \ --with-libxc=no \ --with-libint=no \ --with-fftw=no \ - --with-libxsmm=no \ + --with-libxsmm=install \ + --with-libxs=install \ --with-spglib=no \ --with-libvori=no \ + --with-tblite=no \ --dry-run # Dry-run leaves behind config files for the followup install scripts. diff --git a/tools/docker/Dockerfile.test_gcc12 b/tools/docker/Dockerfile.test_gcc12 index cd4f15de3f..639a89e550 100644 --- a/tools/docker/Dockerfile.test_gcc12 +++ b/tools/docker/Dockerfile.test_gcc12 @@ -52,7 +52,7 @@ COPY ./tools/toolchain/scripts/VERSION \ COPY ./tools/toolchain/install_cp2k_toolchain.sh . RUN ./install_cp2k_toolchain.sh \ --mpi-mode=no \ - --with-dbcsr \ + --with-dbcsr=install \ --with-gcc=system \ --with-cmake=system \ --with-ninja=system \ @@ -60,9 +60,11 @@ RUN ./install_cp2k_toolchain.sh \ --with-libxc=no \ --with-libint=no \ --with-fftw=no \ - --with-libxsmm=no \ + --with-libxsmm=install \ + --with-libxs=install \ --with-spglib=no \ --with-libvori=no \ + --with-tblite=no \ --dry-run # Dry-run leaves behind config files for the followup install scripts. diff --git a/tools/docker/Dockerfile.test_gcc13 b/tools/docker/Dockerfile.test_gcc13 index 7945f385bf..59e8a3b8fe 100644 --- a/tools/docker/Dockerfile.test_gcc13 +++ b/tools/docker/Dockerfile.test_gcc13 @@ -52,7 +52,7 @@ COPY ./tools/toolchain/scripts/VERSION \ COPY ./tools/toolchain/install_cp2k_toolchain.sh . RUN ./install_cp2k_toolchain.sh \ --mpi-mode=no \ - --with-dbcsr \ + --with-dbcsr=install \ --with-gcc=system \ --with-cmake=system \ --with-ninja=system \ @@ -60,9 +60,11 @@ RUN ./install_cp2k_toolchain.sh \ --with-libxc=no \ --with-libint=no \ --with-fftw=no \ - --with-libxsmm=no \ + --with-libxsmm=install \ + --with-libxs=install \ --with-spglib=no \ --with-libvori=no \ + --with-tblite=no \ --dry-run # Dry-run leaves behind config files for the followup install scripts. diff --git a/tools/docker/Dockerfile.test_gcc14 b/tools/docker/Dockerfile.test_gcc14 index 65e80aabbf..37ccacce6c 100644 --- a/tools/docker/Dockerfile.test_gcc14 +++ b/tools/docker/Dockerfile.test_gcc14 @@ -56,7 +56,7 @@ COPY ./tools/toolchain/scripts/VERSION \ COPY ./tools/toolchain/install_cp2k_toolchain.sh . RUN ./install_cp2k_toolchain.sh \ --mpi-mode=no \ - --with-dbcsr \ + --with-dbcsr=install \ --with-gcc=system \ --with-cmake=system \ --with-ninja=system \ @@ -64,9 +64,11 @@ RUN ./install_cp2k_toolchain.sh \ --with-libxc=no \ --with-libint=no \ --with-fftw=no \ - --with-libxsmm=no \ + --with-libxsmm=install \ + --with-libxs=install \ --with-spglib=no \ --with-libvori=no \ + --with-tblite=no \ --dry-run # Dry-run leaves behind config files for the followup install scripts. diff --git a/tools/docker/Dockerfile.test_gcc15 b/tools/docker/Dockerfile.test_gcc15 index a769f9d1e8..a9dbe469e7 100644 --- a/tools/docker/Dockerfile.test_gcc15 +++ b/tools/docker/Dockerfile.test_gcc15 @@ -56,7 +56,7 @@ COPY ./tools/toolchain/scripts/VERSION \ COPY ./tools/toolchain/install_cp2k_toolchain.sh . RUN ./install_cp2k_toolchain.sh \ --mpi-mode=no \ - --with-dbcsr \ + --with-dbcsr=install \ --with-gcc=system \ --with-cmake=system \ --with-ninja=system \ @@ -64,9 +64,11 @@ RUN ./install_cp2k_toolchain.sh \ --with-libxc=no \ --with-libint=no \ --with-fftw=no \ - --with-libxsmm=no \ + --with-libxsmm=install \ + --with-libxs=install \ --with-spglib=no \ --with-libvori=no \ + --with-tblite=no \ --dry-run # Dry-run leaves behind config files for the followup install scripts. diff --git a/tools/docker/Dockerfile.test_gcc16 b/tools/docker/Dockerfile.test_gcc16 index 491bf744cc..60f6483ec2 100644 --- a/tools/docker/Dockerfile.test_gcc16 +++ b/tools/docker/Dockerfile.test_gcc16 @@ -56,7 +56,7 @@ COPY ./tools/toolchain/scripts/VERSION \ COPY ./tools/toolchain/install_cp2k_toolchain.sh . RUN ./install_cp2k_toolchain.sh \ --mpi-mode=no \ - --with-dbcsr \ + --with-dbcsr=install \ --with-gcc=system \ --with-cmake=system \ --with-ninja=system \ @@ -64,9 +64,11 @@ RUN ./install_cp2k_toolchain.sh \ --with-libxc=no \ --with-libint=no \ --with-fftw=no \ - --with-libxsmm=no \ + --with-libxsmm=install \ + --with-libxs=install \ --with-spglib=no \ --with-libvori=no \ + --with-tblite=no \ --dry-run # Dry-run leaves behind config files for the followup install scripts. diff --git a/tools/docker/Dockerfile.test_gcc9 b/tools/docker/Dockerfile.test_gcc9 index e0c4e84964..b5439b34ac 100644 --- a/tools/docker/Dockerfile.test_gcc9 +++ b/tools/docker/Dockerfile.test_gcc9 @@ -52,7 +52,7 @@ COPY ./tools/toolchain/scripts/VERSION \ COPY ./tools/toolchain/install_cp2k_toolchain.sh . RUN ./install_cp2k_toolchain.sh \ --mpi-mode=no \ - --with-dbcsr \ + --with-dbcsr=install \ --with-gcc=system \ --with-cmake=system \ --with-ninja=system \ @@ -60,9 +60,11 @@ RUN ./install_cp2k_toolchain.sh \ --with-libxc=no \ --with-libint=no \ --with-fftw=no \ - --with-libxsmm=no \ + --with-libxsmm=install \ + --with-libxs=install \ --with-spglib=no \ --with-libvori=no \ + --with-tblite=no \ --dry-run # Dry-run leaves behind config files for the followup install scripts. diff --git a/tools/docker/Dockerfile.test_minimal b/tools/docker/Dockerfile.test_minimal index 04b6521a5b..715aed280d 100644 --- a/tools/docker/Dockerfile.test_minimal +++ b/tools/docker/Dockerfile.test_minimal @@ -56,7 +56,7 @@ COPY ./tools/toolchain/scripts/VERSION \ COPY ./tools/toolchain/install_cp2k_toolchain.sh . RUN ./install_cp2k_toolchain.sh \ --mpi-mode=no \ - --with-dbcsr \ + --with-dbcsr=install \ --with-gcc=system \ --with-cmake=system \ --with-ninja=system \ @@ -64,9 +64,11 @@ RUN ./install_cp2k_toolchain.sh \ --with-libxc=no \ --with-libint=no \ --with-fftw=no \ - --with-libxsmm=no \ + --with-libxsmm=install \ + --with-libxs=install \ --with-spglib=no \ --with-libvori=no \ + --with-tblite=no \ --dry-run # Dry-run leaves behind config files for the followup install scripts. diff --git a/tools/docker/Dockerfile.test_spack_psmp-rockylinux b/tools/docker/Dockerfile.test_spack_psmp-rockylinux index bc6a77eccd..c0e9ea0d81 100644 --- a/tools/docker/Dockerfile.test_spack_psmp-rockylinux +++ b/tools/docker/Dockerfile.test_spack_psmp-rockylinux @@ -40,13 +40,13 @@ COPY . cp2k/ # Build CP2K dependencies WORKDIR /opt/cp2k -RUN ./make_cp2k.sh -bd_only -cv psmp -gpu none -gv 14 -mpi mpich -ue -df libxsmm -ef openpmd +RUN ./make_cp2k.sh -bd_only -cv psmp -gpu none -gv 14 -mpi mpich -ue -ef openpmd ###### Stage 2: Build CP2K ###### FROM build_deps AS build_cp2k -RUN ./make_cp2k.sh -cv psmp -gv 14 -gpu none -mpi mpich -df libxsmm -ef openpmd +RUN ./make_cp2k.sh -cv psmp -gv 14 -gpu none -mpi mpich -ef openpmd ###### Stage 3: Install CP2K ###### diff --git a/tools/docker/generate_dockerfiles.py b/tools/docker/generate_dockerfiles.py index 2eb0d913b1..5e44eef4b2 100755 --- a/tools/docker/generate_dockerfiles.py +++ b/tools/docker/generate_dockerfiles.py @@ -147,7 +147,7 @@ def main() -> None: mpi_mode="mpich", base_image="docker.io/rockylinux/rockylinux:10", gcc_version=14, - feature_flags="-df libxsmm -ef openpmd", + feature_flags="-ef openpmd", testopts=testopts, image_tag=f.image_tag, ) @@ -532,7 +532,7 @@ RUN ln -sf /usr/bin/gcc-{gcc_version} /usr/local/bin/gcc && \ """ + install_toolchain( base_image=base_image, mpi_mode="no", - with_dbcsr="", + with_dbcsr="install", with_gcc="system", with_cmake="system", with_ninja="system", @@ -540,9 +540,11 @@ RUN ln -sf /usr/bin/gcc-{gcc_version} /usr/local/bin/gcc && \ with_libxc="no", with_libint="no", with_fftw="no", - with_libxsmm="no", + with_libxsmm="install", + with_libxs="install", with_spglib="no", with_libvori="no", + with_tblite="no", ) return output diff --git a/tools/spack/cp2k_deps_p.yaml b/tools/spack/cp2k_deps_p.yaml index 3a3207921d..128ef3960f 100644 --- a/tools/spack/cp2k_deps_p.yaml +++ b/tools/spack/cp2k_deps_p.yaml @@ -196,7 +196,7 @@ spack: # CP2K - "adios2@2.12.0" - "cosma@2.8.4" - - "dbcsr@2.9.1" + - "dbcsr@2.9.2-preview" - "deepmdkit@3.1.3" # - "dftd4@4.0.2" - "dla-future@0.10.0" @@ -213,8 +213,8 @@ spack: - "libvdwxc@0.5.0" - "libvori@220621" - "libxc@7.0.0" - - "libxs@20260605" - - "libxsmm@1.17-cp2k" + - "libxs@20260611" + - "libxsmm@20260610-cp2k" - "mimic-mcl@3.0.0" - "netlib-scalapack@2.2.3" - "openblas@0.3.33" diff --git a/tools/spack/cp2k_deps_s-static.yaml b/tools/spack/cp2k_deps_s-static.yaml index 6492a0c680..b15f323a3a 100644 --- a/tools/spack/cp2k_deps_s-static.yaml +++ b/tools/spack/cp2k_deps_s-static.yaml @@ -102,7 +102,7 @@ spack: - "ninja@1.13" - "python@3.11:" # CP2K - - "dbcsr@2.9.1" + - "dbcsr@2.9.2-preview" # - "dftd4@4.0.2" - "fftw@3.3.11" # - "hdf5@2.1.0" @@ -110,8 +110,8 @@ spack: - "libint@2.13.1-cp2k-lmax-5" - "libvori@220621" - "libxc@7.0.0" - - "libxs@20260605" - - "libxsmm@1.17-cp2k" + - "libxs@20260611" + - "libxsmm@20260610-cp2k" - "openblas@0.3.33" - "pace@2025.12.4.1" - "spglib@2.7.0" diff --git a/tools/spack/cp2k_deps_s.yaml b/tools/spack/cp2k_deps_s.yaml index ef44e04713..572f95242d 100644 --- a/tools/spack/cp2k_deps_s.yaml +++ b/tools/spack/cp2k_deps_s.yaml @@ -125,7 +125,7 @@ spack: - "ninja@1.13" - "python@3.11:" # CP2K - - "dbcsr@2.9.1" + - "dbcsr@2.9.2-preview" - "deepmdkit@3.1.3" # - "dftd4@4.0.2" - "fftw@3.3.11" @@ -136,8 +136,8 @@ spack: - "libint@2.13.1-cp2k-lmax-5" - "libvori@220621" - "libxc@7.0.0" - - "libxs@20260605" - - "libxsmm@1.17-cp2k" + - "libxs@20260611" + - "libxsmm@20260610-cp2k" - "openblas@0.3.33" - "pace@2025.12.4.1" - "py-torch@2.12.0" diff --git a/tools/spack/spack_repo/cp2k_dev/packages/dbcsr/package.py b/tools/spack/spack_repo/cp2k_dev/packages/dbcsr/package.py new file mode 100644 index 0000000000..27b18c4c57 --- /dev/null +++ b/tools/spack/spack_repo/cp2k_dev/packages/dbcsr/package.py @@ -0,0 +1,259 @@ +# Copyright Spack Project Developers. See COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +import os + +from spack_repo.builtin.build_systems.cmake import CMakePackage, generator +from spack_repo.builtin.build_systems.cuda import CudaPackage +from spack_repo.builtin.build_systems.rocm import ROCmPackage + +from spack.package import * + + +class Dbcsr(CMakePackage, CudaPackage, ROCmPackage): + """Distributed Block Compressed Sparse Row matrix library.""" + + homepage = "https://github.com/cp2k/dbcsr" + git = "https://github.com/cp2k/dbcsr.git" + url = "https://github.com/cp2k/dbcsr/releases/download/v2.2.0/dbcsr-2.2.0.tar.gz" + list_url = "https://github.com/cp2k/dbcsr/releases" + + maintainers("dev-zero", "mtaillefumier", "RMeli", "hfp") + + license("GPL-2.0-or-later") + + version("develop", branch="develop") + version("2.9.2-preview", commit="4d85b72e3427ec7f595ad0cf38a4d00f72f9ff60") + version("2.9.1", sha256="fa5a4aeba0a07761511af2c26c779bd811b5ea0ef06a5d94535b6dd7b2e0ce59") + version("2.9.0", sha256="a04cacd2203bd97a31ac993f9ab84237a48191140bba29efadbc27db544bbcd6") + version("2.8.0", sha256="d55e4f052f28d1ed0faeaa07557241439243287a184d1fd27f875c8b9ca6bd96") + + new_smm_versions = "@2.9.2-preview,2.9.2:,develop" + + variant("tests", default=False, description="Build DBCSR unit tests") + variant("tests", default=True, description="Build DBCSR unit tests", when="@2.1:2.2") + variant("mpi", default=True, description="Compile with MPI") + variant("openmp", default=True, description="Build with OpenMP support") + variant("shared", default=True, description="Build shared library") + variant( + "smm", + default="libxsmm", + values=("libxsmm", "libxs", "blas"), + description="Library for small matrix multiplications", + ) + variant( + "cuda_arch_35_k20x", + default=False, + description=( + "CP2K (resp. DBCSR) has specific parameter sets for" + " different GPU models. Enable this when building" + " with cuda_arch=35 for a K20x instead of a K40" + ), + ) + variant("examples", default=True, description="Build examples") + + variant("opencl", default=False, description="Enable OpenCL backend") + variant("mpi_f08", default=False, when="@2.6:", description="Use mpi F08 module") + + depends_on("c", type="build") # generated + depends_on("cxx", type="build") # generated + depends_on("fortran", type="build") # generated + + depends_on("blas") + depends_on("lapack") + depends_on("mpi", when="+mpi") + + conflicts( + "smm=libxs", when="@:2.9.1", msg="smm=libxs is only supported by DBCSR 2.9.2 or newer" + ) + + depends_on("libxsmm@1.11:", when="@:2.9.1 smm=libxsmm") + + with when(f"{new_smm_versions} smm=libxs"): + depends_on("libxs") + + with when(f"{new_smm_versions} smm=libxsmm"): + depends_on("libxs") + depends_on("libxsmm") + + depends_on("cmake@3.10:", type="build") + depends_on("cmake@3.12:", type="build", when="@2.1:") + depends_on("cmake@3.17:", type="build", when="@2.2:") + depends_on("cmake@3.22:", type="build", when="@2.3:") + + depends_on("py-fypp", type="build") + depends_on("py-fypp@3.1:", type="build", when="@2.6:") + depends_on("pkgconfig", type="build") + depends_on("python@3.6:", type="build", when="+cuda") + + depends_on("hipblas", when="+rocm") + + # Several packages provide "opencl" (incl. ICD/loader), e.g., "cuda" + depends_on("opencl", when="+opencl") + depends_on("libxstream", when="+opencl") + opencl_loader_header_version = "2022.10.24" + depends_on(f"opencl-c-headers@{opencl_loader_header_version}:", when="+opencl") + requires(f"%opencl=opencl-icd-loader@{opencl_loader_header_version}:", when="+opencl") + + # All examples require MPI + conflicts("+examples", when="~mpi", msg="Examples require MPI") + + # We only support specific gpu archs for which we have parameter files + # for optimal kernels. Note that we don't override the parent class arch + # properties, since the parent class defines constraints for different archs + # Instead just mark all unsupported cuda archs as conflicting. + dbcsr_cuda_archs = ("35", "37", "60", "70", "80", "90") + cuda_msg = f"dbcsr only supports cuda_arch {dbcsr_cuda_archs}" + + for arch in CudaPackage.cuda_arch_values: + if arch not in dbcsr_cuda_archs: + conflicts("+cuda", when=f"cuda_arch={arch}", msg=cuda_msg) + + conflicts("+cuda", when="cuda_arch=none", msg=cuda_msg) + + dbcsr_amdgpu_targets = ( + "gfx906", + "gfx908", + "gfx90a", + "gfx90a:xnack-", + "gfx90a:xnack+", + "gfx942", + "gfx950", + ) + amd_msg = f"""DBCSR supports these AMD gpu targets: {", ".join(dbcsr_amdgpu_targets)}. + Set amdgpu_target explicitly to one of the supported targets""" + + for arch in ROCmPackage.amdgpu_targets: + if arch not in dbcsr_amdgpu_targets: + conflicts("+rocm", when=f"amdgpu_target={arch}", msg=amd_msg) + + # GPU runtimes are usually mutually exclusive + accel_msg = "CUDA and ROCm are mutually exlusive" + conflicts("+cuda", when="+rocm", msg=accel_msg) + conflicts("+cuda", when="+opencl", msg=accel_msg) + conflicts("+rocm", when="+opencl", msg=accel_msg) + + # Require OpenMP threading by making other options conflict + conflicts("^intel-oneapi-mkl threads=none", when="+openmp") + conflicts("^intel-oneapi-mkl threads=tbb", when="+openmp") + conflicts("^openblas threads=pthreads", when="+openmp") + conflicts("^openblas threads=none", when="+openmp") + + # OpenCL follows the legacy LIBXSMM SMM path up to DBCSR 2.9.1. + requires("smm=libxsmm", when="+opencl @:2.9.1") + + # Starting with the 2.9.2 interface, LIBXS is an explicit SMM backend. + requires("smm=libxs", when=f"+opencl {new_smm_versions}") + + with when("+mpi"): + # When using mpich 4.1 or higher, mpi_f08 has to be used, otherwise: + # Error: Type mismatch in argument 'baseptr' at (1); passed TYPE(c_ptr) + # to INTEGER(8) + conflicts("^mpich@4.1:", when="@:2.5") + conflicts("~mpi_f08", when="^mpich@4.1:") + depends_on("mpich+fortran", when="^[virtuals=mpi] mpich") + + generator("ninja") + depends_on("ninja@1.10:", type="build") + + @when("+rocm") + def patch(self): + for directory, subdirectory, files in os.walk(os.getcwd()): + for i in files: + file_path = os.path.join(directory, i) + filter_file("USE ISO_C_BINDING", "USE,INTRINSIC :: ISO_C_BINDING", file_path) + filter_file("USE ISO_FORTRAN_ENV", "USE,INTRINSIC :: ISO_FORTRAN_ENV", file_path) + filter_file("USE omp_lib", "USE,INTRINSIC :: omp_lib", file_path) + filter_file("USE OMP_LIB", "USE,INTRINSIC :: OMP_LIB", file_path) + filter_file("USE iso_c_binding", "USE,INTRINSIC :: iso_c_binding", file_path) + filter_file("USE iso_fortran_env", "USE,INTRINSIC :: iso_fortran_env", file_path) + + def cmake_args(self): + spec = self.spec + + if "+cuda" in spec and len(spec.variants["cuda_arch"].value) > 1: + raise InstallError("dbcsr supports only one cuda_arch at a time") + + if "+rocm" in spec and len(spec.variants["amdgpu_target"].value) > 1: + raise InstallError("DBCSR supports only one amdgpu_arch at a time") + + smm = spec.variants["smm"].value + has_libxs_smm = ( + spec.satisfies("@2.9.2-preview") + or spec.satisfies("@2.9.2:") + or spec.satisfies("@develop") + ) + + args = [ + self.define_from_variant("USE_MPI", "mpi"), + self.define_from_variant("USE_OPENMP", "openmp"), + # C API needs MPI + self.define_from_variant("WITH_C_API", "mpi"), + self.define_from_variant("BUILD_SHARED_LIBS", "shared"), + self.define_from_variant("WITH_EXAMPLES", "examples"), + self.define_from_variant("BUILD_TESTING", "tests"), + ] + + if has_libxs_smm: + args += [ + self.define("USE_LIBXS", smm in ("libxs", "libxsmm")), + self.define("USE_LIBXSMM", smm == "libxsmm"), + ] + else: + args.append("-DUSE_SMM=%s" % ("libxsmm" if smm == "libxsmm" else "blas")) + + lapack, blas = spec["lapack"], spec["blas"] + if blas.name != "intel-oneapi-mkl": + args += [ + "-DBLAS_FOUND=true", + "-DBLAS_LIBRARIES=%s" % (blas.libs.joined(";")), + "-DLAPACK_FOUND=true", + "-DLAPACK_LIBRARIES=%s" % (lapack.libs.joined(";")), + ] + + if self.spec.satisfies("+cuda"): + cuda_arch = self.spec.variants["cuda_arch"].value[0] + + gpu_map = { + "35": "K40", + "37": "K80", + "60": "P100", + "70": "V100", + "80": "A100", + "90": "H100", + } + + gpuver = gpu_map[cuda_arch] + if cuda_arch == "35" and self.spec.satisfies("+cuda_arch_35_k20x"): + gpuver = "K20X" + + args += ["-DWITH_GPU=%s" % gpuver, "-DUSE_ACCEL=cuda"] + + if self.spec.satisfies("+rocm"): + amd_arch = self.spec.variants["amdgpu_target"].value[0] + gpuver = { + "gfx906": "Mi50", + "gfx908": "Mi100", + "gfx90a": "Mi250", + "gfx90a:xnack-": "Mi250", + "gfx90a:xnack+": "Mi250", + "gfx942": "Mi300", + "gfx950": "Mi350", + }[amd_arch] + + args += [f"-DWITH_GPU={gpuver}", "-DUSE_ACCEL=hip"] + + if self.spec.satisfies("+opencl"): + args += ["-DUSE_ACCEL=opencl"] + + if self.spec.satisfies("+mpi_f08"): + args += ["-DUSE_MPI_F08=ON"] + + return args + + def check(self): + """Override CMakePackage's check() to enforce seralized test runs + since they are already parallelized""" + with working_dir(self.build_directory): + self._if_ninja_target_execute("test", parallel=False) diff --git a/tools/spack/spack_repo/cp2k_dev/packages/libxs/package.py b/tools/spack/spack_repo/cp2k_dev/packages/libxs/package.py index 24151da541..b1fba4bf80 100644 --- a/tools/spack/spack_repo/cp2k_dev/packages/libxs/package.py +++ b/tools/spack/spack_repo/cp2k_dev/packages/libxs/package.py @@ -25,6 +25,7 @@ class Libxs(CMakePackage): license("BSD-3-Clause", checked_by="mkrack") version("main", branch="main") + version("20260611", commit="81914e78a9dc440a7bf4514a6312240b68d114e9") version("20260605", commit="ab416130f8c9f7edb8c1bf3d3abaf402f61d0fe0") variant("fortran", default=False, description="Build Fortran module interface") @@ -43,6 +44,6 @@ class Libxs(CMakePackage): args = [ self.define_from_variant("LIBXS_FORTRAN", "fortran"), self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"), - self.define_from_variant("LIBXS_SHARED", "shared"), + self.define_from_variant("BUILD_SHARED_LIBS", "shared"), ] return args diff --git a/tools/spack/spack_repo/cp2k_dev/packages/libxsmm/package.py b/tools/spack/spack_repo/cp2k_dev/packages/libxsmm/package.py index 8524b7361e..a5bf08f72f 100644 --- a/tools/spack/spack_repo/cp2k_dev/packages/libxsmm/package.py +++ b/tools/spack/spack_repo/cp2k_dev/packages/libxsmm/package.py @@ -2,15 +2,12 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -import os -from glob import glob - -from spack_repo.builtin.build_systems.makefile import MakefilePackage +from spack_repo.builtin.build_systems.cmake import CMakePackage from spack.package import * -class Libxsmm(MakefilePackage): +class Libxsmm(CMakePackage): """Library for specialized dense and sparse matrix operations, and deep learning primitives.""" @@ -23,58 +20,12 @@ class Libxsmm(MakefilePackage): license("BSD-3-Clause") - # 2.0 release is planned for Jan / Feb 2024. This commit from main is added - # as a stable version that supports other targets than x86. Remove this - # after 2.0 release. - version("main-2023-11", commit="0d9be905527ba575c14ca5d3b4c9673916c868b2") - version("main", branch="main") + version("20260610-cp2k", commit="79033a7a1da039681cfa3b5ed2fe662a401fa4f3") version("20260526-cp2k", commit="0cea22fdc34ec54bc59ffb47a43cb3e28b26d3e0") version("1.17-cp2k", commit="e0c4a2389afba36c453233ad7de07bd92c715bec") - version( - "1.17", - sha256="8b642127880e92e8a75400125307724635ecdf4020ca4481e5efe7640451bb92", - preferred=True, - ) - version("1.16.3", sha256="e491ccadebc5cdcd1fc08b5b4509a0aba4e2c096f53d7880062a66b82a0baf84") - version("1.16.2", sha256="bdc7554b56b9e0a380fc9c7b4f4394b41be863344858bc633bc9c25835c4c64e") - version("1.16.1", sha256="93dc7a3ec40401988729ddb2c6ea2294911261f7e6cd979cf061b5c3691d729d") - version("1.16", sha256="4f4f2ad97815413af80821d2e306eb6f00541941ad412662da05c02361a20e07") - version("1.15", sha256="499e5adfbf90cd3673309243c2b56b237d54f86db2437e1ac06c8746b55ab91c") - version("1.14", sha256="9c0af4509ea341d1ee2c6c19fc6f19289318c3bd4b17844efeb9e7f9691abf76") - version("1.13", sha256="47c034e169820a9633770eece0e0fdd8d4a744e09b81da2af8c2608a4625811e") - version("1.12.1", sha256="3687fb98da00ba92cd50b5f0d18b39912c7886dad3856843573aee0cb34e9791") - version("1.12", sha256="37432fae4404ca12d8c5a205bfec7f9326c2d607d9ec37680f42dae60b52382a") - version("1.11", sha256="5fc1972471cd8e2b8b64ea017590193739fc88d9818e3d086621e5c08e86ea35") - version("1.10", sha256="2904f7983719fd5c5af081121c1d028d45b10b854aec9a9e67996a0602631abc") - version("1.9", sha256="cd8532021352b4a0290d209f7f9bfd7c2411e08286a893af3577a43457287bfa") - version("1.8.3", sha256="08ed4a67731d07c739fa83c426a06a5a8fe576bc273da4bab84eb0d1f4405011") - version("1.8.2", sha256="252ab73e437f5fcc87268df1ac130ffe6eb41e4281d9d3a3eaa7d591a85a612f") - version("1.8.1", sha256="2ade869c3f42f23b5263c7d594aa3c7e5e61ac6a3afcaf5d6e42899d2a7986ce") - version("1.8", sha256="0330201afb5525d0950ec861fec9dd75eb40a03845ebe03d2c635cf8bfc14fea") - version("1.7.1", sha256="9d3f63ce3eed62f04e4036de6f2be2ce0ff07781ca571af6e0bf85b077edf17a") - version("1.7", sha256="2eea65624a697e74b939511cd2a686b4c957e90c99be168fe134d96771e811ad") - version("1.6.6", sha256="7c048a48e17f7f14a475be7b83e6e941289e03debb42ce9e02a06353412f9f2a") - version("1.6.5", sha256="5231419a8e13e7a6d286cf25d32a3aa75c443a625e5ea57024d36468bc3d5936") - version("1.6.4", sha256="3788bf1cdb60f119f8a04ed7ed96861322e539ce2d2ea977f00431d6b2b80beb") - version("1.6.3", sha256="afad4f75ec5959bc3b18b741f3f16864f699c8b763598d01faf6af029dded48c") - version("1.6.2", sha256="c1ad21dee1239c9c2422b2dd2dc83e7a364909fc82ff9bd6ce7d9c73ee4569de") - version("1.6.1", sha256="1dd81077b186300122dc8a8f1872c21fd2bd9b88286ab9f068cc7b62fa7593a7") - version("1.6", sha256="c2a56f8cdc2ab03a6477ef98dbaa00917674fda59caa2824a1a29f78d2255ba5") - version("1.5.2", sha256="a037b7335932921960d687ef3d49b50ee38a83e0c8ad237bc20d3f4a0523f7d3") - version("1.5.1", sha256="9e2a400e63b6fb2d4954e53536090eb8eb6f0ca25d0f34dd3a4f166802aa3d54") - version("1.5", sha256="c52568c5e0e8dc9d8fcf869a716d73598e52f71c3d83af5a4c0b3be81403b423") - version("1.4.4", sha256="bf4a0fff05cf721e11cb6cdb74f3d27dd0fa67ccc024055f2d9dd5dbd928c7c0") - version("1.4.3", sha256="5033c33038ba4a75c675387aeb7c86b629e43ffc0a40df0b78e4ed52e4b5bd90") - version("1.4.2", sha256="9c89391635be96759486a245365793bc4593859e6d7957b37c39a29f9b4f95eb") - version("1.4.1", sha256="c19be118694c9b4e9a61ef4205b1e1a7e0c400c07f9bce65ae430d2dc2be5fe1") - version("1.4", sha256="cf483a370d802bd8800c06a12d14d2b4406a745c8a0b2c8722ccc992d0cd72dd") variant("shared", default=False, description="With shared libraries (and static libraries).") variant("debug", default=False, description="With call-trace (LIBXSMM_TRACE); unoptimized.") - variant( - "header-only", default=False, when="@1.6.2:", description="With header-only installation" - ) - variant("generator", default=False, description="With generator executable(s)") variant( "blas", default="default", @@ -82,23 +33,15 @@ class Libxsmm(MakefilePackage): description="Control behavior of BLAS calls", values=("default", "0", "1", "2"), ) - variant( - "large_jit_buffer", - default=False, - when="@1.17:", - description="Max. JIT buffer size increased to 256 KiB", - ) - variant( - "wrap", - default="0", - description="Set WRAP to determines the kind of routine called for intercepted GEMMs", - ) depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated depends_on("fortran", type="build") # generated depends_on("python", type="build") + depends_on("cmake@3.13:", type="build") + depends_on("blas", when="blas=1") + depends_on("blas", when="blas=2") # A recent `as` is needed to compile libxmss until version 1.17 # (), but not afterwards @@ -118,66 +61,11 @@ class Libxsmm(MakefilePackage): ) return result - def build(self, spec, prefix): - # include symbols by default - make_args = [ - "CC={0}".format(spack_cc), - "CXX={0}".format(spack_cxx), - "FC={0}".format(spack_fc), - "PREFIX=%s" % prefix, - ] - # if spec.target.family == "aarch64": - # make_args += ["PLATFORM=1"] - # else: - # make_args += ["SYM=1"] - - # JIT (AVX and later) makes MNK, M, N, or K spec. superfluous - # make_args += ['MNK=1 4 5 6 8 9 13 16 17 22 23 24 26 32'] - - # include call trace as the build is already de-optimized - if spec.satisfies("+debug"): - make_args += ["DBG=1"] - make_args += ["TRACE=1"] - + def cmake_args(self): + spec = self.spec blas_val = spec.variants["blas"].value - if blas_val != "default": - make_args += ["BLAS={0}".format(blas_val)] - if spec.satisfies("+large_jit_buffer"): - make_args += ["CODE_BUF_MAXSIZE=262144"] - - if spec.satisfies("+shared"): - make(*(make_args + ["STATIC=0"])) - - wrap_val = spec.variants["wrap"].value - make_args += ["WRAP={0}".format(wrap_val)] - - # builds static libraries by default - make(*make_args) - - def install(self, spec, prefix): - install_tree("include", prefix.include) - - # move pkg-config files to their right place - mkdirp("lib/pkgconfig") - for pcfile in glob("lib/*.pc"): - os.rename(pcfile, os.path.join("lib/pkgconfig", os.path.basename(pcfile))) - - # always install libraries - install_tree("lib", prefix.lib) - - if spec.satisfies("+header-only"): - install_tree("src", prefix.src) - - if spec.satisfies("+generator"): - install_tree("bin", prefix.bin) - - mkdirp(prefix.doc) - install(join_path("documentation", "*.md"), prefix.doc) - install(join_path("documentation", "*.pdf"), prefix.doc) - if spec.satisfies("@1.8.2:"): - install("LICENSE.md", prefix.doc) - else: - install("README.md", prefix.doc) - install("LICENSE", prefix.doc) - install("version.txt", prefix.doc) + return [ + self.define("XSMM_STATIC", not spec.satisfies("+shared")), + self.define("XSMM_BLAS", blas_val in ("1", "2")), + ] diff --git a/tools/toolchain/install_cp2k_toolchain.sh b/tools/toolchain/install_cp2k_toolchain.sh index 823dcc090c..b7411f886c 100755 --- a/tools/toolchain/install_cp2k_toolchain.sh +++ b/tools/toolchain/install_cp2k_toolchain.sh @@ -1137,6 +1137,7 @@ if [ "${ENABLE_OPENCL}" = "__TRUE__" ]; then fi else if [ "${with_libxstream}" != "__DONTUSE__" ]; then + report_warning ${LINENO} "LIBXSTREAM is only used by the OpenCL backend; disabling it because OpenCL is not enabled." with_libxstream="__DONTUSE__" fi fi diff --git a/tools/toolchain/scripts/stage4/install_libxs.sh b/tools/toolchain/scripts/stage4/install_libxs.sh index a0e8e6236f..19bcf4f5b6 100755 --- a/tools/toolchain/scripts/stage4/install_libxs.sh +++ b/tools/toolchain/scripts/stage4/install_libxs.sh @@ -6,8 +6,8 @@ [ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=$0 SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_NAME")/.." && pwd -P)" -libxs_ver="ab416130f8c9f7edb8c1bf3d3abaf402f61d0fe0" -libxs_sha256="e264e2cb1cc4fdf2d426ebb95b98e745022b8193bc8e4abfa761c4af9d6f1c54" +libxs_ver="81914e7" +libxs_sha256="afa98ef4f3fab9c5500fb3a5a3179aabf1ff29013da8b201f164afd2215ff996" source "${SCRIPT_DIR}"/common_vars.sh source "${SCRIPT_DIR}"/tool_kit.sh source "${SCRIPT_DIR}"/signal_trap.sh @@ -31,8 +31,8 @@ case "$with_libxs" in echo "libxs-${libxs_ver}.tar.gz is found" else if ! download_pkg_from_cp2k_org "${libxs_sha256}" "libxs-${libxs_ver}.tar.gz" 2> /dev/null; then - download_pkg_from_urlpath "${libxs_sha256}" "${libxs_ver}.tar.gz" \ - https://github.com/hfp/libxs/archive \ + download_pkg_from_urlpath "${libxs_sha256}" "${libxs_ver}" \ + https://codeload.github.com/hfp/libxs/tar.gz \ "libxs-${libxs_ver}.tar.gz" fi fi @@ -41,20 +41,13 @@ case "$with_libxs" in echo "Installing from scratch into ${pkg_install_dir}" cd libxs-${libxs_ver} - make -j $(get_nprocs) \ - CXX=$CXX \ - CC=$CC \ - FC=$FC \ - FORTRAN=1 \ - PREFIX=${pkg_install_dir} \ - > make.log 2>&1 || tail_excerpt make.log - make -j $(get_nprocs) \ - CXX=$CXX \ - CC=$CC \ - FC=$FC \ - FORTRAN=1 \ - PREFIX=${pkg_install_dir} \ - install > install.log 2>&1 || tail_excerpt install.log + mkdir build && cd build + cmake \ + -DCMAKE_INSTALL_PREFIX="${pkg_install_dir}" \ + -DCMAKE_INSTALL_LIBDIR="lib" \ + -DLIBXS_FORTRAN=ON \ + .. > configure.log 2>&1 || tail_excerpt configure.log + make install -j $(get_nprocs) > make.log 2>&1 || tail_excerpt make.log cd .. write_checksums "${install_lock_file}" "${SCRIPT_DIR}/stage4/$(basename ${SCRIPT_NAME})" @@ -89,24 +82,17 @@ if [ "$with_libxs" != "__DONTUSE__" ]; then LIBXS_LIBS="-lxs -ldl -lpthread" cat << EOF > "${BUILDDIR}/setup_libxs" export LIBXS_VER="${libxs_ver}" +export LIBXS_ROOT="${pkg_install_dir}" EOF if [ "$with_libxs" != "__SYSTEM__" ]; then cat << EOF >> "${BUILDDIR}/setup_libxs" prepend_path LD_LIBRARY_PATH "${pkg_install_dir}/lib" prepend_path LD_RUN_PATH "${pkg_install_dir}/lib" prepend_path LIBRARY_PATH "${pkg_install_dir}/lib" -prepend_path PKG_CONFIG_PATH "$pkg_install_dir/lib/pkgconfig" +prepend_path PKG_CONFIG_PATH "${pkg_install_dir}/lib/pkgconfig" +prepend_path CMAKE_PREFIX_PATH "${pkg_install_dir}" EOF fi - cat << EOF >> "${BUILDDIR}/setup_libxs" -export LIBXS_CFLAGS="${LIBXS_CFLAGS}" -export LIBXS_LDFLAGS="${LIBXS_LDFLAGS}" -export LIBXS_LIBS="${LIBXS_LIBS}" -export CP_DFLAGS="-D__LIBXS \${CP_DFLAGS}" -export CP_CFLAGS="\${CP_CFLAGS} ${LIBXS_CFLAGS}" -export CP_LDFLAGS="\${CP_LDFLAGS} ${LIBXS_LDFLAGS}" -export CP_LIBS="\${LIBXS_LIBS} \${CP_LIBS}" -EOF filter_setup "${BUILDDIR}/setup_libxs" "${SETUPFILE}" fi cd "${ROOTDIR}" diff --git a/tools/toolchain/scripts/stage4/install_libxsmm.sh b/tools/toolchain/scripts/stage4/install_libxsmm.sh index d4d43e1da6..8044fc6fc1 100755 --- a/tools/toolchain/scripts/stage4/install_libxsmm.sh +++ b/tools/toolchain/scripts/stage4/install_libxsmm.sh @@ -6,8 +6,8 @@ [ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=$0 SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_NAME")/.." && pwd -P)" -libxsmm_ver="0cea22fdc34ec54bc59ffb47a43cb3e28b26d3e0" -libxsmm_sha256="9404da8173009677d7814b51442250eee95d41773cae55b802f75fb40aece73d" +libxsmm_ver="79033a7" +libxsmm_sha256="b268dafa1c27ee9a3b194ebc0726a9488d13a59f0d789df348b902bfb073c519" source "${SCRIPT_DIR}"/common_vars.sh source "${SCRIPT_DIR}"/tool_kit.sh source "${SCRIPT_DIR}"/signal_trap.sh @@ -38,41 +38,23 @@ EOF echo "libxsmm-${libxsmm_ver}.tar.gz is found" else if ! download_pkg_from_cp2k_org "${libxsmm_sha256}" "libxsmm-${libxsmm_ver}.tar.gz" 2> /dev/null; then - download_pkg_from_urlpath "${libxsmm_sha256}" "${libxsmm_ver}.tar.gz" \ - https://github.com/libxsmm/libxsmm/archive \ + download_pkg_from_urlpath "${libxsmm_sha256}" "${libxsmm_ver}" \ + https://codeload.github.com/libxsmm/libxsmm/tar.gz \ "libxsmm-${libxsmm_ver}.tar.gz" fi fi echo "Installing from scratch into ${pkg_install_dir}" [ -d libxsmm-${libxsmm_ver} ] && rm -rf libxsmm-${libxsmm_ver} tar -xzf libxsmm-${libxsmm_ver}.tar.gz - # note that we do not have to set -L flags to ld for the - # linked math libraries for the libxsmm build, as for a - # library this is not required, you just have to provide - # the appropriate -L flags (LDFLAGS) during the linking - # stage of building an executable that uses the libxsmm - # library cd libxsmm-${libxsmm_ver} - # Avoid an unintended (incompatible) setting of FORTRAN - unset FORTRAN - make -j $(get_nprocs) \ - CXX=$CXX \ - CC=$CC \ - FC=$FC \ - WRAP=0 \ - PREFIX=${pkg_install_dir} \ - > make.log 2>&1 || tail_excerpt make.log - make -j $(get_nprocs) \ - CXX=$CXX \ - CC=$CC \ - FC=$FC \ - WRAP=0 \ - PREFIX=${pkg_install_dir} \ - install > install.log 2>&1 || tail_excerpt install.log + mkdir build && cd build + cmake \ + -DCMAKE_INSTALL_PREFIX="${pkg_install_dir}" \ + -DCMAKE_INSTALL_LIBDIR="lib" \ + .. > configure.log 2>&1 || tail_excerpt configure.log + make install -j $(get_nprocs) > make.log 2>&1 || tail_excerpt make.log cd .. write_checksums "${install_lock_file}" "${SCRIPT_DIR}/stage4/$(basename ${SCRIPT_NAME})" - mkdir ${pkg_install_dir}/lib/pkgconfig - cp ${pkg_install_dir}/lib/*.pc ${pkg_install_dir}/lib/pkgconfig # ---- macOS: pkg-config files must not use GNU ld's "-l:libfoo.a" syntax ---- if [[ "$(uname -s)" == "Darwin" ]]; then @@ -87,8 +69,6 @@ EOF __SYSTEM__) echo "==================== Finding Libxsmm from system paths ====================" check_lib -lxsmm "libxsmm" - check_lib -lxsmmf "libxsmm" - check_lib -lxsmmext "libxsmm" add_include_from_paths LIBXSMM_CFLAGS "libxsmm.h" $INCLUDE_PATHS add_lib_from_paths LIBXSMM_LDFLAGS "libxsmm.*" $LIB_PATHS ;; @@ -97,7 +77,6 @@ EOF *) echo "==================== Linking Libxsmm to user paths ====================" pkg_install_dir="$with_libxsmm" - check_dir "${pkg_install_dir}/bin" check_dir "${pkg_install_dir}/include" check_dir "${pkg_install_dir}/lib" LIBXSMM_CFLAGS="-I'${pkg_install_dir}/include'" @@ -105,29 +84,20 @@ EOF ;; esac if [ "$with_libxsmm" != "__DONTUSE__" ]; then - LIBXSMM_LIBS="-lxsmmf -lxsmmext -lxsmm -ldl -lpthread" + LIBXSMM_LIBS="-lxsmm -ldl -lpthread" cat << EOF > "${BUILDDIR}/setup_libxsmm" export LIBXSMM_VER="${libxsmm_ver}" -export LIBXSMMROOT="${pkg_install_dir:-}" +export LIBXSMM_ROOT="${pkg_install_dir:-}" EOF if [ "$with_libxsmm" != "__SYSTEM__" ]; then cat << EOF >> "${BUILDDIR}/setup_libxsmm" -prepend_path PATH "${pkg_install_dir}/bin" prepend_path LD_LIBRARY_PATH "${pkg_install_dir}/lib" prepend_path LD_RUN_PATH "${pkg_install_dir}/lib" prepend_path LIBRARY_PATH "${pkg_install_dir}/lib" -prepend_path PKG_CONFIG_PATH "$pkg_install_dir/lib/pkgconfig" +prepend_path PKG_CONFIG_PATH "${pkg_install_dir}/lib/pkgconfig" +prepend_path CMAKE_PREFIX_PATH "${pkg_install_dir}" EOF fi - cat << EOF >> "${BUILDDIR}/setup_libxsmm" -export LIBXSMM_CFLAGS="${LIBXSMM_CFLAGS}" -export LIBXSMM_LDFLAGS="${LIBXSMM_LDFLAGS}" -export LIBXSMM_LIBS="${LIBXSMM_LIBS}" -export CP_DFLAGS="-D__LIBXSMM \${CP_DFLAGS}" -export CP_CFLAGS="\${CP_CFLAGS} ${LIBXSMM_CFLAGS}" -export CP_LDFLAGS="\${CP_LDFLAGS} ${LIBXSMM_LDFLAGS}" -export CP_LIBS="\${LIBXSMM_LIBS} \${CP_LIBS}" -EOF filter_setup "${BUILDDIR}/setup_libxsmm" "${SETUPFILE}" fi cd "${ROOTDIR}" diff --git a/tools/toolchain/scripts/stage4/install_libxstream.sh b/tools/toolchain/scripts/stage4/install_libxstream.sh index f85b2b1326..5d0cede036 100755 --- a/tools/toolchain/scripts/stage4/install_libxstream.sh +++ b/tools/toolchain/scripts/stage4/install_libxstream.sh @@ -6,8 +6,8 @@ [ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=$0 SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_NAME")/.." && pwd -P)" -libxstream_ver="8015f5461e5d1fee08024ddf20b38ea4400fbc24" -libxstream_sha256="f2c41d2c0cbe1fd6d8001d78834caf1e978acdec61e4d873373684be6e98d981" +libxstream_ver="a1e21a1" +libxstream_sha256="22ee6e00533957ebd8ecdac9e89e0585afe1bb097567b379080bffff64faad54" source "${SCRIPT_DIR}"/common_vars.sh source "${SCRIPT_DIR}"/tool_kit.sh source "${SCRIPT_DIR}"/signal_trap.sh @@ -38,8 +38,8 @@ case "$with_libxstream" in echo "libxstream-${libxstream_ver}.tar.gz is found" else if ! download_pkg_from_cp2k_org "${libxstream_sha256}" "libxstream-${libxstream_ver}.tar.gz" 2> /dev/null; then - download_pkg_from_urlpath "${libxstream_sha256}" "${libxstream_ver}.tar.gz" \ - https://github.com/hfp/libxstream/archive \ + download_pkg_from_urlpath "${libxstream_sha256}" "${libxstream_ver}" \ + https://codeload.github.com/hfp/libxstream/tar.gz \ "libxstream-${libxstream_ver}.tar.gz" fi fi @@ -48,23 +48,27 @@ case "$with_libxstream" in echo "Installing from scratch into ${pkg_install_dir}" cd libxstream-${libxstream_ver} - # Determine LIBXS install location - local libxs_prefix="${INSTALLDIR}/libxs-${LIBXS_VER:-${libxs_ver:-unknown}}" - if [ -z "${LIBXSROOT}" ] && [ -d "${libxs_prefix}" ]; then + # Determine LIBXS install location. + libxs_prefix="${LIBXSROOT:-}" + if [ -z "${libxs_prefix}" ] && command -v pkg-config > /dev/null 2>&1 && pkg-config --exists libxs; then + libxs_prefix="$(pkg-config --variable=prefix libxs)" + fi + if [ -z "${libxs_prefix}" ] && [ -d "${INSTALLDIR}/libxs-${LIBXS_VER:-${libxs_ver:-unknown}}" ]; then + libxs_prefix="${INSTALLDIR}/libxs-${LIBXS_VER:-${libxs_ver:-unknown}}" + fi + if [ -z "${LIBXSROOT}" ] && [ -n "${libxs_prefix}" ]; then LIBXSROOT="${libxs_prefix}" fi - make -j $(get_nprocs) \ - CXX=$CXX \ - CC=$CC \ - LIBXSROOT="${LIBXSROOT}" \ - PREFIX=${pkg_install_dir} \ - > make.log 2>&1 || tail_excerpt make.log - make -j $(get_nprocs) \ - CXX=$CXX \ - CC=$CC \ - LIBXSROOT="${LIBXSROOT}" \ - PREFIX=${pkg_install_dir} \ - install > install.log 2>&1 || tail_excerpt install.log + if [ -z "${LIBXSROOT}" ]; then + report_error $LINENO "LIBXSTREAM requires LIBXSROOT. Install LIBXS first or set LIBXSROOT." + exit 1 + fi + mkdir build && cd build + cmake \ + -DCMAKE_INSTALL_PREFIX="${pkg_install_dir}" \ + -DCMAKE_INSTALL_LIBDIR="lib" \ + .. > configure.log 2>&1 || tail_excerpt configure.log + make install -j $(get_nprocs) > make.log 2>&1 || tail_excerpt make.log cd .. write_checksums "${install_lock_file}" "${SCRIPT_DIR}/stage4/$(basename ${SCRIPT_NAME})" @@ -99,23 +103,17 @@ if [ "$with_libxstream" != "__DONTUSE__" ]; then LIBXSTREAM_LIBS="-lxstream" cat << EOF > "${BUILDDIR}/setup_libxstream" export LIBXSTREAM_VER="${libxstream_ver}" +export LIBXSTREAM_ROOT="${pkg_install_dir}" EOF if [ "$with_libxstream" != "__SYSTEM__" ]; then cat << EOF >> "${BUILDDIR}/setup_libxstream" prepend_path LD_LIBRARY_PATH "${pkg_install_dir}/lib" prepend_path LD_RUN_PATH "${pkg_install_dir}/lib" prepend_path LIBRARY_PATH "${pkg_install_dir}/lib" -prepend_path PKG_CONFIG_PATH "$pkg_install_dir/lib/pkgconfig" +prepend_path PKG_CONFIG_PATH "${pkg_install_dir}/lib/pkgconfig" +prepend_path CMAKE_PREFIX_PATH "${pkg_install_dir}" EOF fi - cat << EOF >> "${BUILDDIR}/setup_libxstream" -export LIBXSTREAM_CFLAGS="${LIBXSTREAM_CFLAGS}" -export LIBXSTREAM_LDFLAGS="${LIBXSTREAM_LDFLAGS}" -export LIBXSTREAM_LIBS="${LIBXSTREAM_LIBS}" -export CP_CFLAGS="\${CP_CFLAGS} ${LIBXSTREAM_CFLAGS}" -export CP_LDFLAGS="\${CP_LDFLAGS} ${LIBXSTREAM_LDFLAGS}" -export CP_LIBS="\${LIBXSTREAM_LIBS} \${CP_LIBS}" -EOF filter_setup "${BUILDDIR}/setup_libxstream" "${SETUPFILE}" fi cd "${ROOTDIR}" diff --git a/tools/toolchain/scripts/stage9/install_dbcsr.sh b/tools/toolchain/scripts/stage9/install_dbcsr.sh index 80a48df1c1..89a30b9a38 100755 --- a/tools/toolchain/scripts/stage9/install_dbcsr.sh +++ b/tools/toolchain/scripts/stage9/install_dbcsr.sh @@ -6,8 +6,8 @@ [ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=$0 SCRIPT_DIR="$(cd "$(dirname "${SCRIPT_NAME}")/.." && pwd -P)" -dbcsr_ver="0df59460c6cb1e8069080f1ce9caf0d382b8d0ef" -dbcsr_sha256="e87fc029197f7d139429e4961f79cba52797dbd8b35fee6c1f1ed9bc81484a9e" +dbcsr_ver="4d85b72" +dbcsr_sha256="33461c7313e432b8902c9484ec327550d01b32b1b487020d3372d0ddd19265dc" source "${SCRIPT_DIR}"/common_vars.sh source "${SCRIPT_DIR}"/tool_kit.sh source "${SCRIPT_DIR}"/signal_trap.sh @@ -31,8 +31,8 @@ case "${with_dbcsr}" in echo "dbcsr-${dbcsr_ver}.tar.gz is found" else if ! download_pkg_from_cp2k_org "${dbcsr_sha256}" "dbcsr-${dbcsr_ver}.tar.gz" 2> /dev/null; then - download_pkg_from_urlpath "${dbcsr_sha256}" "${dbcsr_ver}.tar.gz" \ - https://github.com/cp2k/dbcsr/archive \ + download_pkg_from_urlpath "${dbcsr_sha256}" "${dbcsr_ver}" \ + https://codeload.github.com/cp2k/dbcsr/tar.gz \ "dbcsr-${dbcsr_ver}.tar.gz" fi fi @@ -64,11 +64,14 @@ case "${with_dbcsr}" in fi mkdir build-cpu cd build-cpu - CMAKE_OPTIONS="-DBUILD_TESTING=NO -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_VERBOSE_MAKEFILE=ON" - CMAKE_OPTIONS="${CMAKE_OPTIONS} -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DUSE_OPENMP=ON -DWITH_EXAMPLES=NO" - CMAKE_OPTIONS="${CMAKE_OPTIONS} -DFYPP_EXECUTABLE=${FYPP_EXE}" - if [ "${with_libxsmm}" == "__DONTUSE__" ]; then - CMAKE_OPTIONS="${CMAKE_OPTIONS} -DUSE_LIBXSMM=OFF" + CMAKE_OPTIONS="-DBUILD_TESTING=NO -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=RelWithDebInfo" + CMAKE_OPTIONS="${CMAKE_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DUSE_OPENMP=ON" + CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_EXAMPLES=NO -DFYPP_EXECUTABLE=${FYPP_EXE}" + if [ "${with_libxsmm}" != "__DONTUSE__" ]; then + CMAKE_OPTIONS="${CMAKE_OPTIONS} -DUSE_LIBXSMM=ON" + fi + if [ "${with_libxs}" != "__DONTUSE__" ]; then + CMAKE_OPTIONS="${CMAKE_OPTIONS} -DUSE_LIBXS=ON" fi if [ "${MPI_MODE}" == "no" ]; then CMAKE_OPTIONS="${CMAKE_OPTIONS} -DUSE_MPI=OFF"