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()
|