-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
237 lines (204 loc) · 6.88 KB
/
Copy pathCMakeLists.txt
File metadata and controls
237 lines (204 loc) · 6.88 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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
# Eggs.Stacktrace
#
# Copyright (c) 2026 Agustin Berge
#
# Distributed under the Boost Software License, Version 1.0.
# See accompanying file LICENSE.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt
cmake_minimum_required(VERSION 4.0...4.4.0)
project(
Eggs.Stacktrace
VERSION 0.1.0
DESCRIPTION "A C++ stacktrace library"
LANGUAGES CXX
)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(GNUInstallDirs)
# Options (two spellings: short when top-level, prefixed when a subdirectory)
if(PROJECT_IS_TOP_LEVEL)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_CXX_SCAN_FOR_MODULES OFF)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT
"$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>"
)
option(BUILD_EXAMPLES "Build the examples" ON)
include(CTest)
option(ENABLE_INSTALL "Generate install rules" ON)
else()
set_property(DIRECTORY PROPERTY SYSTEM ON)
option(EGGS_STACKTRACE_BUILD_EXAMPLES "Build the examples" OFF)
option(EGGS_STACKTRACE_BUILD_TESTING "Build the test suite" OFF)
option(EGGS_STACKTRACE_ENABLE_INSTALL "Generate install rules" OFF)
set(BUILD_EXAMPLES ${EGGS_STACKTRACE_BUILD_EXAMPLES})
set(BUILD_TESTING ${EGGS_STACKTRACE_BUILD_TESTING})
set(ENABLE_INSTALL ${EGGS_STACKTRACE_ENABLE_INSTALL})
endif()
#
# Library targets
#
# -- Exported names for each backend ------------------------------------------
set(EGGS_STACKTRACE_BACKEND_EXPORT_null Null)
# -- Common OBJECT library ----
add_library(_eggs_stacktrace_common OBJECT src/stacktrace.cpp)
target_include_directories(
_eggs_stacktrace_common
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_compile_features(_eggs_stacktrace_common PUBLIC cxx_std_11)
target_sources(
_eggs_stacktrace_common
PUBLIC
FILE_SET HEADERS
BASE_DIRS include
FILES
include/eggs/stacktrace.hpp
include/eggs/stacktrace/detail/nodiscard.hpp
PRIVATE
FILE_SET private_headers
TYPE HEADERS
BASE_DIRS src
FILES src/detail/backend.hpp
)
set_target_properties(
_eggs_stacktrace_common
PROPERTIES VERIFY_INTERFACE_HEADER_SETS ${BUILD_TESTING}
)
if(MSVC)
set_target_properties(
_eggs_stacktrace_common
PROPERTIES
COMPILE_PDB_NAME "_eggs_stacktrace_common"
COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>"
)
endif()
# -- Backend macro -------------------------------------------------------------
set(EGGS_STACKTRACE_BACKENDS)
macro(eggs_stacktrace_add_backend name)
list(APPEND EGGS_STACKTRACE_BACKENDS ${name})
set(_export "${EGGS_STACKTRACE_BACKEND_EXPORT_${name}}")
add_library(
_eggs_stacktrace_${name}
STATIC
$<TARGET_OBJECTS:_eggs_stacktrace_common>
src/stacktrace_${name}.cpp
)
target_include_directories(
_eggs_stacktrace_${name}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_compile_features(_eggs_stacktrace_${name} PUBLIC cxx_std_11)
set_target_properties(
_eggs_stacktrace_${name}
PROPERTIES
EXPORT_NAME Stacktrace::${_export}
OUTPUT_NAME eggs_stacktrace_${name}
DEBUG_POSTFIX d
)
if(MSVC)
set_target_properties(
_eggs_stacktrace_${name}
PROPERTIES
COMPILE_PDB_NAME "eggs_stacktrace_${name}"
COMPILE_PDB_OUTPUT_DIRECTORY
"${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>"
)
endif()
if(NOT "${ARGN}" STREQUAL "")
target_link_libraries(_eggs_stacktrace_${name} PUBLIC ${ARGN})
endif()
add_library(Eggs::Stacktrace::${_export} ALIAS _eggs_stacktrace_${name})
unset(_export)
endmacro()
# -- Backend targets -----------------------------------------------------------
eggs_stacktrace_add_backend(null)
# -- Main alias ----------------------------------------------------------------
# Note: ALIAS cannot alias another ALIAS, so we alias the internal target name.
set(EGGS_STACKTRACE_DEFAULT_BACKEND null)
add_library(
Eggs::Stacktrace
ALIAS _eggs_stacktrace_${EGGS_STACKTRACE_DEFAULT_BACKEND}
)
#
# Examples
#
if(BUILD_EXAMPLES)
add_subdirectory(example)
endif()
#
# Tests
#
if(BUILD_TESTING)
add_subdirectory(test)
endif()
#
# Install rules
#
if(ENABLE_INSTALL)
include(CMakePackageConfigHelpers)
# Install public headers from the common OBJECT library's file set.
install(
TARGETS _eggs_stacktrace_common
FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
# -- Backend install helper ------------------------------------------------
macro(eggs_stacktrace_install_backend name)
if(TARGET _eggs_stacktrace_${name})
install(
TARGETS _eggs_stacktrace_${name}
EXPORT EggsStacktraceTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
if(MSVC)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/eggs_stacktrace_${name}.pdb"
DESTINATION ${CMAKE_INSTALL_LIBDIR}
CONFIGURATIONS Debug RelWithDebInfo
OPTIONAL
)
endif()
endif()
endmacro()
eggs_stacktrace_install_backend(null)
install(
EXPORT EggsStacktraceTargets
NAMESPACE Eggs::
FILE eggs.stacktrace-targets.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/eggs.stacktrace
)
set(EGGS_STACKTRACE_DEFAULT_BACKEND_EXPORT
"${EGGS_STACKTRACE_BACKEND_EXPORT_${EGGS_STACKTRACE_DEFAULT_BACKEND}}"
)
configure_package_config_file(
cmake/eggs.stacktrace-config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/eggs.stacktrace-config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/eggs.stacktrace
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/eggs.stacktrace-config-version.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/eggs.stacktrace-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/eggs.stacktrace-config-version.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/eggs.stacktrace
)
set(CPACK_PACKAGE_NAME "Eggs.Stacktrace")
set(CPACK_PACKAGE_VENDOR "Agustin Berge")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
if(WIN32)
set(CPACK_GENERATOR ZIP)
else()
set(CPACK_GENERATOR TGZ)
endif()
include(CPack)
endif()