-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
131 lines (110 loc) · 5.87 KB
/
Copy pathCMakeLists.txt
File metadata and controls
131 lines (110 loc) · 5.87 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
################################################## Project ##################################################
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
project (dpa VERSION 1.0 LANGUAGES C CXX)
list (APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
set_property (GLOBAL PROPERTY USE_FOLDERS ON)
set (CMAKE_CXX_STANDARD 17)
set (CMAKE_BUILD_TYPE Release)
include (set_max_warning_level)
set_max_warning_level ()
################################################## Options ##################################################
option(BUILD_TESTS "Build tests." OFF)
option(DPA_FTLE_SUPPORT "Build with FTLE support (i.e. particle gathering and grid remapping)." ON)
if (DPA_FTLE_SUPPORT)
list (APPEND PROJECT_COMPILE_DEFINITIONS -DDPA_FTLE_SUPPORT)
endif()
################################################## Sources ##################################################
file(GLOB_RECURSE PROJECT_HEADERS include/*.h include/*.hpp)
file(GLOB_RECURSE PROJECT_SOURCES source/*.c source/*.cpp)
file(GLOB_RECURSE PROJECT_CMAKE_UTILS cmake/*.cmake)
file(GLOB_RECURSE PROJECT_MISC *.md *.txt)
set (PROJECT_FILES
${PROJECT_HEADERS}
${PROJECT_SOURCES}
${PROJECT_CMAKE_UTILS}
${PROJECT_MISC})
include (assign_source_group)
assign_source_group(${PROJECT_FILES})
################################################## Dependencies ##################################################
include(import_library)
find_package (Boost REQUIRED date_time mpi regex)
import_library(Boost_INCLUDE_DIRS Boost_DATE_TIME_LIBRARY_DEBUG Boost_DATE_TIME_LIBRARY_RELEASE)
import_library(Boost_INCLUDE_DIRS Boost_MPI_LIBRARY_DEBUG Boost_MPI_LIBRARY_RELEASE)
import_library(Boost_INCLUDE_DIRS Boost_REGEX_LIBRARY_DEBUG Boost_REGEX_LIBRARY_RELEASE)
import_library(Boost_INCLUDE_DIRS Boost_SERIALIZATION_LIBRARY_DEBUG Boost_SERIALIZATION_LIBRARY_RELEASE)
find_package (Catch2 REQUIRED)
list (APPEND PROJECT_LIBRARIES Catch2::Catch2)
find_package (Eigen3 3.3 REQUIRED NO_MODULE)
list (APPEND PROJECT_LIBRARIES Eigen3::Eigen)
set (HDF5_PREFER_PARALLEL TRUE)
find_package (HDF5 REQUIRED)
import_library(HDF5_INCLUDE_DIRS HDF5_C_LIBRARIES)
list (APPEND PROJECT_COMPILE_DEFINITIONS -DH5_USE_BOOST -DH5_BUILT_AS_DYNAMIC_LIB)
find_package (MKL REQUIRED)
list (APPEND PROJECT_LIBRARIES MKL::MKL)
find_package (MPI REQUIRED)
import_library(MPI_C_INCLUDE_DIRS MPI_C_LIBRARIES)
find_package (nlohmann_json 3.7.0 REQUIRED)
list (APPEND PROJECT_LIBRARIES nlohmann_json::nlohmann_json)
find_package (TBB REQUIRED)
list (APPEND PROJECT_LIBRARIES TBB::tbb TBB::tbbmalloc)
if(UNIX)
find_package(Threads REQUIRED)
list (APPEND PROJECT_LIBRARIES Threads::Threads)
endif()
# ADD LIBRARIES HERE. Vcpkg toolchain file will automatically locate them.
# Examples:
# - Header Only:
# find_package (GLM REQUIRED)
# import_library(GLM_INCLUDE_DIRS)
# - Identical Debug and Release:
# find_package (OpenGL REQUIRED)
# import_library(OPENGL_INCLUDE_DIR OPENGL_LIBRARIES)
# - Separate Debug and Release:
# find_package (Boost REQUIRED iostreams)
# import_library(Boost_INCLUDE_DIRS Boost_IOSTREAMS_LIBRARY_DEBUG Boost_IOSTREAMS_LIBRARY_RELEASE)
# - You may also set the PROJECT_INCLUDE_DIRS and PROJECT_LIBRARIES instead of using import_library.
################################################## Targets ##################################################
add_executable(${PROJECT_NAME} ${PROJECT_FILES})
target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<INSTALL_INTERFACE:include> PRIVATE source)
target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_INCLUDE_DIRS})
target_link_libraries (${PROJECT_NAME} PUBLIC ${PROJECT_LIBRARIES})
target_compile_definitions(${PROJECT_NAME} PUBLIC ${PROJECT_COMPILE_DEFINITIONS})
set_target_properties (${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX)
if(NOT BUILD_SHARED_LIBS)
string (TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER)
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS -D${PROJECT_NAME_UPPER}_STATIC)
endif()
################################################## Testing ##################################################
if(BUILD_TESTS)
enable_testing ()
set (TEST_MAIN_NAME catch_main)
set (TEST_MAIN_SOURCES tests/catch/main.cpp)
add_library (${TEST_MAIN_NAME} OBJECT ${TEST_MAIN_SOURCES})
set_property (TARGET ${TEST_MAIN_NAME} PROPERTY FOLDER tests/catch)
assign_source_group(${TEST_MAIN_SOURCES})
file(GLOB PROJECT_TEST_CPPS tests/*.cpp)
foreach(_SOURCE ${PROJECT_TEST_CPPS})
get_filename_component (_NAME ${_SOURCE} NAME_WE)
add_executable (${_NAME} ${_SOURCE} $<TARGET_OBJECTS:${TEST_MAIN_NAME}>)
target_include_directories(${_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<INSTALL_INTERFACE:include> PRIVATE source)
target_include_directories(${_NAME} PUBLIC ${PROJECT_INCLUDE_DIRS})
target_link_libraries (${_NAME} PUBLIC ${PROJECT_LIBRARIES})
target_compile_definitions(${_NAME} PUBLIC ${PROJECT_COMPILE_DEFINITIONS})
add_test (${_NAME} ${_NAME})
set_property (TARGET ${_NAME} PROPERTY FOLDER tests)
assign_source_group (${_SOURCE})
endforeach()
endif()
################################################## Installation ##################################################
install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}-config
RUNTIME DESTINATION bin)
install(DIRECTORY include/ DESTINATION include)
install(EXPORT ${PROJECT_NAME}-config DESTINATION cmake)
export (TARGETS ${PROJECT_NAME} FILE ${PROJECT_NAME}-config.cmake)