Rework libbacktrace locating.

This commit is contained in:
Colin LeMahieu 2024-12-10 18:53:58 +00:00 committed by Piotr Wójcik
commit 3a0dca987b

View file

@ -388,6 +388,24 @@ endif()
include_directories(${CMAKE_SOURCE_DIR})
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules")
# Find libbacktrace first (Unix/Linux only)
if(NOT WIN32)
find_path(BACKTRACE_INCLUDE_DIR
NAMES backtrace.h
PATHS
/usr/local/include
/usr/include
)
if(BACKTRACE_INCLUDE_DIR)
set(BACKTRACE_FOUND TRUE)
# Most systems just need -lbacktrace
set(BACKTRACE_LIBRARIES backtrace)
message(STATUS "Found backtrace.h at ${BACKTRACE_INCLUDE_DIR}")
endif()
endif()
# Then set up boost modules
set(Boost_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/submodules/boost/libs/config/include)
set(BOOST_MODULE_LIBS
algorithm
@ -483,18 +501,22 @@ foreach(lib IN LISTS BOOST_MODULE_LIBS)
add_subdirectory(submodules/boost/libs/${lib} EXCLUDE_FROM_ALL)
endforeach()
include_directories(${BOOST_LIBRARY_INCLUDES})
add_library(Boost::stacktrace ALIAS boost_stacktrace_basic)
add_definitions(-DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED)
# Configure stacktrace with appropriate backend
if(WIN32)
# Windows-specific configuration
target_link_libraries(boost_stacktrace_basic PRIVATE dbghelp)
message(STATUS "Windows platform - Using WinDbg stacktrace")
add_definitions(-DBOOST_STACKTRACE_USE_WINDBG)
add_library(Boost::stacktrace ALIAS boost_stacktrace_windbg)
target_link_libraries(boost_stacktrace_windbg PRIVATE dbghelp)
elseif(BACKTRACE_FOUND)
message(STATUS "Found libbacktrace - enabling Boost stacktrace backtrace support")
add_definitions(-DBOOST_STACKTRACE_USE_BACKTRACE)
add_library(Boost::stacktrace ALIAS boost_stacktrace_backtrace)
target_link_libraries(boost_stacktrace_backtrace PRIVATE ${BACKTRACE_LIBRARIES})
else()
# Unix-like systems (Linux, macOS)
target_link_libraries(boost_stacktrace_basic PRIVATE dl)
# Add -rdynamic linker flag for better symbol resolution
target_link_options(boost_stacktrace_basic PRIVATE -rdynamic)
message(STATUS "Unix platform without libbacktrace - Using basic backtrace")
add_definitions(-DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED)
add_library(Boost::stacktrace ALIAS boost_stacktrace_basic)
endif()
# Workaround for missing reference errata in the boost property_tree module