1 # Copyright 2020, 2021 Peter Dimov
2 # Distributed under the Boost Software License, Version 1.0.
3 # https://www.boost.org/LICENSE_1_0.txt
5 cmake_minimum_required(VERSION 3.8...3.20)
7 project(boost_fiber VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
9 if(WIN32 AND NOT CMAKE_CXX_PLATFORM_ID MATCHES "Cygwin")
10 set(_default_target windows)
11 elseif(CMAKE_SYSTEM_NAME STREQUAL Linux)
12 set(_default_target linux)
14 set(_default_target none)
17 set(BOOST_FIBER_NUMA_TARGET_OS "${_default_target}" CACHE STRING "Boost.Fiber target OS (aix, freebsd, hpux, linux, solaris, windows, none)")
18 set_property(CACHE BOOST_FIBER_NUMA_TARGET_OS PROPERTY STRINGS aix freebsd hpux linux solaris windows none)
20 unset(_default_target)
22 message(STATUS "Boost.Fiber: NUMA target OS is ${BOOST_FIBER_NUMA_TARGET_OS}")
26 add_library(boost_fiber
27 src/algo/algorithm.cpp
28 src/algo/round_robin.cpp
29 src/algo/shared_work.cpp
30 src/algo/work_stealing.cpp
32 src/condition_variable.cpp
38 src/recursive_mutex.cpp
39 src/recursive_timed_mutex.cpp
45 add_library(Boost::fiber ALIAS boost_fiber)
47 target_include_directories(boost_fiber PUBLIC include)
49 target_link_libraries(boost_fiber
60 target_compile_features(boost_fiber PUBLIC cxx_std_11)
62 target_compile_definitions(boost_fiber
63 PUBLIC BOOST_FIBER_NO_LIB
64 PRIVATE BOOST_FIBER_SOURCE BOOST_FIBERS_SOURCE
68 target_compile_definitions(boost_fiber PUBLIC BOOST_FIBER_DYN_LINK BOOST_FIBERS_DYN_LINK)
70 target_compile_definitions(boost_fiber PUBLIC BOOST_FIBER_STATIC_LINK)
75 if(BOOST_FIBER_NUMA_TARGET_OS STREQUAL none)
77 src/numa/pin_thread.cpp
82 src/numa/${BOOST_FIBER_NUMA_TARGET_OS}/pin_thread.cpp
83 src/numa/${BOOST_FIBER_NUMA_TARGET_OS}/topology.cpp
87 add_library(boost_fiber_numa
89 src/numa/algo/work_stealing.cpp
92 add_library(Boost::fiber_numa ALIAS boost_fiber_numa)
94 target_include_directories(boost_fiber_numa PUBLIC include)
96 target_link_libraries(boost_fiber_numa
109 target_compile_definitions(boost_fiber_numa
110 PUBLIC BOOST_FIBER_NO_LIB
111 PRIVATE BOOST_FIBER_SOURCE BOOST_FIBERS_SOURCE
114 if(BUILD_SHARED_LIBS)
115 target_compile_definitions(boost_fiber_numa PUBLIC BOOST_FIBER_DYN_LINK BOOST_FIBERS_DYN_LINK)
117 target_compile_definitions(boost_fiber_numa PUBLIC BOOST_FIBER_STATIC_LINK)
122 if(BOOST_SUPERPROJECT_VERSION AND NOT CMAKE_VERSION VERSION_LESS 3.13)
123 boost_install(TARGETS boost_fiber boost_fiber_numa VERSION ${BOOST_SUPERPROJECT_VERSION} HEADER_DIRECTORY include)
128 if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
130 add_subdirectory(test)