pineapple-src/externals/vcpkg/buildtrees/boost-atomic/src/ost-1.79.0-8319493156.clean/CMakeLists.txt
2022-11-05 15:35:56 +01:00

137 lines
5.2 KiB
CMake
Executable file

# Copyright 2018 Mike Dev
# Copyright 2019 Peter Dimov
# Copyright 2020-2022 Andrey Semashev
# Distributed under the Boost Software License, Version 1.0.
# See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
cmake_minimum_required(VERSION 3.5...3.16)
project(boost_atomic VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
include(CheckCXXSourceCompiles)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
# Note: We can't use the Boost::library targets in the configure checks as they may not yet be included
# by the superproject when this CMakeLists.txt is included. We also don't want to hardcode include paths
# of the needed libraries and their dependencies, recursively, as this is too fragile and requires maintenance.
# Instead, we collect include paths of all libraries and use them in the configure checks. This works faster
# if there is a unified Boost include tree in the filesystem (i.e. if `b2 headers` was run or we're in the
# official monolithic Boost distribution tree).
include(cmake/BoostLibraryIncludes.cmake)
set(boost_atomic_sources src/lock_pool.cpp)
set(CMAKE_REQUIRED_INCLUDES ${BOOST_LIBRARY_INCLUDES})
check_cxx_source_compiles("#include <${CMAKE_CURRENT_SOURCE_DIR}/../config/checks/architecture/x86.cpp>\nint main() {}" BOOST_ATOMIC_TARGET_X86)
unset(CMAKE_REQUIRED_INCLUDES)
if (BOOST_ATOMIC_TARGET_X86)
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
if (CMAKE_SIZEOF_VOID_P EQUAL 4)
set(boost_atomic_sse2_cflags "/arch:SSE2")
set(boost_atomic_sse41_cflags "/arch:SSE2")
endif()
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
if (WIN32)
set(boost_atomic_sse2_cflags "/QxSSE2")
set(boost_atomic_sse41_cflags "/QxSSE4.1")
else()
set(boost_atomic_sse2_cflags "-xSSE2")
set(boost_atomic_sse41_cflags "-xSSE4.1")
endif()
else()
set(boost_atomic_sse2_cflags "-msse -msse2")
set(boost_atomic_sse41_cflags "-msse -msse2 -msse3 -mssse3 -msse4.1")
endif()
set(CMAKE_REQUIRED_INCLUDES ${BOOST_LIBRARY_INCLUDES})
set(CMAKE_REQUIRED_FLAGS "${boost_atomic_sse2_cflags}")
check_cxx_source_compiles("#include <${CMAKE_CURRENT_SOURCE_DIR}/config/has_sse2.cpp>" BOOST_ATOMIC_COMPILER_HAS_SSE2)
unset(CMAKE_REQUIRED_FLAGS)
unset(CMAKE_REQUIRED_INCLUDES)
set(CMAKE_REQUIRED_INCLUDES ${BOOST_LIBRARY_INCLUDES})
set(CMAKE_REQUIRED_FLAGS "${boost_atomic_sse41_cflags}")
check_cxx_source_compiles("#include <${CMAKE_CURRENT_SOURCE_DIR}/config/has_sse41.cpp>" BOOST_ATOMIC_COMPILER_HAS_SSE41)
unset(CMAKE_REQUIRED_FLAGS)
unset(CMAKE_REQUIRED_INCLUDES)
if (BOOST_ATOMIC_COMPILER_HAS_SSE2)
set(boost_atomic_sources_sse2 src/find_address_sse2.cpp)
set_source_files_properties(${boost_atomic_sources_sse2} PROPERTIES COMPILE_FLAGS "${boost_atomic_sse2_cflags}")
set(boost_atomic_sources ${boost_atomic_sources} ${boost_atomic_sources_sse2})
endif()
if (BOOST_ATOMIC_COMPILER_HAS_SSE41)
set(boost_atomic_sources_sse41 src/find_address_sse41.cpp)
set_source_files_properties(${boost_atomic_sources_sse41} PROPERTIES COMPILE_FLAGS "${boost_atomic_sse41_cflags}")
set(boost_atomic_sources ${boost_atomic_sources} ${boost_atomic_sources_sse41})
endif()
endif()
if (WIN32)
set(boost_atomic_sources ${boost_atomic_sources} src/wait_on_address.cpp)
endif()
if (WIN32)
# Note: We can't use the Boost::library targets here as they may not yet be included by the superproject when this CMakeLists.txt is included.
set(CMAKE_REQUIRED_INCLUDES ${BOOST_LIBRARY_INCLUDES})
set(CMAKE_REQUIRED_LIBRARIES synchronization)
check_cxx_source_compiles("#include <${CMAKE_CURRENT_SOURCE_DIR}/config/has_synchronization_lib.cpp>" BOOST_ATOMIC_HAS_SYNCHRONIZATION_LIB)
unset(CMAKE_REQUIRED_LIBRARIES)
unset(CMAKE_REQUIRED_INCLUDES)
endif()
add_library(boost_atomic ${boost_atomic_sources})
add_library(Boost::atomic ALIAS boost_atomic)
target_include_directories(boost_atomic PUBLIC include)
target_include_directories(boost_atomic PRIVATE src)
target_link_libraries(boost_atomic
PUBLIC
Boost::assert
Boost::config
Boost::static_assert
Boost::type_traits
PRIVATE
Boost::align
Boost::predef
Boost::preprocessor
Threads::Threads
)
if (WIN32)
target_link_libraries(boost_atomic
PUBLIC
Boost::winapi
)
if (BOOST_ATOMIC_HAS_SYNCHRONIZATION_LIB)
target_link_libraries(boost_atomic PUBLIC synchronization)
else()
target_compile_definitions(boost_atomic PUBLIC BOOST_ATOMIC_NO_SYNCHRONIZATION_LIB)
endif()
endif()
target_compile_definitions(boost_atomic
PUBLIC
BOOST_ATOMIC_NO_LIB
PRIVATE
BOOST_ATOMIC_SOURCE
)
if (BUILD_SHARED_LIBS)
target_compile_definitions(boost_atomic PUBLIC BOOST_ATOMIC_DYN_LINK)
else()
target_compile_definitions(boost_atomic PUBLIC BOOST_ATOMIC_STATIC_LINK)
endif()
if (BOOST_ATOMIC_COMPILER_HAS_SSE2)
target_compile_definitions(boost_atomic PRIVATE BOOST_ATOMIC_USE_SSE2)
endif()
if (BOOST_ATOMIC_COMPILER_HAS_SSE41)
target_compile_definitions(boost_atomic PRIVATE BOOST_ATOMIC_USE_SSE41)
endif()