133 lines
3.2 KiB
CMake
133 lines
3.2 KiB
CMake
# 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()
|