]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/stacktrace/CMakeLists.txt
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / stacktrace / CMakeLists.txt
1 # Copyright 2020, 2021 Peter Dimov
2 # Distributed under the Boost Software License, Version 1.0.
3 # https://www.boost.org/LICENSE_1_0.txt
4
5 cmake_minimum_required(VERSION 3.5...3.16)
6
7 project(boost_stacktrace VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
8
9 function(stacktrace_add_library suffix opt libs defs)
10
11 if(NOT opt)
12 return()
13 endif()
14
15 add_library(boost_stacktrace_${suffix}
16 src/${suffix}.cpp
17 )
18
19 add_library(Boost::stacktrace_${suffix} ALIAS boost_stacktrace_${suffix})
20
21 target_include_directories(boost_stacktrace_${suffix} PUBLIC include)
22
23 target_link_libraries(boost_stacktrace_${suffix}
24 PUBLIC
25 Boost::array
26 Boost::config
27 Boost::container_hash
28 Boost::core
29 Boost::predef
30 Boost::static_assert
31 Boost::type_traits
32 Boost::winapi
33 PRIVATE
34 ${libs}
35 )
36
37 target_compile_definitions(boost_stacktrace_${suffix}
38 PUBLIC BOOST_STACKTRACE_NO_LIB
39 PRIVATE BOOST_STACKTRACE_SOURCE ${defs}
40 )
41
42 if(BUILD_SHARED_LIBS)
43 target_compile_definitions(boost_stacktrace_${suffix} PUBLIC BOOST_STACKTRACE_DYN_LINK)
44 else()
45 target_compile_definitions(boost_stacktrace_${suffix} PUBLIC BOOST_STACKTRACE_STATIC_LINK)
46 endif()
47
48 if(BOOST_SUPERPROJECT_VERSION AND NOT CMAKE_VERSION VERSION_LESS 3.13)
49 boost_install(TARGETS boost_stacktrace_${suffix} VERSION ${BOOST_SUPERPROJECT_VERSION} HEADER_DIRECTORY include)
50 endif()
51
52 endfunction()
53
54 include(CheckCXXSourceCompiles)
55
56 function(stacktrace_check var source incs libs defs)
57
58 set(CMAKE_REQUIRED_INCLUDES "${incs}")
59 list(APPEND CMAKE_REQUIRED_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/build")
60 set(CMAKE_REQUIRED_LIBRARIES "${libs}")
61 set(CMAKE_REQUIRED_DEFINITIONS "${defs}")
62 check_cxx_source_compiles("#include \"${source}\"" ${var})
63 set(${var} ${${var}} PARENT_SCOPE)
64
65 endfunction()
66
67 stacktrace_check(BOOST_STACKTRACE_HAS_BACKTRACE has_backtrace.cpp "" "backtrace" "")
68
69 set(_default_addr2line ON)
70 if(WIN32 AND NOT CMAKE_CXX_PLATFORM_ID MATCHES "Cygwin")
71 set(_default_addr2line OFF)
72 endif()
73
74 stacktrace_check(BOOST_STACKTRACE_HAS_WINDBG has_windbg.cpp "" "dbgeng;ole32" "")
75 stacktrace_check(BOOST_STACKTRACE_HAS_WINDBG_CACHED has_windbg_cached.cpp "${CMAKE_CURRENT_SOURCE_DIR}/../config/include" "dbgeng;ole32" "")
76
77 option(BOOST_STACKTRACE_ENABLE_NOOP "Boost.Stacktrace: build boost_stacktrace_noop" ON)
78 option(BOOST_STACKTRACE_ENABLE_BACKTRACE "Boost.Stacktrace: build boost_stacktrace_backtrace" ${BOOST_STACKTRACE_HAS_BACKTRACE})
79 option(BOOST_STACKTRACE_ENABLE_ADDR2LINE "Boost.Stacktrace: build boost_stacktrace_addr2line" ${_default_addr2line})
80 option(BOOST_STACKTRACE_ENABLE_BASIC "Boost.Stacktrace: build boost_stacktrace_basic" ON)
81 option(BOOST_STACKTRACE_ENABLE_WINDBG "Boost.Stacktrace: build boost_stacktrace_windbg" ${BOOST_STACKTRACE_HAS_WINDBG})
82 option(BOOST_STACKTRACE_ENABLE_WINDBG_CACHED "Boost.Stacktrace: build boost_stacktrace_windbg_cached" ${BOOST_STACKTRACE_HAS_WINDBG_CACHED})
83
84 unset(_default_addr2line)
85
86 message(STATUS "Boost.Stacktrace: "
87 "noop ${BOOST_STACKTRACE_ENABLE_NOOP}, "
88 "backtrace ${BOOST_STACKTRACE_ENABLE_BACKTRACE}, "
89 "addr2line ${BOOST_STACKTRACE_ENABLE_ADDR2LINE}, "
90 "basic ${BOOST_STACKTRACE_ENABLE_BASIC}, "
91 "windbg ${BOOST_STACKTRACE_ENABLE_WINDBG}, "
92 "windbg_cached ${BOOST_STACKTRACE_ENABLE_WINDBG_CACHED}"
93 )
94
95 stacktrace_add_library(noop ${BOOST_STACKTRACE_ENABLE_NOOP} "" "")
96 stacktrace_add_library(backtrace ${BOOST_STACKTRACE_ENABLE_BACKTRACE} "backtrace" "")
97 stacktrace_add_library(addr2line ${BOOST_STACKTRACE_ENABLE_ADDR2LINE} "" "")
98 stacktrace_add_library(basic ${BOOST_STACKTRACE_ENABLE_BASIC} "" "")
99 stacktrace_add_library(windbg ${BOOST_STACKTRACE_ENABLE_WINDBG} "dbgeng;ole32" "_GNU_SOURCE=1")
100 stacktrace_add_library(windbg_cached ${BOOST_STACKTRACE_ENABLE_WINDBG_CACHED} "dbgeng;ole32" "_GNU_SOURCE=1")
101
102 if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
103
104 add_subdirectory(test)
105
106 endif()