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