mirror of
https://github.com/QuasarApp/backward-cpp.git
synced 2025-04-28 19:34:32 +00:00
Improve CMake build system, allow easy integration
Make backward easier to use for CMake users, enabling easy feature detection and integration. We now detect presence of libdw, libbfd and libunwind directly in the script. The macro add_backward adds needed libraries, definitions and the include directory to a target. The pseudo-library enable_backward enables automatic backward processing for common failures to a target. If BACKWARD_ENABLE_ONLY_IN_DEBUG is set to true, automatic backward processing is only added when the build type is Debug or RelWithDebInfo. To integrate backward in an existing CMake project: add_subdirectory(/path/to/backward-cpp) add_executable(mytarget example.cpp ${backward_ENABLE}) add_backward(mytarget) BACKWARD_DEFINITIONS has been renamed to backward_DEFINITIONS to have a naming convention for public variables similiar to the find modules.
This commit is contained in:
parent
3295e060c8
commit
32d64ddbc0
@ -45,17 +45,39 @@ enable_testing()
|
||||
# CONFIGS
|
||||
###############################################################################
|
||||
|
||||
set(STACK_DETAILS_BACKTRACE_SYMBOL TRUE CACHE BOOL "Use backtrace symbol")
|
||||
set(STACK_DETAILS_BACKTRACE_SYMBOL FALSE CACHE BOOL "Use backtrace symbol")
|
||||
set(STACK_DETAILS_DW FALSE CACHE BOOL "Use libdw")
|
||||
set(STACK_DETAILS_BFD FALSE CACHE BOOL "Use libbfd")
|
||||
|
||||
set(STACK_WALKING_UNWIND TRUE CACHE BOOL "Use unwind for stack walking")
|
||||
set(STACK_WALKING_BACKTRACE FALSE CACHE BOOL "Use backtrace for stack walking")
|
||||
|
||||
find_library(BACKWARD_LIBDW_PATH dw)
|
||||
find_library(BACKWARD_LIBBFD_PATH bfd)
|
||||
if(NOT BACKWARD_LIBDW_PATH STREQUAL "BACKWARD_LIBDW_PATH-NOTFOUND")
|
||||
set(STACK_DETAILS_DW TRUE)
|
||||
list(APPEND backward_LIBRARIES ${BACKWARD_LIBDW_PATH})
|
||||
elseif(NOT BACKWARD_LIBBFD_PATH STREQUAL "BACKWARD_LIBBFD_PATH-NOTFOUND")
|
||||
set(STACK_DETAILS_BFD TRUE)
|
||||
list(APPEND backward_LIBRARIES ${BACKWARD_LIBBFD_PATH})
|
||||
else()
|
||||
set(STACK_DETAILS_BACKTRACE_SYMBOL TRUE)
|
||||
message(INFO "Could not find advanced symbol information library (libdw/libbfd), falling back to backtrace")
|
||||
endif()
|
||||
|
||||
find_library(BACKWARD_LIBUNWIND_PATH unwind)
|
||||
if(NOT BACKWARD_LIBUNWIND_PATH STREQUAL "BACKWARD_LIBUNWIND_PATH-NOTFOUND")
|
||||
set(STACK_WALKING_UNWIND TRUE)
|
||||
list(APPEND backward_LIBRARIES ${BACKWARD_LIBUNWIND_PATH})
|
||||
else()
|
||||
set(STACK_WALKING_BACKTRACE TRUE)
|
||||
message(INFO "Could not find stack backtrace library (libunwind), falling back to backtrace")
|
||||
endif()
|
||||
|
||||
macro(map_definitions var_prefix define_prefix)
|
||||
foreach(def ${ARGV})
|
||||
if (${${var_prefix}${def}})
|
||||
LIST(APPEND BACKWARD_DEFINITIONS "${define_prefix}${def}=1")
|
||||
LIST(APPEND backward_DEFINITIONS "${define_prefix}${def}=1")
|
||||
endif()
|
||||
endforeach()
|
||||
endmacro()
|
||||
@ -67,6 +89,25 @@ foreach(def ${BACKWARD_DEFINITIONS})
|
||||
message(STATUS "${def}")
|
||||
endforeach()
|
||||
|
||||
add_library(enable_backward OBJECT backward.cpp)
|
||||
target_compile_definitions(enable_backward PRIVATE ${backward_DEFINITIONS})
|
||||
|
||||
if(BACKWARD_ONLY_IF_DEBUG)
|
||||
set(backward_ENABLE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:$<TARGET_OBJECTS:enable_backward> CACHE STRING
|
||||
"object to enable automatic backward processing (only in Debug/RelWithDebInfo)")
|
||||
else()
|
||||
set(backward_ENABLE $<TARGET_OBJECTS:enable_backward> CACHE STRING
|
||||
"object to enable automatic backward processing")
|
||||
endif()
|
||||
set(backward_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE STRING "backward include directory")
|
||||
set(backward_DEFINITIONS ${backward_DEFINITIONS} CACHE STRING "backward feature definitions")
|
||||
set(backward_LIBRARIES ${backward_LIBRARIES} CACHE STRING "backward libraries")
|
||||
macro(add_backward target)
|
||||
target_include_directories(${target} PRIVATE ${backward_INCLUDE_DIR})
|
||||
set_property(TARGET ${target} APPEND PROPERTY COMPILE_DEFINITIONS ${backward_DEFINITIONS})
|
||||
set_property(TARGET ${target} APPEND PROPERTY LINK_LIBRARIES ${backward_LIBRARIES})
|
||||
endmacro()
|
||||
|
||||
###############################################################################
|
||||
# TESTS
|
||||
###############################################################################
|
||||
|
Loading…
x
Reference in New Issue
Block a user