-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathCMakeLists.txt
150 lines (134 loc) · 5.21 KB
/
CMakeLists.txt
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# ##############################################################################
# GAHM - Generalized Asymmetric Holland Model
#
# Authors: - Zach Cobell - Rick Luettich
#
# Derivative of work by: Jie Gao
#
# License: MIT
#
# ##############################################################################
# Set up the project
# ##############################################################################
cmake_minimum_required(VERSION 3.18)
project(gahm CXX)
# Warnings, Sanitizers, etc
add_library(project_options INTERFACE)
add_library(project_warnings INTERFACE)
include(cmake/StandardProjectSettings.cmake)
include(cmake/PreventInSourceBuilds.cmake)
include(cmake/Cache.cmake)
include(cmake/CompilerWarnings.cmake)
set(CMAKE_CXX_STANDARD 17)
target_compile_features(project_options INTERFACE cxx_std_17)
set_project_warnings(project_warnings)
include(cmake/Sanitizers.cmake)
enable_sanitizers(project_options)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
mark_as_advanced(CLEAR CMAKE_BUILD_TYPE)
mark_as_advanced(CLEAR CMAKE_CXX_COMPILER)
mark_as_advanced(CLEAR CMAKE_CXX_FLAGS)
mark_as_advanced(CLEAR CMAKE_CXX_FLAGS_RELEASE)
mark_as_advanced(CLEAR CMAKE_CXX_FLAGS_DEBUG)
option(GAHM_ENABLE_WARNINGS "Enable verbose compiler warnings" OFF)
option(GAHM_ENABLE_COVERAGE "Enable code coverage" OFF)
option(GAHM_ENABLE_SHARED "Enable compilation of shared GAHM library" ON)
option(GAHM_ENABLE_STATIC "Enable compilation of static GAHM library" OFF)
# ##############################################################################
# C++ Checks
# ##############################################################################
# Check if the compiler supports std::uncaught_exceptions()
include(CheckCXXSourceCompiles)
set(CMAKE_REQUIRED_FLAGS "-std=c++17")
check_cxx_source_compiles(
"
#include <exception>
int main() {
return std::uncaught_exceptions();
}
"
GAHM_HAS_UNCAUGHT_EXCEPTIONS)
unset(CMAKE_REQUIRED_FLAGS)
# ##############################################################################
# ##############################################################################
# ##############################################################################
# Coverage
# ##############################################################################
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
set(GAHM_COVERAGE_COMPILE_FLAGS
"-g -fprofile-arcs -ftest-coverage"
CACHE STRING "Flags used by the C++ compiler during coverage builds."
FORCE)
set(GAHM_COVERAGE_LINK_FLAGS
"-fprofile-arcs"
CACHE STRING "Flags used by the C++ linker during coverage builds." FORCE)
else()
set(GAHM_COVERAGE_COMPILE_FLAGS
"-g"
CACHE STRING "Flags used by the C++ compiler during coverage builds."
FORCE)
set(GAHM_COVERAGE_LINK_FLAGS
""
CACHE STRING "Flags used by the C++ linker during coverage builds." FORCE)
endif()
mark_as_advanced(GAHM_COVERAGE_FLAGS)
# ##############################################################################
# ##############################################################################
# Dependencies
# ##############################################################################
find_package(Boost 1.71.0 REQUIRED)
add_subdirectory(thirdparty/fmt-9.1.0 EXCLUDE_FROM_ALL)
mark_as_advanced(
FMT_CUDA_TEST
FMT_DEBUG_POSTFIX
FMT_DOC
FMT_FUZZ
FMT_INC_DIR
FMT_INSTALL
FMT_MODULE
FMT_OS
FMT_PEDANTIC
FMT_SYSTEM_HEADERS
FMT_TEST
FMT_WERROR)
# ##############################################################################
# ##############################################################################
# Fortran
# ##############################################################################
option(GAHM_ENABLE_FORTRAN "Enable Fortran bindings" OFF)
if(GAHM_ENABLE_FORTRAN)
enable_language(Fortran)
endif()
# ##############################################################################
# ##############################################################################
# PYTHON
# ##############################################################################
option(GAHM_ENABLE_PYTHON "Enable Python bindings" OFF)
# ##############################################################################
# ##############################################################################
# Source
# ##############################################################################
add_subdirectory(src)
# ##############################################################################
# ##############################################################################
# Tests (Unit, Fuzz, Benchmarks)
# ##############################################################################
option(GAHM_ENABLE_TESTS "Build tests" OFF)
if(GAHM_ENABLE_TESTS)
message(STATUS "GAHM tests enabled")
enable_testing()
add_subdirectory(tests)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
option(GAHM_ENABLE_FUZZ "Build Fuzzing" OFF)
if(GAHM_ENABLE_FUZZ)
message(STATUS "Building Fuzz tests")
add_subdirectory(tests/fuzz)
endif()
endif()
option(GAHM_ENABLE_BENCHMARKS "Build benchmarks" OFF)
if(GAHM_ENABLE_BENCHMARKS)
message(STATUS "GAHM benchmarks enabled")
add_subdirectory(tests/benchmark)
endif()
endif()
# ##############################################################################