mirror of
https://github.com/boostorg/context.git
synced 2026-01-19 04:02:17 +00:00
Add CMakeLists.txt
This commit is contained in:
177
CMakeLists.txt
Normal file
177
CMakeLists.txt
Normal file
@@ -0,0 +1,177 @@
|
||||
# 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.5...3.16)
|
||||
|
||||
project(boost_context VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
|
||||
|
||||
# Build features
|
||||
|
||||
## Binary format
|
||||
|
||||
if(WIN32)
|
||||
set(_default_binfmt pe)
|
||||
elseif(APPLE)
|
||||
set(_default_binfmt mach-o)
|
||||
else()
|
||||
set(_default_binfmt elf)
|
||||
endif()
|
||||
|
||||
set(BOOST_CONTEXT_BINARY_FORMAT "${_default_binfmt}" CACHE STRING "Boost.context binary format (elf, mach-o, pe, xcoff)")
|
||||
set_property(CACHE BOOST_CONTEXT_BINARY_FORMAT PROPERTY STRINGS elf mach-o pe xcoff)
|
||||
|
||||
unset(_default_binfmt)
|
||||
|
||||
## ABI
|
||||
|
||||
if(WIN32)
|
||||
set(_default_abi ms)
|
||||
else()
|
||||
set(_default_abi sysv)
|
||||
endif()
|
||||
|
||||
set(BOOST_CONTEXT_ABI "${_default_abi}" CACHE STRING "Boost.context ABI (aapcs, eabi, ms, n32, n64, o32, o64, sysv, x32)")
|
||||
set_property(CACHE BOOST_CONTEXT_ABI PROPERTY STRINGS aapcs eabi ms n32 n64 o32 o64 sysv x32)
|
||||
|
||||
unset(_default_abi)
|
||||
|
||||
## Arch-and-model
|
||||
|
||||
math(EXPR _bits "${CMAKE_SIZEOF_VOID_P}*8")
|
||||
|
||||
if(_bits EQUAL 32)
|
||||
set(_default_arch i386)
|
||||
else()
|
||||
set(_default_arch x86_64)
|
||||
endif()
|
||||
|
||||
set(BOOST_CONTEXT_ARCHITECTURE "${_default_arch}" CACHE STRING "Boost.context architecture (arm, arm64, mips32, mips64, ppc32, ppc64, riscv64, s390x, i386, x86_64, combined)")
|
||||
set_property(CACHE BOOST_CONTEXT_ARCHITECTURE PROPERTY STRINGS arm arm64 mips32 mips64 ppc32 ppc64 riscv64 s390x i386 x86_64 combined)
|
||||
|
||||
unset(_bits)
|
||||
unset(_default_arch)
|
||||
|
||||
## Assembler type
|
||||
|
||||
if(MSVC)
|
||||
set(_default_asm masm)
|
||||
else()
|
||||
set(_default_asm gas)
|
||||
endif()
|
||||
|
||||
set(BOOST_CONTEXT_ASSEMBLER "${_default_asm}" CACHE STRING "Boost.context assembler (masm, gas, armasm)")
|
||||
set_property(CACHE BOOST_CONTEXT_ASSEMBLER PROPERTY STRINGS masm gas armasm)
|
||||
|
||||
unset(_default_asm)
|
||||
|
||||
## Assembler source suffix
|
||||
|
||||
if(BOOST_CONTEXT_BINARY_FORMAT STREQUAL pe)
|
||||
set(_default_ext .asm)
|
||||
elseif(BOOST_CONTEXT_ASSEMBLER STREQUAL gas)
|
||||
set(_default_ext .S)
|
||||
else()
|
||||
set(_default_ext .asm)
|
||||
endif()
|
||||
|
||||
set(BOOST_CONTEXT_ASM_SUFFIX "${_default_ext}" CACHE STRING "Boost.context assembler source suffix (.asm, .S)")
|
||||
set_property(CACHE BOOST_CONTEXT_ASM_SUFFIX PROPERTY STRINGS .asm .S)
|
||||
|
||||
unset(_default_ext)
|
||||
|
||||
## Implementation
|
||||
|
||||
set(BOOST_CONTEXT_IMPLEMENTATION "fcontext" CACHE STRING "Boost.context implementation (fcontext, ucontext, winfib)")
|
||||
set_property(CACHE BOOST_CONTEXT_IMPLEMENTATION PROPERTY STRINGS fcontext ucontext winfib)
|
||||
|
||||
message(STATUS "Boost.Context: binary format ${BOOST_CONTEXT_BINARY_FORMAT}, ABI ${BOOST_CONTEXT_ABI}, assembler ${BOOST_CONTEXT_ASSEMBLER}, asm suffix ${BOOST_CONTEXT_ASM_SUFFIX}, implementation ${BOOST_CONTEXT_IMPLEMENTATION}")
|
||||
|
||||
# Enable the right assembler
|
||||
|
||||
if(BOOST_CONTEXT_IMPLEMENTATION STREQUAL "fcontext")
|
||||
if(BOOST_CONTEXT_ASSEMBLER STREQUAL gas)
|
||||
enable_language(ASM-ATT)
|
||||
else()
|
||||
enable_language(ASM_MASM)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Choose .asm sources
|
||||
|
||||
set(_asm_suffix ${BOOST_CONTEXT_ARCHITECTURE}_${BOOST_CONTEXT_ABI}_${BOOST_CONTEXT_BINARY_FORMAT}_${BOOST_CONTEXT_ASSEMBLER}${BOOST_CONTEXT_ASM_SUFFIX})
|
||||
|
||||
set(ASM_SOURCES
|
||||
src/asm/make_${_asm_suffix}
|
||||
src/asm/jump_${_asm_suffix}
|
||||
src/asm/ontop_${_asm_suffix}
|
||||
)
|
||||
|
||||
unset(_asm_suffix)
|
||||
|
||||
#
|
||||
|
||||
if(BOOST_CONTEXT_IMPLEMENTATION STREQUAL "fcontext")
|
||||
set(IMPL_SOURCES ${ASM_SOURCES})
|
||||
else()
|
||||
set(IMPL_SOURCES
|
||||
src/continuation.cpp
|
||||
src/fiber.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
set(STACK_TRAITS_SOURCES
|
||||
src/windows/stack_traits.cpp
|
||||
)
|
||||
else()
|
||||
set(STACK_TRAITS_SOURCES
|
||||
src/posix/stack_traits.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(boost_context
|
||||
${IMPL_SOURCES}
|
||||
${STACK_TRAITS_SOURCES}
|
||||
)
|
||||
|
||||
add_library(Boost::context ALIAS boost_context)
|
||||
|
||||
target_include_directories(boost_context PUBLIC include)
|
||||
|
||||
target_link_libraries(boost_context
|
||||
PUBLIC
|
||||
Boost::assert
|
||||
Boost::config
|
||||
Boost::core
|
||||
Boost::pool
|
||||
Boost::predef
|
||||
Boost::smart_ptr
|
||||
PRIVATE
|
||||
Boost::thread
|
||||
)
|
||||
|
||||
target_compile_definitions(boost_context
|
||||
PUBLIC BOOST_CONTEXT_NO_LIB
|
||||
PRIVATE BOOST_CONTEXT_SOURCE
|
||||
)
|
||||
|
||||
if(BUILD_SHARED_LIBS)
|
||||
target_compile_definitions(boost_context PUBLIC BOOST_CONTEXT_DYN_LINK BOOST_CONTEXT_EXPORT=EXPORT)
|
||||
else()
|
||||
target_compile_definitions(boost_context PUBLIC BOOST_CONTEXT_STATIC_LINK BOOST_CONTEXT_EXPORT=)
|
||||
endif()
|
||||
|
||||
if(BOOST_CONTEXT_IMPLEMENTATION STREQUAL "ucontext")
|
||||
target_compile_definitions(boost_context PRIVATE BOOST_USE_UCONTEXT)
|
||||
endif()
|
||||
|
||||
if(BOOST_CONTEXT_IMPLEMENTATION STREQUAL "winfib")
|
||||
target_compile_definitions(boost_context PRIVATE BOOST_USE_WINFIB)
|
||||
endif()
|
||||
|
||||
if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
|
||||
|
||||
add_subdirectory(test)
|
||||
|
||||
endif()
|
||||
Reference in New Issue
Block a user