forked from boostorg/fiber
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
132 lines (104 loc) · 3.17 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
# Copyright 2020, 2021 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# https://www.boost.org/LICENSE_1_0.txt
cmake_minimum_required(VERSION 3.8...3.20)
project(boost_fiber VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
if(WIN32 AND NOT CMAKE_CXX_PLATFORM_ID MATCHES "Cygwin")
set(_default_target windows)
elseif(CMAKE_SYSTEM_NAME STREQUAL Linux)
set(_default_target linux)
else()
set(_default_target none)
endif()
set(BOOST_FIBER_NUMA_TARGET_OS "${_default_target}" CACHE STRING "Boost.Fiber target OS (aix, freebsd, hpux, linux, solaris, windows, none)")
set_property(CACHE BOOST_FIBER_NUMA_TARGET_OS PROPERTY STRINGS aix freebsd hpux linux solaris windows none)
unset(_default_target)
message(STATUS "Boost.Fiber: NUMA target OS is ${BOOST_FIBER_NUMA_TARGET_OS}")
# boost_fiber
add_library(boost_fiber
src/algo/algorithm.cpp
src/algo/round_robin.cpp
src/algo/shared_work.cpp
src/algo/work_stealing.cpp
src/barrier.cpp
src/condition_variable.cpp
src/context.cpp
src/fiber.cpp
src/future.cpp
src/mutex.cpp
src/properties.cpp
src/recursive_mutex.cpp
src/recursive_timed_mutex.cpp
src/scheduler.cpp
src/timed_mutex.cpp
src/waker.cpp
)
add_library(Boost::fiber ALIAS boost_fiber)
target_include_directories(boost_fiber PUBLIC include)
target_link_libraries(boost_fiber
PUBLIC
Boost::assert
Boost::config
Boost::context
Boost::core
Boost::intrusive
Boost::predef
Boost::smart_ptr
)
target_compile_features(boost_fiber PUBLIC cxx_std_11)
target_compile_definitions(boost_fiber
PUBLIC BOOST_FIBER_NO_LIB
PRIVATE BOOST_FIBER_SOURCE BOOST_FIBERS_SOURCE
)
if(BUILD_SHARED_LIBS)
target_compile_definitions(boost_fiber PUBLIC BOOST_FIBER_DYN_LINK BOOST_FIBERS_DYN_LINK)
else()
target_compile_definitions(boost_fiber PUBLIC BOOST_FIBER_STATIC_LINK)
endif()
# boost_fiber_numa
if(BOOST_FIBER_NUMA_TARGET_OS STREQUAL none)
set(NUMA_SOURCES
src/numa/pin_thread.cpp
src/numa/topology.cpp
)
else()
set(NUMA_SOURCES
src/numa/${BOOST_FIBER_NUMA_TARGET_OS}/pin_thread.cpp
src/numa/${BOOST_FIBER_NUMA_TARGET_OS}/topology.cpp
)
endif()
add_library(boost_fiber_numa
${NUMA_SOURCES}
src/numa/algo/work_stealing.cpp
)
add_library(Boost::fiber_numa ALIAS boost_fiber_numa)
target_include_directories(boost_fiber_numa PUBLIC include)
target_link_libraries(boost_fiber_numa
PUBLIC
Boost::assert
Boost::config
Boost::context
Boost::fiber
Boost::smart_ptr
PRIVATE
Boost::algorithm
Boost::filesystem
Boost::format
)
target_compile_definitions(boost_fiber_numa
PUBLIC BOOST_FIBER_NO_LIB
PRIVATE BOOST_FIBER_SOURCE BOOST_FIBERS_SOURCE
)
if(BUILD_SHARED_LIBS)
target_compile_definitions(boost_fiber_numa PUBLIC BOOST_FIBER_DYN_LINK BOOST_FIBERS_DYN_LINK)
else()
target_compile_definitions(boost_fiber_numa PUBLIC BOOST_FIBER_STATIC_LINK)
endif()
# Install
if(BOOST_SUPERPROJECT_VERSION AND NOT CMAKE_VERSION VERSION_LESS 3.13)
boost_install(TARGETS boost_fiber boost_fiber_numa VERSION ${BOOST_SUPERPROJECT_VERSION} HEADER_DIRECTORY include)
endif()
# Test
if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
add_subdirectory(test)
endif()