|
1 | 1 | cmake_minimum_required(VERSION 3.10) |
2 | 2 |
|
3 | | -project(libpace CXX) |
4 | | - |
5 | | -# set policy to silence warnings about ignoring <PackageName>_ROOT but use it |
6 | | -if(POLICY CMP0074) |
7 | | - cmake_policy(SET CMP0074 NEW) |
8 | | -endif() |
9 | | -# set policy to silence warnings about missing executable permissions in |
10 | | -# pythonx.y-config when cross-compiling. review occasionally if it may be set to NEW |
11 | | -if(POLICY CMP0109) |
12 | | - cmake_policy(SET CMP0109 OLD) |
13 | | -endif() |
| 3 | +project(libpace VERSION 20240911 LANGUAGES CXX) |
14 | 4 |
|
| 5 | +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake) |
15 | 6 |
|
16 | 7 | ##yaml |
17 | | -# enforce building libyaml-cpp as static library and turn off optional features |
18 | | -set(YAML_BUILD_SHARED_LIBS OFF) |
19 | | -set(YAML_CPP_BUILD_CONTRIB OFF) |
20 | | -set(YAML_CPP_BUILD_TOOLS OFF) |
21 | | -add_subdirectory(yaml-cpp build-yaml-cpp) |
22 | | -set(YAML_CPP_INCLUDE_DIR yaml-cpp/include) |
| 8 | +find_package(yaml-cpp QUIET) |
| 9 | + |
| 10 | +if(NOT yaml-cpp_FOUND) |
| 11 | + # enforce building libyaml-cpp as static library and turn off optional features |
| 12 | + set(YAML_BUILD_SHARED_LIBS OFF) |
| 13 | + set(YAML_CPP_BUILD_CONTRIB OFF) |
| 14 | + set(YAML_CPP_BUILD_TOOLS OFF) |
| 15 | + add_subdirectory(yaml-cpp build-yaml-cpp) |
| 16 | + add_library(yaml-cpp::yaml-cpp ALIAS yaml-cpp-pace) |
| 17 | + |
| 18 | + install(DIRECTORY yaml-cpp/include/yaml-cpp |
| 19 | + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} |
| 20 | + FILES_MATCHING |
| 21 | + PATTERN *.h |
| 22 | + ) |
| 23 | + set(BUILD_YAML_CPP TRUE) |
| 24 | +else() |
| 25 | + find_package(yaml-cpp REQUIRED) |
| 26 | + set(BUILD_YAML_CPP FALSE) |
| 27 | +endif() |
23 | 28 |
|
24 | 29 | ## cnpy |
25 | | -set(CNPY_PATH cnpy) |
26 | | -set(CNPY_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) |
27 | | -set(CNPY_SRC ${CNPY_PATH}/cnpy.cpp) |
28 | | -add_library(cnpy-static STATIC ${CNPY_SRC}) |
29 | | -set_target_properties(cnpy-static PROPERTIES LINKER_LANGUAGE CXX) |
| 30 | +find_package(cnpy QUIET) |
| 31 | + |
| 32 | +if(NOT cnpy_FOUND) |
| 33 | + add_library(cnpy-static STATIC cnpy/cnpy.cpp) |
| 34 | + target_include_directories(cnpy-static PUBLIC |
| 35 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> |
| 36 | + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/pace> |
| 37 | + ) |
| 38 | + set_target_properties(cnpy-static PROPERTIES LINKER_LANGUAGE CXX OUTPUT_NAME cnpy) |
| 39 | + add_library(cnpy::cnpy ALIAS cnpy-static) |
| 40 | + |
| 41 | + install(DIRECTORY cnpy |
| 42 | + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pace |
| 43 | + FILES_MATCHING |
| 44 | + PATTERN *.h |
| 45 | + ) |
| 46 | + set(BUILD_CNPY TRUE) |
| 47 | +else() |
| 48 | + find_package(cnpy REQUIRED) |
| 49 | + set(BUILD_CNPY FALSE) |
| 50 | +endif() |
30 | 51 |
|
31 | 52 | ## winger-cpp |
32 | 53 | # this is header-only library |
33 | 54 | set(WIGNER_PATH wigner-cpp) |
34 | 55 | set(WIGNER_INCLUDE_PATH ${WIGNER_PATH}/include) |
35 | 56 |
|
36 | | -# ML-PACE includes |
37 | | -file(GLOB PACE_INCLUDE_DIR ML-PACE) |
| 57 | +install(DIRECTORY wigner |
| 58 | + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pace |
| 59 | + FILES_MATCHING |
| 60 | + PATTERN *.hpp |
| 61 | +) |
38 | 62 |
|
39 | 63 | # ML-PACE sources |
40 | 64 | file(GLOB PACE_EVALUATOR_SOURCES ML-PACE/ace-evaluator/*.cpp) |
41 | 65 | file(GLOB PACE_SOURCES ML-PACE/ace/*.cpp) |
42 | | -list(FILTER PACE_EVALUATOR_SOURCES EXCLUDE REGEX pair_pace*.cpp) |
43 | | -list(FILTER PACE_SOURCES EXCLUDE REGEX pair_pace*.cpp) |
44 | 66 |
|
45 | 67 | add_library(pace STATIC ${PACE_EVALUATOR_SOURCES} ${PACE_SOURCES}) |
46 | | -#set_target_properties(pace PROPERTIES CXX_EXTENSIONS ON OUTPUT_NAME lammps_pace${LAMMPS_MACHINE}) |
47 | | -target_include_directories(pace PUBLIC ${PACE_INCLUDE_DIR} ${YAML_CPP_INCLUDE_DIR}) |
48 | | -target_include_directories(pace PRIVATE ${CNPY_INCLUDE_PATH} ${WIGNER_INCLUDE_PATH}) |
| 68 | +target_include_directories(pace PRIVATE ${WIGNER_INCLUDE_PATH}) |
49 | 69 | target_compile_definitions(pace PUBLIC EXTRA_C_PROJECTIONS) # important for B-projections and extrapolation grade calculations |
50 | 70 | target_compile_definitions(pace PUBLIC COMPUTE_B_GRAD) # important for gradients of B-projections and ctilde functions |
51 | | -target_link_libraries(pace PRIVATE yaml-cpp-pace cnpy-static) |
52 | | -install(TARGETS pace LIBRARY DESTINATION lib) |
| 71 | +target_link_libraries(pace PUBLIC yaml-cpp::yaml-cpp cnpy::cnpy) |
| 72 | + |
| 73 | +set(deps_targets "") |
| 74 | + |
| 75 | +if(BUILD_YAML_CPP) |
| 76 | + list(APPEND deps_targets yaml-cpp-pace) |
| 77 | +else() |
| 78 | + target_compile_definitions(pace PUBLIC YAML_PACE=YAML) |
| 79 | + set_target_properties(pace PROPERTIES |
| 80 | + CXX_STANDARD 17 |
| 81 | + CXX_STANDARD_REQUIRED ON |
| 82 | + CXX_EXTENSIONS OFF |
| 83 | + ) |
| 84 | +endif() |
| 85 | + |
| 86 | +if(BUILD_CNPY) |
| 87 | + list(APPEND deps_targets cnpy-static) |
| 88 | +else() |
| 89 | + file(MAKE_DIRECTORY ${PROJECT_SOURCE_DIR}/ML-PACE/cnpy) |
| 90 | + file(WRITE ${PROJECT_SOURCE_DIR}/ML-PACE/cnpy/cnpy.h "#include <cnpy.h>") |
| 91 | +endif() |
| 92 | + |
| 93 | + |
| 94 | + |
| 95 | +include(GNUInstallDirs) |
| 96 | + |
| 97 | +# ML-PACE includes |
| 98 | +target_include_directories(pace |
| 99 | +PUBLIC |
| 100 | + $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/ML-PACE> |
| 101 | + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/pace> |
| 102 | +) |
| 103 | + |
| 104 | +install(DIRECTORY ML-PACE/ace ML-PACE/ace-evaluator |
| 105 | + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pace |
| 106 | + FILES_MATCHING |
| 107 | + PATTERN *.h |
| 108 | +) |
| 109 | + |
| 110 | +install(TARGETS pace ${deps_targets} EXPORT pace_Targets |
| 111 | + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 112 | + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) |
| 113 | +install(EXPORT pace_Targets FILE pace-targets.cmake |
| 114 | + NAMESPACE pace:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pace |
| 115 | +) |
| 116 | + |
| 117 | +include(CMakePackageConfigHelpers) |
| 118 | + |
| 119 | +configure_package_config_file( |
| 120 | + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/pace-config.cmake.in |
| 121 | + ${CMAKE_CURRENT_BINARY_DIR}/pace-config.cmake |
| 122 | + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pace |
| 123 | +) |
| 124 | + |
| 125 | +write_basic_package_version_file("pace-config-version.cmake" |
| 126 | + VERSION ${PROJECT_VERSION} COMPATIBILITY ExactVersion) |
| 127 | + |
| 128 | +install(FILES |
| 129 | + "${CMAKE_CURRENT_BINARY_DIR}/pace-config.cmake" |
| 130 | + "${CMAKE_CURRENT_BINARY_DIR}/pace-config-version.cmake" |
| 131 | + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findcnpy.cmake" |
| 132 | + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pace) |
| 133 | + |
| 134 | +add_library(pace::pace ALIAS pace) |
0 commit comments