-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
126 lines (107 loc) · 4.02 KB
/
CMakeLists.txt
File metadata and controls
126 lines (107 loc) · 4.02 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
# gersemi: off
# /CMakeLists.txt -*-makefile-*-
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
# gersemi: on
cmake_minimum_required(VERSION 3.30...4.3)
include(./cmake/prelude.cmake)
#===================================================
project(beman.execution VERSION 0.3.0 LANGUAGES CXX)
#===================================================
# Modules opt in only on compilers that support it: msvc, g++-15 and clang-20+
include(./cmake/cxx-modules-rules.cmake)
set(BEMAN_EXECUTION_TARGET_NAME beman.execution_headers) # used in src, and docs
set(BEMAN_EXECUTION_TARGET_PREFIX ${PROJECT_NAME}) # NOTE: used in src, and docs?
#===============================================================================
if(BEMAN_USE_MODULES)
option(BUILD_SHARED_LIBS "Build using shared libraries" OFF)
set(CMAKE_CXX_SCAN_FOR_MODULES ON)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
# CMake requires the language standard to be specified as compile feature
# when a target provides C++23 modules and the target will be installed
add_library(${BEMAN_EXECUTION_TARGET_PREFIX} STATIC) # FIXME: only static yet! CK
add_library(beman::execution ALIAS ${BEMAN_EXECUTION_TARGET_PREFIX})
target_compile_features(
${BEMAN_EXECUTION_TARGET_PREFIX}
PUBLIC cxx_std_${CMAKE_CXX_STANDARD}
)
# TODO(CK): the export header should be used!
include(GenerateExportHeader)
generate_export_header(
${BEMAN_EXECUTION_TARGET_PREFIX}
BASE_NAME ${BEMAN_EXECUTION_TARGET_PREFIX}
EXPORT_FILE_NAME beman/execution/modules_export.hpp
)
target_sources(
${BEMAN_EXECUTION_TARGET_PREFIX}
PUBLIC
FILE_SET HEADERS
BASE_DIRS include ${CMAKE_CURRENT_BINARY_DIR}
FILES
${CMAKE_CURRENT_BINARY_DIR}/beman/execution/modules_export.hpp
)
target_compile_definitions(
${BEMAN_EXECUTION_TARGET_PREFIX}
PUBLIC BEMAN_HAS_MODULES
)
set_target_properties(
${BEMAN_EXECUTION_TARGET_PREFIX}
PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
DLL_NAME_WITH_SOVERSION TRUE
)
# FIXME: Quickfix only to prevent linker problems on windows dll? CK
if(WIN32 AND BUILD_SHARED_LIBS)
set_target_properties(
${BEMAN_EXECUTION_TARGET_PREFIX}
PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON
)
endif()
find_package(Threads REQUIRED)
target_link_libraries(
${BEMAN_EXECUTION_TARGET_PREFIX}
PUBLIC Threads::Threads
)
else()
set(CMAKE_CXX_SCAN_FOR_MODULES OFF)
endif()
if(BEMAN_USE_MODULES AND BEMAN_HAS_IMPORT_STD)
target_compile_definitions(
${BEMAN_EXECUTION_TARGET_PREFIX}
PUBLIC BEMAN_HAS_IMPORT_STD
)
set_target_properties(
${BEMAN_EXECUTION_TARGET_PREFIX}
PROPERTIES CXX_MODULE_STD ON
)
elseif(BEMAN_USE_MODULES)
message(WARNING "Missing or disabled support for CMAKE_CXX_MODULE_STD!")
endif()
#===============================================================================
option(
BEMAN_EXECUTION_ENABLE_TESTING
"Enable building tests and test infrastructure. Values: { ON, OFF }."
${PROJECT_IS_TOP_LEVEL}
)
option(
BEMAN_EXECUTION_BUILD_EXAMPLES
"Enable building examples. Values: { ON, OFF }."
${PROJECT_IS_TOP_LEVEL}
)
add_subdirectory(src/beman/execution)
#===============================================================================
# NOTE: this must be done before tests! CK
include(infra/cmake/beman-install-library.cmake)
beman_install_library(${BEMAN_EXECUTION_TARGET_PREFIX} TARGETS ${BEMAN_EXECUTION_TARGET_NAME} ${BEMAN_EXECUTION_TARGET_PREFIX}
DEPENDENCIES Threads
)
#===============================================================================
enable_testing()
if(BEMAN_EXECUTION_ENABLE_TESTING)
add_subdirectory(tests/beman/execution)
endif()
if(BEMAN_EXECUTION_BUILD_EXAMPLES)
add_subdirectory(examples)
add_subdirectory(docs/code)
endif()