Repository navigation
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
82 lines (70 loc) · 3.22 KB
/
Copy pathCMakeLists.txt
File metadata and controls
82 lines (70 loc) · 3.22 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
cmake_minimum_required(VERSION 3.20)
project(radonlab
VERSION 0.1.1
DESCRIPTION "Monte Carlo Greeks for discontinuous payoffs (C++20, header-only)"
LANGUAGES CXX)
# ----------------------------------------------------------------------------
# Header-only library target
# ----------------------------------------------------------------------------
add_library(radonlab INTERFACE)
add_library(radonlab::radonlab ALIAS radonlab)
target_include_directories(radonlab INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
target_compile_features(radonlab INTERFACE cxx_std_20)
find_package(Threads REQUIRED)
target_link_libraries(radonlab INTERFACE Threads::Threads)
# ----------------------------------------------------------------------------
# Options
# ----------------------------------------------------------------------------
option(RADONLAB_BUILD_TESTS "Build the test suite" ON)
option(RADONLAB_BUILD_EXAMPLES "Build the example programs" ON)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
set(RADONLAB_WARNINGS -Wall -Wextra -Wpedantic)
endif()
# ----------------------------------------------------------------------------
# Tests
# ----------------------------------------------------------------------------
if(RADONLAB_BUILD_TESTS)
enable_testing()
foreach(t test_analytics test_estimators test_conditional_mc test_aad)
add_executable(${t} tests/${t}.cpp)
target_link_libraries(${t} PRIVATE radonlab)
target_compile_options(${t} PRIVATE ${RADONLAB_WARNINGS})
target_include_directories(${t} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests)
add_test(NAME ${t} COMMAND ${t})
endforeach()
endif()
# ----------------------------------------------------------------------------
# Examples
# ----------------------------------------------------------------------------
if(RADONLAB_BUILD_EXAMPLES)
foreach(e quickstart benchmark_digital_delta barrier_greeks perf_aad)
add_executable(${e} examples/${e}.cpp)
target_link_libraries(${e} PRIVATE radonlab)
target_compile_options(${e} PRIVATE ${RADONLAB_WARNINGS})
endforeach()
endif()
# ----------------------------------------------------------------------------
# Install / export (so downstream can `find_package(radonlab)`)
# ----------------------------------------------------------------------------
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
install(TARGETS radonlab EXPORT radonlabTargets)
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(EXPORT radonlabTargets
FILE radonlabTargets.cmake
NAMESPACE radonlab::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/radonlab)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/radonlabConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion)
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/radonlabConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/radonlabConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/radonlab)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/radonlabConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/radonlabConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/radonlab)