forked from Orphis/boost-cmake
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathCMakeLists.txt
185 lines (156 loc) · 4.31 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
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
cmake_minimum_required(VERSION 3.27...3.31)
project(Boost-CMake LANGUAGES CXX VERSION 1.87.0.5)
if(PROJECT_IS_TOP_LEVEL)
option(BOOST_BUILD_ALL "Do build all targets" OFF)
option(BUILD_TESTING "Do build all tests" ON)
endif()
option(
BUILD_SHARED_LIBS
"A standard CMake variable that determines whether to build shared or static libraries. Defaults to ON"
ON
)
if(UNIX)
message(STATUS "Use CMAKE_UNITY_BUILD")
set(CMAKE_UNITY_BUILD ON)
endif()
set(CMAKE_INSTALL_MESSAGE LAZY)
set(CMAKE_SKIP_TEST_ALL_DEPENDENCY OFF)
if(CMAKE_SKIP_INSTALL_RULES)
set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY ON)
set(EXCLUDE_FROM_ALL EXCLUDE_FROM_ALL)
else()
set(EXCLUDE_FROM_ALL)
set(BOOST_SKIP_INSTALL_RULES OFF)
endif()
# NOTE: Use the FOLDER target property to organize targets into folders.
set_property(GLOBAL PROPERTY USE_FOLDERS TRUE)
# ensure that the debug and release builds use different names for the libraries that will be installed.
set(CMAKE_DEBUG_POSTFIX -d)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(BOOST_LIBS_REQUIRED headers)
set(BOOST_EXCLUDE_LIBRARIES
serialization
iostreams
timer
locale
log
graph
property_tree
wave
)
if(PROJECT_IS_TOP_LEVEL AND NOT BOOST_BUILD_ALL)
# Compiled libs without warnings OSX with clang v19.1.7
list(
APPEND
BOOST_INCLUDE_LIBRARIES
${BOOST_LIBS_REQUIRED}
asio
atomic
beast
chrono
exception
filesystem
program_options
regex
system
thread
test
)
endif()
set(BOOST_LIBS_OPTIONAL
container
context
coroutine
date_time
exception
fiber
json
math
random
type_erasure
CACHE STRING
"Boost libs to be compiled"
)
if(BOOST_BUILD_ALL)
set(BOOST_INCLUDE_LIBRARIES)
else()
list(APPEND BOOST_INCLUDE_LIBRARIES asio)
list(APPEND BOOST_INCLUDE_LIBRARIES headers)
list(REMOVE_DUPLICATES BOOST_INCLUDE_LIBRARIES)
endif()
enable_testing()
# ---- Add/prepare dependency handling via CPM ----
# see https://github.com/TheLartians/CPM.cmake for more info
set(BOOST_SUBDIR boost_1_87_0)
if(EXISTS "$ENV{CPM_SOURCE_CACHE}/${BOOST_SUBDIR}")
set(FETCHCONTENT_SOURCE_DIR_BOOST
"$ENV{CPM_SOURCE_CACHE}/${BOOST_SUBDIR}"
CACHE PATH
"Boost source DIR"
)
endif()
if(FETCHCONTENT_SOURCE_DIR_BOOST)
set(CPM_Boost_SOURCE
${FETCHCONTENT_SOURCE_DIR_BOOST}
CACHE PATH
"Manual override"
)
endif()
set(BOOST_VERSION 1.87.0)
set(BOOST_URL
"https://github.com/boostorg/boost/releases/download/boost-${BOOST_VERSION}/boost-${BOOST_VERSION}-cmake.7z"
CACHE STRING
"Boost download URL"
)
set(BOOST_URL_SHA256
"61d61a3f33283bab8f3736745a4e47c37141f07e413986cd05d1f942c69d529a"
CACHE STRING
"Boost download URL SHA256 checksum"
)
# ---- Add Boost source tar archive via FetchContent ----
include(FetchContent)
FetchContent_Declare(
Boost
URL ${BOOST_URL}
URL_HASH SHA256=${BOOST_URL_SHA256}
DOWNLOAD_EXTRACT_TIMESTAMP ON
${EXCLUDE_FROM_ALL}
SYSTEM
)
FetchContent_GetProperties(Boost)
if(NOT Boost_POPULATED)
message(STATUS "Fetching Boost")
FetchContent_MakeAvailable(Boost)
message(STATUS "Fetching Boost - done")
set(BOOST_SOURCE ${boost_SOURCE_DIR})
endif()
include(cmake/CheckBoostVersion.cmake)
message(STATUS "Boost found: ${BOOST_VERSION} ${BOOST_SOURCE}")
include(cmake/ccache.cmake)
configure_file(
cmake/ccache.cmake
${BOOST_SOURCE}/tools/cmake/include/ccache.cmake
COPYONLY
)
#############################################################
find_package(Threads)
# Compilation options required by all platforms
target_compile_definitions(
boost_headers
INTERFACE $<$<CONFIG:Release>:BOOST_DISABLE_ASSERT> BOOST_ASIO_NO_DEPRECATED
)
target_link_libraries(boost_headers INTERFACE Threads::Threads)
#############################################################
# ---- usage example and test ----
if(PROJECT_IS_TOP_LEVEL)
add_subdirectory(examples)
endif()
# ---- Install rules ----
if(CMAKE_SKIP_INSTALL_RULES)
return()
endif()
include(CPack)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include(AddUninstallTarget)