Warning, /acts/Plugins/FpeMonitoring/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 set(_fpe_platform_source src/FpeMonitorPlatformUnsupported.cpp)
0002 string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" _acts_fpe_arch)
0003
0004 if(APPLE)
0005 if(_acts_fpe_arch MATCHES "^(x86_64|amd64)$")
0006 set(_fpe_platform_source src/FpeMonitorPlatformDarwinX86_64.cpp)
0007 elseif(_acts_fpe_arch MATCHES "^(arm64|aarch64)$")
0008 set(_fpe_platform_source src/FpeMonitorPlatformDarwinArm64.cpp)
0009 endif()
0010 elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
0011 if(_acts_fpe_arch MATCHES "^(x86_64|amd64)$")
0012 set(_fpe_platform_source src/FpeMonitorPlatformLinuxX86_64.cpp)
0013 endif()
0014 endif()
0015
0016 acts_add_library(
0017 PluginFpeMonitoring
0018 src/FpeMonitor.cpp
0019 ${_fpe_platform_source}
0020 ACTS_INCLUDE_FOLDER include/ActsPlugins
0021 )
0022
0023 target_include_directories(
0024 ActsPluginFpeMonitoring
0025 PUBLIC
0026 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>
0027 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
0028 )
0029
0030 target_link_libraries(ActsPluginFpeMonitoring PUBLIC Acts::Core)
0031
0032 acts_compile_headers(PluginFpeMonitoring GLOB include/**/*.hpp)
0033
0034 # Fpe flags
0035 # With the libbacktrace backend, Boost.Stacktrace keeps one libbacktrace state
0036 # per thread by default. libbacktrace never frees a state, and each one loads
0037 # its own copy of the debug info on first use, so every thread that symbolizes
0038 # a stack trace permanently costs as much memory as the debug info of all
0039 # loaded libraries. Share a single state instead; FpeMonitor serializes access
0040 # to it. This has no effect with the other backends.
0041 set(_fpe_options "-DBOOST_STACKTRACE_BACKTRACE_FORCE_STATIC")
0042
0043 # In case we're going to run clang-tidy, let's unconditionally turn off backtrace
0044 if(ACTS_RUN_CLANG_TIDY)
0045 list(APPEND _fpe_options "-DBOOST_STACKTRACE_USE_NOOP=1")
0046 else()
0047 include(CheckCXXSourceCompiles)
0048
0049 find_library(dl_LIBRARY dl)
0050 find_package(Backtrace)
0051 find_program(addr2line_EXECUTABLE addr2line)
0052 if(APPLE)
0053 list(APPEND _fpe_options -D_GNU_SOURCE)
0054 else()
0055 if(dl_LIBRARY)
0056 target_link_libraries(ActsPluginFpeMonitoring PUBLIC ${dl_LIBRARY})
0057
0058 set(_backtrace_setup_complete FALSE)
0059
0060 find_path(
0061 boost_stacktrace_include
0062 NAMES "boost/stacktrace.hpp"
0063 REQUIRED
0064 PATHS ${Boost_INCLUDE_DIRS}
0065 )
0066 if(Backtrace_FOUND)
0067 # check if we need to link against bracktrace or not
0068 set(backtrace_include "")
0069
0070 file(
0071 WRITE
0072 "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/backtrace.cpp"
0073 "
0074 #include <boost/stacktrace.hpp>
0075 int main() {}
0076 "
0077 )
0078
0079 message(
0080 CHECK_START
0081 "Does backtrace work with the default include"
0082 )
0083
0084 try_compile(
0085 _backtrace_default_header
0086 "${CMAKE_BINARY_DIR}"
0087 "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/backtrace.cpp"
0088 LINK_LIBRARIES ${dl_LIBRARY}
0089 CMAKE_FLAGS
0090 "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include}"
0091 COMPILE_DEFINITIONS -DBOOST_STACKTRACE_USE_BACKTRACE
0092 OUTPUT_VARIABLE __OUTPUT
0093 )
0094
0095 if(_backtrace_default_header)
0096 message(CHECK_PASS "yes")
0097 else()
0098 message(CHECK_FAIL "no")
0099
0100 file(GLOB hints "/usr/lib/gcc/*/*/include")
0101 find_file(
0102 backtrace_header
0103 NAMES "backtrace.h"
0104 HINTS ${hints}
0105 )
0106
0107 if(${backtrace_header} STREQUAL "backtrace_header-NOTFOUND")
0108 message(STATUS "Could not find backtrace header file")
0109 else()
0110 set(backtrace_include
0111 "-DBOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE=\"${backtrace_header}\""
0112 )
0113
0114 file(
0115 WRITE
0116 "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/backtrace.cpp"
0117 "
0118 #include <boost/stacktrace.hpp>
0119 int main() {}
0120 "
0121 )
0122
0123 message(
0124 CHECK_START
0125 "Does backtrace work with explicit include"
0126 )
0127
0128 try_compile(
0129 _backtrace_explicit_header
0130 "${CMAKE_BINARY_DIR}"
0131 "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/backtrace.cpp"
0132 LINK_LIBRARIES ${dl_LIBRARY}
0133 CMAKE_FLAGS
0134 "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include}"
0135 COMPILE_DEFINITIONS
0136 -DBOOST_STACKTRACE_USE_BACKTRACE
0137 ${backtrace_include}
0138 OUTPUT_VARIABLE __OUTPUT
0139 )
0140
0141 if(_backtrace_explicit_header)
0142 message(CHECK_PASS "yes")
0143 list(APPEND _fpe_options "${backtrace_include}")
0144 else()
0145 message(CHECK_FAIL "no")
0146 endif()
0147 endif()
0148 endif()
0149
0150 file(
0151 WRITE
0152 "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/backtrace.cpp"
0153 "#include <boost/stacktrace.hpp>\n"
0154 "#include <iostream>\n"
0155 "int main() { std::cout << boost::stacktrace::stacktrace(); }\n"
0156 )
0157
0158 message(CHECK_START "Does backtrace work without linker flag")
0159 try_compile(
0160 _backtrace_nolink
0161 "${CMAKE_BINARY_DIR}"
0162 "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/backtrace.cpp"
0163 LINK_LIBRARIES ${dl_LIBRARY}
0164 CMAKE_FLAGS
0165 "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include}"
0166 COMPILE_DEFINITIONS
0167 -DBOOST_STACKTRACE_USE_BACKTRACE
0168 ${backtrace_include}
0169 OUTPUT_VARIABLE __OUTPUT
0170 )
0171
0172 if(_backtrace_nolink)
0173 message(CHECK_PASS "yes")
0174 set(_backtrace_setup_complete TRUE)
0175 else()
0176 message(CHECK_FAIL "no")
0177
0178 file(
0179 WRITE
0180 "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/backtrace.cpp"
0181 "#include <boost/stacktrace.hpp>\n"
0182 "#include <iostream>\n"
0183 "int main() { std::cout << boost::stacktrace::stacktrace(); }\n"
0184 )
0185
0186 message(CHECK_START "Does backtrace work with linker flag")
0187 try_compile(
0188 _backtrace_link
0189 "${CMAKE_BINARY_DIR}"
0190 "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/backtrace.cpp"
0191 LINK_LIBRARIES backtrace ${dl_LIBRARY}
0192 CMAKE_FLAGS
0193 "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include}"
0194 COMPILE_DEFINITIONS
0195 -DBOOST_STACKTRACE_USE_BACKTRACE
0196 ${backtrace_include}
0197 OUTPUT_VARIABLE __OUTPUT
0198 )
0199
0200 if(_backtrace_link)
0201 message(CHECK_PASS "yes")
0202 list(
0203 APPEND _fpe_options
0204 -DBOOST_STACKTRACE_USE_BACKTRACE
0205 )
0206 target_link_libraries(
0207 ActsPluginFpeMonitoring
0208 PUBLIC backtrace
0209 )
0210
0211 set(_backtrace_setup_complete TRUE)
0212 else()
0213 message(CHECK_FAIL "no")
0214 endif()
0215 endif()
0216 endif()
0217 endif()
0218
0219 if(NOT _backtrace_setup_complete)
0220 if(NOT ${dl_LIBRARY} STREQUAL "dl_LIBRARY-NOTFOUND")
0221 message(STATUS "ld lib available: use boost basic fallback")
0222 else()
0223 message(STATUS "Unable to set up stacktraces: use noop")
0224 list(APPEND _fpe_options -DBOOST_STACKTRACE_USE_NOOP)
0225 endif()
0226 endif()
0227 endif()
0228 endif()
0229
0230 target_compile_options(ActsPluginFpeMonitoring PUBLIC "${_fpe_options}")