Repository navigation
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
135 lines (117 loc) · 3.62 KB
/
Copy pathCMakeLists.txt
File metadata and controls
135 lines (117 loc) · 3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# TODO split out the field transfer library
set(
PCMS_HEADERS
pcms.h
)
set(
PCMS_SOURCES
pcms.cpp
)
configure_file(pcms/version.h.in pcms/version.h)
configure_file(pcms/configuration.h.in pcms/configuration.h)
list(APPEND PCMS_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/pcms/version.h ${CMAKE_CURRENT_BINARY_DIR}/pcms/configuration.h)
add_subdirectory(pcms/utility)
if(PCMS_ENABLE_TRANSIENT)
add_subdirectory(pcms/transient)
endif()
add_subdirectory(pcms/discretization)
add_subdirectory(pcms/localization)
add_subdirectory(pcms/field)
add_subdirectory(pcms/coupler)
find_package(Kokkos REQUIRED)
find_package(perfstubs REQUIRED)
add_library(pcms_core ${PCMS_SOURCES})
set_target_properties(
pcms_core PROPERTIES OUTPUT_NAME pcmscore EXPORT_NAME
core
)
add_library(pcms::core ALIAS pcms_core)
target_compile_features(pcms_core PUBLIC cxx_std_20)
target_link_libraries(
pcms_core PUBLIC redev::redev
MPI::MPI_CXX Kokkos::kokkos perfstubs pcms::utility pcms::localization pcms::field pcms::coupler
)
if(PCMS_HAS_ASAN)
target_compile_options(
pcms_core PRIVATE -fsanitize=address
-fno-omit-frame-pointer
)
endif()
# export the library
set_target_properties(pcms_core PROPERTIES PUBLIC_HEADER "${PCMS_HEADERS}")
target_include_directories(
pcms_core
PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
)
install(
TARGETS pcms_core
EXPORT pcms_core-targets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pcms
)
configure_package_config_file(
"${CMAKE_SOURCE_DIR}/config.cmake.in" "${CMAKE_BINARY_DIR}/pcms-config.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pcms
)
write_basic_package_version_file(
"${PROJECT_BINARY_DIR}/pcms-config-version.cmake"
COMPATIBILITY AnyNewerVersion
)
install(
FILES "${PROJECT_BINARY_DIR}/pcms-config.cmake"
"${PROJECT_BINARY_DIR}/pcms-config-version.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pcms
)
install(FILES "${CMAKE_SOURCE_DIR}/cmake/FindPETSc.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pcms)
install(
EXPORT pcms_core-targets
NAMESPACE pcms::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pcms
)
add_library(pcms_pcms INTERFACE)
target_link_libraries(pcms_pcms INTERFACE pcms::core)
if(PCMS_ENABLE_TRANSIENT)
target_link_libraries(pcms_pcms INTERFACE pcms::transient)
endif()
set_target_properties(pcms_pcms PROPERTIES EXPORT_NAME pcms)
if (PCMS_ENABLE_Python)
# Disable LTO/IPO before adding Python subdirectory to avoid fatbinData conflicts
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION OFF)
add_subdirectory(pcms/pythonapi)
endif()
if(PCMS_ENABLE_C)
add_subdirectory(pcms/capi)
target_link_libraries(pcms_pcms INTERFACE pcms::capi)
endif()
if(PCMS_ENABLE_Fortran)
add_subdirectory(pcms/fortranapi)
target_link_libraries(pcms_pcms INTERFACE pcms::fortranapi)
endif()
add_subdirectory(pcms/transfer)
target_link_libraries(pcms_pcms INTERFACE pcms::transfer)
install(
TARGETS pcms_pcms
EXPORT pcms-targets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
# install external headers
install(
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/pcms/external/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pcms/external
)
install(
EXPORT pcms-targets
NAMESPACE pcms::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pcms
)