diff --git a/CMakeLists.txt b/CMakeLists.txt index ee39d54a69..4da6a195e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -837,7 +837,7 @@ if(CP2K_USE_LIBGINT) endif() if(CP2K_USE_LIBFCI) - find_package(libfci REQUIRED) + find_package(LibFCI REQUIRED) endif() # Spglib @@ -1208,9 +1208,7 @@ if(CP2K_USE_LIBGINT) endif() if(CP2K_USE_LIBFCI) - message(" - LibFCI\n" - " - Include directories: ${CP2K_LIBFCI_INCLUDE_DIRS}\n" - " - Libraries: ${CP2K_LIBFCI_LINK_LIBRARIES}\n") + message(" - LibFCI\n" " - Libraries: ${CP2K_LIBFCI_LINK_LIBRARIES}\n") endif() if(CP2K_USE_VORI) diff --git a/cmake/modules/FindLibFCI.cmake b/cmake/modules/FindLibFCI.cmake new file mode 100644 index 0000000000..59ec5fa815 --- /dev/null +++ b/cmake/modules/FindLibFCI.cmake @@ -0,0 +1,37 @@ +#!-------------------------------------------------------------------------------------------------! +#! 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) + +cp2k_set_default_paths(LIBFCI "LibFCI") +cp2k_find_libraries(LIBFCI "fci") + +if(CP2K_LIBFCI_INCLUDE_DIRS) + find_package_handle_standard_args( + LibFCI DEFAULT_MSG CP2K_LIBFCI_LINK_LIBRARIES CP2K_LIBFCI_INCLUDE_DIRS) +else() + find_package_handle_standard_args(LibFCI DEFAULT_MSG + CP2K_LIBFCI_LINK_LIBRARIES) +endif() + +if(LibFCI_FOUND) + if(NOT TARGET libfci::fci) + add_library(libfci::fci INTERFACE IMPORTED) + set_target_properties( + libfci::fci PROPERTIES INTERFACE_LINK_LIBRARIES + "${CP2K_LIBFCI_LINK_LIBRARIES}") + if(CP2K_LIBFCI_INCLUDE_DIRS) + set_target_properties( + libfci::fci PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${CP2K_LIBFCI_INCLUDE_DIRS}") + endif() + endif() +endif() + +mark_as_advanced(CP2K_LIBFCI_ROOT CP2K_LIBFCI_INCLUDE_DIRS + CP2K_LIBFCI_LINK_LIBRARIES CP2K_LIBFCI_LIBRARIES) diff --git a/make_cp2k.sh b/make_cp2k.sh index dba8b21ab7..a0c03a9807 100755 --- a/make_cp2k.sh +++ b/make_cp2k.sh @@ -243,10 +243,10 @@ while [[ $# -gt 0 ]]; do case "${CP2K_VERSION}" in ssmp-static) CMAKE_FEATURE_FLAG_ALL="-DCP2K_USE_EVERYTHING=ON" - for package in libint2 libxc libxs spglib vori tblite; do + for package in libfci libint2 libxc libxs spglib vori tblite; do CMAKE_FEATURE_FLAGS+=" -DCP2K_USE_${package^^}=ON" done - for package in ace deepmd gauxc greenx hdf5 libfci libgint libtorch pexsi trexio; do + for package in ace deepmd gauxc greenx hdf5 libgint libtorch pexsi trexio; do CMAKE_FEATURE_FLAGS+=" -DCP2K_USE_${package^^}=OFF" done ;; diff --git a/tools/spack/cp2k_deps_s-static.yaml b/tools/spack/cp2k_deps_s-static.yaml index e61e8b1c9c..312cb1a886 100644 --- a/tools/spack/cp2k_deps_s-static.yaml +++ b/tools/spack/cp2k_deps_s-static.yaml @@ -76,6 +76,10 @@ spack: - "+fortran" - "~shared" + libfci: + require: + - "~shared" + libint: require: - "+fortran" diff --git a/tools/spack/spack_repo/cp2k_dev/packages/libfci/package.py b/tools/spack/spack_repo/cp2k_dev/packages/libfci/package.py index 269de0b0cc..7c02da8929 100644 --- a/tools/spack/spack_repo/cp2k_dev/packages/libfci/package.py +++ b/tools/spack/spack_repo/cp2k_dev/packages/libfci/package.py @@ -19,7 +19,7 @@ class Libfci(CMakePackage): maintainers("mkrack") homepage = "https://github.com/DCM-Uni-Paderborn/libfci" - url = "https://www.cp2k.org/static/downloads/libfci-0.1.0.tar.gz" + url = "https://www.cp2k.org/static/downloads/libfci-0.0.0.tar.gz" git = "https://github.com/DCM-Uni-Paderborn/libfci.git" license("LicenseRef-Knizia-Permissive", checked_by="mkrack") @@ -28,8 +28,7 @@ class Libfci(CMakePackage): version("0.1.0", sha256="63e8bd632e55f4b99dbaa3e905cdcd3c5dbc17aefdca1391b855f34a792bb29a") variant("openmp", default=True, description="Build with OpenMP parallelisation support") - variant("pic", default=True, description="Build position independent code") - variant("shared", default=False, description="Build shared libraries (otherwise static)") + variant("shared", default=True, description="Build shared libraries (otherwise static)") depends_on("cmake@3.16:", type="build") depends_on("cxx", type="build") @@ -38,32 +37,8 @@ class Libfci(CMakePackage): depends_on("lapack") def cmake_args(self): - spec = self.spec - args = [ self.define_from_variant("LIBFCI_USE_OPENMP", "openmp"), - self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"), self.define_from_variant("BUILD_SHARED_LIBS", "shared"), - self.define("BLA_STATIC", True), ] - - # Force BLAS manually for static linking - if not spec.satisfies("+shared"): - blas = spec["blas"] - - # Get actual static libraries - blas_libs = [] - for lib in blas.libs.libraries: - if lib.endswith(".a"): - blas_libs.append(lib) - - # Fallback if .a not explicitly listed - if not blas_libs: - blas_libs = blas.libs.libraries - - full = blas_libs + ["-lpthread", "-lm", "-ldl"] - - args.append(self.define("BLAS_LIBRARIES", ";".join(full))) - args.append(self.define("LAPACK_LIBRARIES", ";".join(full))) - return args