mirror of
https://github.com/QuasarApp/backward-cpp.git
synced 2025-05-20 13:29:39 +00:00
commit
2f0397daa4
@ -44,39 +44,39 @@ enable_testing()
|
||||
# CONFIGS
|
||||
###############################################################################
|
||||
|
||||
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_DETAILS_BACKTRACE_SYMBOL FALSE)
|
||||
set(STACK_DETAILS_DW FALSE)
|
||||
set(STACK_DETAILS_BFD FALSE)
|
||||
|
||||
set(STACK_WALKING_UNWIND TRUE CACHE BOOL "Use unwind for stack walking")
|
||||
set(STACK_WALKING_BACKTRACE FALSE CACHE BOOL "Use backtrace for stack walking")
|
||||
set(STACK_WALKING_UNWIND FALSE)
|
||||
set(STACK_WALKING_BACKTRACE FALSE)
|
||||
|
||||
find_library(BACKWARD_LIBDW_PATH dw)
|
||||
find_library(BACKWARD_LIBBFD_PATH bfd)
|
||||
if(NOT BACKWARD_LIBDW_PATH STREQUAL "BACKWARD_LIBDW_PATH-NOTFOUND")
|
||||
if(NOT (BACKWARD_LIBDW_PATH STREQUAL "BACKWARD_LIBDW_PATH-NOTFOUND" OR BACKWARD_LIBDW_PATH STREQUAL ""))
|
||||
set(STACK_DETAILS_DW TRUE)
|
||||
list(APPEND backward_LIBRARIES ${BACKWARD_LIBDW_PATH})
|
||||
elseif(NOT BACKWARD_LIBBFD_PATH STREQUAL "BACKWARD_LIBBFD_PATH-NOTFOUND")
|
||||
elseif(NOT (BACKWARD_LIBBFD_PATH STREQUAL "BACKWARD_LIBBFD_PATH-NOTFOUND" OR BACKWARD_LIBBFD_PATH STREQUAL ""))
|
||||
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")
|
||||
message(WARNING "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")
|
||||
if(NOT (BACKWARD_LIBUNWIND_PATH STREQUAL "BACKWARD_LIBUNWIND_PATH-NOTFOUND" OR BACKWARD_LIBUNWIND_PATH STREQUAL ""))
|
||||
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")
|
||||
message(WARNING "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()
|
||||
@ -84,25 +84,26 @@ endmacro()
|
||||
map_definitions("STACK_DETAILS_" "BACKWARD_HAS_" BACKTRACE_SYMBOL DW BFD)
|
||||
map_definitions("STACK_WALKING_" "BACKWARD_HAS_" UNWIND BACKTRACE)
|
||||
|
||||
foreach(def ${backward_DEFINITIONS})
|
||||
foreach(def ${BACKWARD_DEFINITIONS})
|
||||
message(STATUS "${def}")
|
||||
endforeach()
|
||||
|
||||
add_library(enable_backward OBJECT backward.cpp)
|
||||
target_compile_definitions(enable_backward PRIVATE ${backward_DEFINITIONS})
|
||||
|
||||
set(backward_ENABLE $<TARGET_OBJECTS:enable_backward> CACHE STRING
|
||||
target_compile_definitions(enable_backward PRIVATE ${BACKWARD_DEFINITIONS})
|
||||
set(BACKWARD_ENABLE $<TARGET_OBJECTS:enable_backward> CACHE STRING
|
||||
"object to enable automatic backward processing")
|
||||
|
||||
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")
|
||||
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})
|
||||
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()
|
||||
|
||||
mark_as_advanced(BACKWARD_INCLUDE_DIR BACKWARD_DEFINITIONS BACKWARD_LIBRARIES)
|
||||
|
||||
###############################################################################
|
||||
# TESTS
|
||||
###############################################################################
|
||||
|
14
README.md
14
README.md
@ -41,6 +41,20 @@ doing at your convenience.
|
||||
|
||||
##Configuration & Dependencies
|
||||
|
||||
### Integration with CMake
|
||||
|
||||
If you are using CMake and want to use its configuration abilities to save
|
||||
you the trouble, you can easily integrate Backward:
|
||||
```
|
||||
add_subdirectory(/path/to/backward-cpp)
|
||||
|
||||
# This will add backward.cpp to your target
|
||||
add_executable(myproject mysource.cpp ${backward_ENABLE})
|
||||
|
||||
# This will add libraries, definitions and include directories needed by backward
|
||||
add_backward(myproject)
|
||||
```
|
||||
|
||||
### Compile with debug info
|
||||
|
||||
You need to compile your project with generation of debug symbols enabled,
|
||||
|
Loading…
x
Reference in New Issue
Block a user