[cmake] Cleanup accross the entire build system (#5527)

Co-authored-by: Mathieu Taillefumier <mathieu.taillefumier@free.fr>
This commit is contained in:
Taillefumier Mathieu 2026-07-04 18:36:14 +00:00 committed by GitHub
parent c75d734d70
commit f50e850e17
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 186 additions and 119 deletions

View file

@ -99,9 +99,9 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
foreach(__var ROCM_ROOT CRAY_ROCM_ROOT ORNL_ROCM_ROOT CRAY_ROCM_PREFIX
ROCM_PREFIX CRAY_ROCM_DIR)
if($ENV{${__var}})
list(APPEND CMAKE_PREFIX_PATH $ENV{__var})
list(APPEND CMAKE_PREFIX_PATH $ENV{${__var}})
set(ROCM_PATH
$ENV{__var}
$ENV{${__var}}
CACHE PATH "Path to ROCm installation")
endif()
endforeach()
@ -397,14 +397,10 @@ if(NOT Python_EXECUTABLE)
REQUIRED)
endif()
# get the git hash Get the latest abbreviated commit hash of the working branch
# As a fall back, e.g. in a container, try reading a file named "REVISION".
execute_process(
COMMAND bash -c "git log -1 --format=%h || cat REVISION"
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
ERROR_QUIET
OUTPUT_VARIABLE CP2K_GIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE)
# The git hash (__COMPILE_REVISION) is refreshed at *build* time rather than
# here at configure time, see the cp2k_build_info target in src/CMakeLists.txt
# and cmake/GenerateCp2kBuildInfo.cmake, so that "git commit; ninja" embeds the
# new hash without requiring a re-run of cmake.
execute_process(
COMMAND hostnamectl --transient
@ -412,15 +408,6 @@ execute_process(
OUTPUT_VARIABLE CP2K_HOST_NAME
OUTPUT_STRIP_TRAILING_WHITESPACE)
add_custom_target(
AlwaysCheckGit
COMMAND
${CMAKE_COMMAND} -DRUN_CHECK_GIT_VERSION=1
-Dpre_configure_dir=${pre_configure_dir}
-Dpost_configure_file=${post_configure_dir}
-DGIT_HASH_CACHE=${GIT_HASH_CACHE} -P ${CURRENT_LIST_DIR}/CheckGit.cmake
BYPRODUCTS ${post_configure_file})
# MPI
if(CP2K_USE_MPI)
get_property(REQUIRED_MPI_COMPONENTS GLOBAL PROPERTY ENABLED_LANGUAGES)
@ -589,7 +576,7 @@ if(CP2K_USE_ACCEL MATCHES "CUDA")
message(STATUS "GPU architecture number: ${CMAKE_CUDA_ARCHITECTURES}")
message(STATUS "GPU profiling enabled: ${CP2K_WITH_GPU_PROFILING}")
if(WITH_CUDA_PROFILING)
if(CP2K_WITH_GPU_PROFILING)
find_library(
CUDA_NVTOOLSEXT nvToolsExt
PATHS ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES}
@ -836,8 +823,7 @@ if(CP2K_USE_LIBINT2)
find_file(
CP2K_LIBINT2_MOD_FILE
NAMES libint_f.mod
PATHS ${_libint2_include_dirs} "/usr/lib64/gfortran/modules"
NO_DEFAULT_PATH)
PATHS ${_libint2_include_dirs} "/usr/lib64/gfortran/modules")
if(NOT CP2K_LIBINT2_MOD_FILE)
message(
FATAL_ERROR "Libint2 was found, but its Fortran interface is missing")
@ -871,18 +857,18 @@ if(CP2K_USE_SPLA)
INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(CP2K_SPLA_LINK_LIBRARIES SPLA::spla
INTERFACE_LINK_LIBRARIES)
if(NOT SPLA_GPU_BACKEND AND CP2K_USE_GEMM_OFFLOADING)
set(CP2K_USE_GEMM_OFFLOADING OFF)
if(NOT SPLA_GPU_BACKEND AND CP2K_USE_SPLA_GEMM_OFFLOADING)
message(
FATAL_ERROR
"SpLA should be compiled with GPU support if the gemm offloading is requested. Use -DCP2K_USE_GEMM_OFFLOADING=OFF otherwise"
"SpLA should be compiled with GPU support if the gemm offloading is requested. Use -DCP2K_USE_SPLA_GEMM_OFFLOADING=OFF otherwise"
)
endif()
endif()
if(CP2K_USE_DFTD4)
find_package(dftd4 REQUIRED)
# Detect dftd4_VERSION from dftd4-config-version.cmake
# Sets CP2K_USE_DFTD4_V3 / CP2K_USE_DFTD4_V4_2 from dftd4_VERSION, which is
# populated by dftd4-config-version.cmake either directly via
# find_package(dftd4) or transitively via find_package(tblite).
macro(cp2k_detect_dftd4_api)
if(dftd4_VERSION VERSION_LESS "4.0.0")
message(STATUS "DFTD4: found version ${dftd4_VERSION}, using v3.x API")
set(CP2K_USE_DFTD4_V3 ON)
@ -895,6 +881,11 @@ if(CP2K_USE_DFTD4)
else()
set(CP2K_USE_DFTD4_V4_2 OFF)
endif()
endmacro()
if(CP2K_USE_DFTD4)
find_package(dftd4 REQUIRED)
cp2k_detect_dftd4_api()
endif()
if(CP2K_USE_DEEPMD)
@ -923,19 +914,7 @@ if(CP2K_USE_TBLITE)
target_link_libraries(
cp2k::tblite INTERFACE tblite::tblite mctc-lib::mctc-lib dftd4::dftd4
toml-f::toml-f s-dftd3::s-dftd3)
# Detect dftd4_VERSION from dftd4-config-version.cmake
if(dftd4_VERSION VERSION_LESS "4.0.0")
message(STATUS "DFTD4: found version ${dftd4_VERSION}, using v3.x API")
set(CP2K_USE_DFTD4_V3 ON)
else()
set(CP2K_USE_DFTD4_V3 OFF)
endif()
if(dftd4_VERSION VERSION_GREATER_EQUAL "4.2.0")
message(STATUS "DFTD4: found version ${dftd4_VERSION}, using v4.2+ API")
set(CP2K_USE_DFTD4_V4_2 ON)
else()
set(CP2K_USE_DFTD4_V4_2 OFF)
endif()
cp2k_detect_dftd4_api()
endif()
# SIRIUS

View file

@ -9,10 +9,29 @@ if(NOT DEFINED OUTPUT_FILE)
message(FATAL_ERROR "OUTPUT_FILE is not defined")
endif()
if(NOT DEFINED SOURCE_DIR)
set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/..")
endif()
string(TIMESTAMP CP2K_BUILD_TIMESTAMP "%Y-%m-%d %H:%M:%S")
# Get the latest abbreviated commit hash of the working branch. As a fall back,
# e.g. in a container without a .git directory, try reading a file named
# "REVISION". Running this here (rather than once at configure time) means a new
# commit is picked up on the next build, without having to re-run cmake.
execute_process(
COMMAND bash -c "git log -1 --format=%h || cat REVISION"
WORKING_DIRECTORY "${SOURCE_DIR}"
ERROR_QUIET
OUTPUT_VARIABLE CP2K_GIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT CP2K_GIT_HASH)
set(CP2K_GIT_HASH "unknown")
endif()
set(CP2K_BUILD_INFO_CONTENT
"#define __COMPILE_DATE \"${CP2K_BUILD_TIMESTAMP}\"\n")
"#define __COMPILE_DATE \"${CP2K_BUILD_TIMESTAMP}\"\n#define __COMPILE_REVISION \"${CP2K_GIT_HASH}\"\n"
)
if(EXISTS "${OUTPUT_FILE}")
file(READ "${OUTPUT_FILE}" CP2K_OLD_BUILD_INFO_CONTENT)

View file

@ -53,7 +53,7 @@ find_package_handle_standard_args(
CP2K_ARMPL_ILP64_MP_LINK_LIBRARIES)
# add target to link against
if(NOT TARGET Armpl::armpl)
if(NOT TARGET cp2k::BLAS::Armpl::armpl)
add_library(cp2k::BLAS::Armpl::armpl INTERFACE IMPORTED)
# now define an alias to the target library
add_library(cp2k::BLAS::Armpl::blas ALIAS cp2k::BLAS::Armpl::armpl)

View file

@ -15,13 +15,13 @@ include(cp2k_utils)
cp2k_set_default_paths(ATLAS "Atlas")
cp2k_find_libraries(ATLAS "atlas")
cp2k_include_dirs(FFTW3 "cblas.h atlas/cblas.h")
cp2k_include_dirs(ATLAS "cblas.h atlas/cblas.h")
# check if found
find_package_handle_standard_args(Atlas REQUIRED_VARS CP2K_ATLAS_INCLUDE_DIRS
CP2K_ATLAS_LINK_LIBRARIES)
# add target to link against
if(CP2K_ATLAS_FOUND AND NOT TARGET CP2K_ATLAS::atlas)
if(CP2K_ATLAS_FOUND)
if(NOT TARGET cp2k::BLAS::ATLAS::atlas)
add_library(cp2k::BLAS::ATLAS::atlas INTERFACE IMPORTED)
endif()

View file

@ -16,7 +16,7 @@ include(cp2k_utils)
cp2k_set_default_paths(BLIS "BLIS")
if(DEFINED AOCL_ROOT)
list(CP2K_BLIS_ROOT "${AOCL_ROOT}" "$ENV{AOCL_ROOT}")
list(APPEND CP2K_BLIS_ROOT "${AOCL_ROOT}" "$ENV{AOCL_ROOT}")
endif()
# one day blis will have a pkg-config file
@ -46,7 +46,7 @@ endif()
if(CP2K_BLIS_FOUND)
if(NOT TARGET cp2k::BLAS::Blis::blis)
add_library(cp2k::BLAS::Blis::blis INTERFACE IMPORTED)
add_library(cp2k::BLAS::Blis::blas alias cp2k::BLAS::Blis::blis)
add_library(cp2k::BLAS::Blis::blas ALIAS cp2k::BLAS::Blis::blis)
endif()
set_property(TARGET cp2k::BLAS::Blis::blis

View file

@ -20,14 +20,16 @@ cp2k_include_dirs(CAL "cal.h")
find_package_handle_standard_args(Cal DEFAULT_MSG CP2K_CAL_LINK_LIBRARIES
CP2K_CAL_INCLUDE_DIRS)
if(CP2K_CAL_FOUND AND NOT TARGET cp2k::CAL::cal)
if(NOT CP2K_CAL_FOUND)
message(FATAL_ERROR "Cal required by CuSolverMP")
endif()
if(NOT TARGET cp2k::CAL::cal)
add_library(cp2k::CAL::cal INTERFACE IMPORTED)
set_target_properties(cp2k::CAL::cal PROPERTIES INTERFACE_LINK_LIBRARIES
"${CP2K_CAL_LINK_LIBRARIES}")
set_target_properties(cp2k::CAL::cal PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
"${CP2K_CAL_INCLUDE_DIRS}")
else()
message(FATAL_ERROR "Cal required by CuSolverMP")
endif()
mark_as_advanced(CP2K_CAL_LINK_LIBRARIES)

View file

@ -54,7 +54,11 @@ find_package_handle_standard_args(
CuSolverMP DEFAULT_MSG CP2K_CUSOLVER_MP_LINK_LIBRARIES
CP2K_CUSOLVER_MP_INCLUDE_DIRS)
if(CP2K_CUSOLVER_MP_FOUND AND NOT TARGET cp2k::CUSOLVER_MP::cusolver_mp)
if(NOT CP2K_CUSOLVER_MP_FOUND)
message(FATAL_ERROR "CuSolverMP requested, but not found")
endif()
if(NOT TARGET cp2k::CUSOLVER_MP::cusolver_mp)
add_library(cp2k::CUSOLVER_MP::cusolver_mp INTERFACE IMPORTED)
if(CP2K_CUSOLVERMP_USE_NCCL)
@ -70,8 +74,6 @@ if(CP2K_CUSOLVER_MP_FOUND AND NOT TARGET cp2k::CUSOLVER_MP::cusolver_mp)
set_target_properties(
cp2k::CUSOLVER_MP::cusolver_mp
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CP2K_CUSOLVER_MP_INCLUDE_DIRS}")
else()
message(FATAL_ERROR "CuSolverMP requested, but not found")
endif()
mark_as_advanced(CP2K_CUSOLVER_MP_LINK_LIBRARIES)

View file

@ -91,7 +91,7 @@ foreach(lib_name "fftw3" "fftw3l" "fftw3q" "fftw3f")
endif()
endforeach()
set(CP2K_FFTW3_FOUND ON)
set(CP2K_FFTW3_FOUND ${Fftw_FOUND})
mark_as_advanced(
CP2K_FFTW3_FOUND
CP2K_FFTW3_ROOT

View file

@ -35,10 +35,6 @@ find_package_handle_standard_args(
FlexiBLAS DEFAULT_MSG CP2K_FLEXIBLAS_INCLUDE_DIRS
CP2K_FLEXIBLAS_LINK_LIBRARIES)
if(NOT CP2K_FLEXIBLAS_FOUND)
set(CP2K_BLAS_VENDOR "FlexiBLAS")
endif()
if(CP2K_FLEXIBLAS_FOUND)
if(NOT TARGET cp2k::BLAS::FlexiBLAS::flexiblas)
add_library(cp2k::BLAS::FlexiBLAS::flexiblas INTERFACE IMPORTED)

View file

@ -42,8 +42,7 @@ if(NOT CP2K_CONFIG_PACKAGE)
CP2K_LAPACK_LINK_LIBRARIES
NAMES "lapack" "lapack64"
PATH_SUFFIXES "openblas" "openblas64" "openblas-pthread"
"openblas-openmp" "lib" "lib64"
NO_DEFAULT_PATH)
"openblas-openmp" "lib" "lib64")
endif()
endif()
endif()

View file

@ -23,6 +23,7 @@ else()
CP2K_LIBVORI_LINK_LIBRARIES)
endif()
if(CP2K_LIBVORI_FOUND)
if(NOT TARGET cp2k::VORI::vori)
add_library(cp2k::VORI::vori INTERFACE IMPORTED)
set_target_properties(
@ -34,6 +35,7 @@ if(NOT TARGET cp2k::VORI::vori)
"${CP2K_LIBVORI_INCLUDE_DIRS}")
endif()
endif()
endif()
mark_as_advanced(CP2K_LIBVORI_ROOT CP2K_LIBVORI_INCLUDE_DIRS
CP2K_LIBVORI_LINK_LIBRARIES CP2K_LIBVORI_LIBRARIES)

View file

@ -321,8 +321,6 @@ foreach(_libtype "ST" "DYN")
TOLOWER "${_mpi_impl}_${_iface}_${_bits}_${_threading}_${_libtype}"
_tgt_config)
set(_scalapack_tgt cp2k::BLAS::MKL::scalapack_${_tgt_config})
if(_mkl_blacs_lib
AND TARGET ${_mkl_tgt}
AND TARGET MPI::MPI_CXX
@ -348,7 +346,10 @@ foreach(_libtype "ST" "DYN")
if(_mkl_scalapack_lib AND NOT TARGET
cp2k::BLAS::MKL::scalapack_${_tgt_config})
set(_scalapack_libs "${_mkl_scalapack_lib}" "${_blacs_tgt}")
set(_scalapack_libs "${_mkl_scalapack_lib}")
if(TARGET cp2k::BLAS::MKL::blacs_${_tgt_config})
list(APPEND _scalapack_libs cp2k::BLAS::MKL::blacs_${_tgt_config})
endif()
add_library(cp2k::BLAS::MKL::scalapack_${_tgt_config} INTERFACE
IMPORTED)
set_target_properties(

View file

@ -25,8 +25,10 @@ endif()
if(NOT CP2K_MIMIC_FOUND)
find_library(CP2K_MIMIC_LIBRARIES mclf PATH_SUFFIXES MiMiC)
find_library(CP2K_MIMICc_LIBRARIES mcl PATH_SUFFIXES MiMiC)
if(CP2K_MIMIC_LIBRARIES AND CP2K_MIMICc_LIBRARIES)
set(CP2K_MIMIC_FOUND True)
endif()
endif()
if(CP2K_MIMIC_FOUND)
set(CP2K_MIMIC_LINK_LIBRARIES

View file

@ -12,7 +12,7 @@
include(FindPackageHandleStandardArgs)
include(cp2k_utils)
cp2k_set_default_paths(CP2K_NVHPC "NVHPC")
cp2k_set_default_paths(NVHPC "NVHPC")
find_library(
CP2K_NVHPC_BLAS_LP64
@ -55,15 +55,17 @@ find_path(
find_package_handle_standard_args(
NVHPCBlas
DEFAULT_MSG
CP2K_NVHPC_INCLUDE_DIRS_ipl64
CP2K_NVHPC_BLAS_INCLUDE_DIRS_ilp64
CP2K_NVHPC_BLAS_INCLUDE_DIRS_lp64
CP2K_NVHPC_BLAS_ILP64
CP2K_NVHPC_BLAS_LP64
CP2K_NVHPC_LAPACK_ILP64
CP2K_NVHPC_LAPACK_LP64)
set(CP2K_NVHPCBLAS_FOUND ${NVHPCBlas_FOUND})
if(CP2K_NVHPCBLAS_FOUND)
set(CP2K_BLAS_VENDOR "NVHPCBlas")
set(CP2K_NVHPCBLAS_FOUND "ON")
if(NOT TARGET cp2k::BLAS::NVHPCBlas::nvhpcblas)
add_library(cp2k::BLAS::NVHPCBlas::nvhpcblas INTERFACE IMPORTED)
@ -73,18 +75,19 @@ endif()
if(CP2K_BLAS_INTERFACE MATCHES "64bits")
set(CP2K_NVHPC_BLAS_LINK_LIBRARIES
"${CP2K_NVHPC_LAPACK_ILP64} ${CP2K_NVHPC_BLAS_ILP64}")
set(CP2K_NVHPC_BLAS_INCLUDE_DIRS "${CP2K_NVHPC_INCLUDE_DIRS_ipl64}")
"${CP2K_NVHPC_LAPACK_ILP64};${CP2K_NVHPC_BLAS_ILP64}")
set(CP2K_NVHPC_BLAS_INCLUDE_DIRS "${CP2K_NVHPC_BLAS_INCLUDE_DIRS_ilp64}")
else()
set(CP2K_NVHPC_BLAS_LINK_LIBRARIES "${CP2K_NVHPC_LAPACK_LP64}
${CP2K_NVHPC_BLAS_LP64}")
set(CP2K_NVHPC_BLAS_INCLUDE_DIRS "${CP2K_NVHPC_INCLUDE_DIRS_pl64}")
set(CP2K_NVHPC_BLAS_LINK_LIBRARIES
"${CP2K_NVHPC_LAPACK_LP64};${CP2K_NVHPC_BLAS_LP64}")
set(CP2K_NVHPC_BLAS_INCLUDE_DIRS "${CP2K_NVHPC_BLAS_INCLUDE_DIRS_lp64}")
endif()
set_target_properties(
cp2k::BLAS::NVHPCBlas::nvhpcblas
PROPERTIES INTERFACE_LINK_LIBRARIES "${CP2K_NVHPC_BLAS_LINK_LIBRARIES}"
INTERFACE_INCLUDE_DIRECTORIES "${CP2K_NVHPC_BLAS_INCLUDE_DIRS}")
endif()
mark_as_advanced(CP2K_NVHPCBLAS_FOUND CP2K_NVHPC_BLAS_INCLUDE_DIRS
CP2K_NVHPC_BLAS_LINK_LIBRARIES CP2K_BLAS_VENDOR)

View file

@ -25,7 +25,7 @@ endif()
if(NOT CP2K_OPENBLAS_FOUND)
set(CP2K_OPENBLAS64_ROOT ${CP2K_OPENBLAS_ROOT})
set(CP2K_OPENBLA_THREADS_ROOT ${CP2K_OPENBLAS_ROOT})
set(CP2K_OPENBLAS_THREADS_ROOT ${CP2K_OPENBLAS_ROOT})
cp2k_find_libraries(OPENBLAS "openblas")
cp2k_find_libraries(OPENBLAS64 "openblas64")
cp2k_find_libraries(OPENBLAS_THREADS "openblas_threads;openblas_omp")

View file

@ -24,6 +24,7 @@ else()
CP2K_LIBSMEAGOL_LINK_LIBRARIES)
endif()
if(CP2K_LIBSMEAGOL_FOUND)
if(NOT TARGET cp2k::libsmeagol::smeagol)
add_library(cp2k::libsmeagol::smeagol INTERFACE IMPORTED)
set_target_properties(
@ -35,6 +36,7 @@ if(NOT TARGET cp2k::libsmeagol::smeagol)
"${CP2K_LIBSMEAGOL_INCLUDE_DIRS}")
endif()
endif()
endif()
mark_as_advanced(CP2K_LIBSMEAGOL_ROOT CP2K_LIBSMEAGOL_INCLUDE_DIRS
CP2K_LIBSMEAGOL_LINK_LIBRARIES CP2K_LIBSMEAGOL_LIBRARIES)

View file

@ -24,23 +24,27 @@ find_package_handle_standard_args(
ucc DEFAULT_MSG CP2K_UCC_INCLUDE_DIRS CP2K_UCC_LINK_LIBRARIES
CP2K_UCX_LINK_LIBRARIES)
if(CP2K_UCX_FOUND AND NOT TARGET cp2k::UCC::ucx)
add_library(cp2k::UCC::ucx INTERFACE IMPORTED)
set_target_properties(cp2k::UCC::ucx PROPERTIES INTERFACE_LINK_LIBRARIES
"${CP2K_UCX_LINK_LIBRARIES}")
else()
if(NOT CP2K_UCX_FOUND)
message(FATAL_ERROR "ucx required by CuSolverMP")
endif()
if(CP2K_UCC_FOUND AND NOT TARGET cp2k::UCC::ucc)
if(NOT TARGET cp2k::UCC::ucx)
add_library(cp2k::UCC::ucx INTERFACE IMPORTED)
set_target_properties(cp2k::UCC::ucx PROPERTIES INTERFACE_LINK_LIBRARIES
"${CP2K_UCX_LINK_LIBRARIES}")
endif()
if(NOT CP2K_UCC_FOUND)
message(FATAL_ERROR "ucc required by CuSolverMP")
endif()
if(NOT TARGET cp2k::UCC::ucc)
add_library(cp2k::UCC::ucc INTERFACE IMPORTED)
set_target_properties(
cp2k::UCC::ucc PROPERTIES INTERFACE_LINK_LIBRARIES
"${CP2K_UCC_LINK_LIBRARIES};cp2k::UCC::ucx")
set_target_properties(cp2k::UCC::ucc PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
"${CP2K_UCC_INCLUDE_DIRS}")
else()
message(FATAL_ERROR "ucc required by CuSolverMP")
endif()
mark_as_advanced(CP2K_UCX_LINK_LIBRARIES)

View file

@ -79,7 +79,7 @@ function(cp2k_include_dirs _package_name _library_include_file)
NAMES ${_library_include_file}
PATHS "${CP2K_${_package_name}_ROOT}"
HINTS "${CP2K_${_package_name}_ROOT}"
PATH_SUFFIXES "include" "include/${_pacakge_name}" "${_package_name}")
PATH_SUFFIXES "include" "include/${_package_name}" "${_package_name}")
set(CP2K_${_package_name}_INCLUDE_DIRS
"${CP2K_${_package_name}_INCLUDE_DIRS_TMP}"
@ -126,6 +126,7 @@ function(cp2k_compare_src_with_list _list_files _extension _exclude_list)
set(found_list_size_ 0)
endfunction()
# cmake-lint: disable=R0912,R0915
macro(cp2k_FindPackage name)
#[===[.md
# cp2k_FindPackage
@ -217,7 +218,7 @@ macro(cp2k_FindPackage name)
list(APPEND ARGS_PKG_MODULE_SPECS
"${_pkg_name}>=${${name}_FIND_VERSION_MIN}")
endforeach()
elseif({${name}_FIND_VERSION_EXACT)
elseif(${name}_FIND_VERSION_EXACT)
# Requesting exact version
foreach(_pkg_name IN LISTS ARGS_PKG_MODULE_NAMES)
list(APPEND ARGS_PKG_MODULE_SPECS

View file

@ -1554,6 +1554,7 @@ if(CP2K_USE_CUDA
set(CP2K_DBM_OPENCL_KERNEL dbm/dbm_multiply_opencl.cl)
set(CP2K_DBM_OPENCL_GENHDR
"${CMAKE_CURRENT_BINARY_DIR}/${CP2K_DBM_OPENCL_KERNEL}.h")
# cmake-lint: disable=E1126
add_custom_command(
COMMAND
${CP2K_OPENCL_SCRIPT} -b 6 -p \"\" -I "${CP2K_OPENCL_BACKEND}"
@ -1806,13 +1807,18 @@ target_link_libraries(
$<$<AND:$<CONFIG:COVERAGE>,$<Fortran_COMPILER_ID:GNU>>:gcov>)
set(CP2K_BUILD_INFO_FILE "${CMAKE_CURRENT_BINARY_DIR}/cp2k_build_info.h")
file(WRITE "${CP2K_BUILD_INFO_FILE}" "#define __COMPILE_DATE \"unknown\"\n")
file(
WRITE "${CP2K_BUILD_INFO_FILE}"
"#define __COMPILE_DATE \"unknown\"\n#define __COMPILE_REVISION \"unknown\"\n"
)
add_custom_target(
cp2k_build_info
COMMAND ${CMAKE_COMMAND} -DOUTPUT_FILE=${CP2K_BUILD_INFO_FILE} -P
COMMAND
${CMAKE_COMMAND} -DOUTPUT_FILE=${CP2K_BUILD_INFO_FILE}
-DSOURCE_DIR=${PROJECT_SOURCE_DIR} -P
${PROJECT_SOURCE_DIR}/cmake/GenerateCp2kBuildInfo.cmake
BYPRODUCTS ${CP2K_BUILD_INFO_FILE}
COMMENT "Updating CP2K build timestamp"
COMMENT "Updating CP2K build timestamp and git revision"
VERBATIM)
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/cp2k_info.F
PROPERTIES OBJECT_DEPENDS "${CP2K_BUILD_INFO_FILE}")
@ -1828,7 +1834,6 @@ target_compile_definitions(
$<$<BOOL:${CP2K_USE_MPI}>:__parallel>
$<$<BOOL:${CP2K_USE_MPI_F08}>:__MPI_F08>
__COMPILE_HOST=\"${CP2K_HOST_NAME}\"
__COMPILE_REVISION=\"${CP2K_GIT_HASH}\"
__DATA_DIR=\"${CP2K_DATA_DIR}\"
__COMPILE_ARCH=\"${CMAKE_SYSTEM_PROCESSOR}\"
$<$<BOOL:${CP2K_USE_PLUMED}>:__PLUMED2>

View file

@ -93,6 +93,7 @@ FLAG_EXCEPTIONS_RE = re.compile(r"|".join(FLAG_EXCEPTIONS))
PORTABLE_FILENAME_RE = re.compile(r"^[a-zA-Z0-9._/#~=+-]*$")
OP_RE = re.compile(r"[\\|()!&><=*/+-]")
NUM_RE = re.compile(r"[0-9]+[ulUL]*")
NO_DEFAULT_PATH_RE = re.compile(r"\bNO_DEFAULT_PATH\b")
CP2K_FLAGS_RE = re.compile(
r"FUNCTION cp2k_flags\(\)(.*)END FUNCTION cp2k_flags", re.DOTALL
)
@ -309,6 +310,14 @@ def check_file(path: pathlib.Path) -> List[str]:
f"{path}: CMake option {opt} not mentioned in docs/technologies section nor build-from-source.md"
]
# NO_DEFAULT_PATH disables searching CMAKE_PREFIX_PATH and other default
# locations, which breaks Spack, system-package, and HPC-module installs
# unless every possible layout is hand-enumerated in PATHS/HINTS - don't use it.
if (
fn_ext == ".cmake" or path.name == "CMakeLists.txt"
) and NO_DEFAULT_PATH_RE.search(content):
warnings += [f"{path}: Found NO_DEFAULT_PATH, please remove it"]
# Check for DOIs that could be a bibliography reference.
if re.match(r"docs/[^/]+/.*\.md", str(path)) and "docs/CP2K_INPUT" not in str(path):
for line in content.splitlines():

View file

@ -0,0 +1,27 @@
lint:
disabled_codes:
# Missing docstring on function/macro declaration - not CP2K's convention.
- C0111
# Line too long - false positive on the "#!"-style license banner that
# every .cmake/CMakeLists.txt file starts with; cmake-format deliberately
# does not rewrap "#!" comment lines, so they stay at their original width.
- C0301
# Invalid variable/argument/macro name - CP2K's convention is to prefix
# local/private names with one or more underscores (e.g. "_package_name",
# "__var") and to use snake_case for macros, neither of which matches
# cmake-lint's default naming patterns. This also fires spuriously on
# dynamically composed variable names like "CP2K_${_varname}_ROOT", which
# no static naming pattern can ever match.
- C0103
# Missing COMMENT in add_custom_command()/add_custom_target() - stylistic,
# not required by this codebase.
- C0113
# Bad indentation on wrapped multi-line arguments - cmake-lint's
# indentation heuristic disagrees with cmake-format's own line-wrapping
# in several already-formatted, correct files; not a reliable signal here.
- C0307
# "String looks like a variable reference missing an open tag" - false
# positive on deliberately-escaped "\${VAR}" references inside
# install(CODE "...") scripts, where the escaping defers expansion to
# install time on purpose.
- W0106

View file

@ -256,6 +256,7 @@ def process_file(fn: str, allow_modifications: bool) -> None:
if re.match(r"(.*/CMakeLists.txt)|(.*\.cmake)$", fn):
run_remote_tool("cmakeformat", fn)
run_remote_tool("cmakelint", fn)
if re.match(r"./data/.*POTENTIALS?$", fn):
check_data_files()

View file

@ -67,6 +67,18 @@ def cmakeformat():
return run_tool(["cmake-format", "-i"], timeout=30)
# ======================================================================================
@app.route("/cmakelint", methods=["POST"])
def cmakelint():
# Note: the config path must be passed as a single "--flag=value" token.
# cmake-lint's "-c"/"--config-files" option is nargs="+", so passing it as
# two separate argv tokens ("-c", path) would greedily swallow the target
# filename that run_tool() appends as another config file, and silently
# scan zero files instead.
config = f"--config-files={os.getcwd()}/cmake-lint.yaml"
return run_tool(["cmake-lint", config], timeout=30)
# ======================================================================================
@app.route("/fortitude", methods=["POST"])
def fortitude():

View file

@ -23,6 +23,7 @@ mypy_extensions==1.1.0
packaging==26.0
pathspec==1.0.4
platformdirs==4.9.2
pyyaml==6.0.3
pytokens==0.4.1
ruamel.yaml==0.19.1
six==1.17.0