Skip to content

Commit 27d0e6d

Browse files
github-actions[bot]skyzh
authored andcommitted
vendor backward-cpp
1 parent ac25e57 commit 27d0e6d

24 files changed

+6356
-0
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
---
2+
BasedOnStyle: LLVM

third_party/backward-cpp/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
build*/
2+
*.pyc

third_party/backward-cpp/.travis.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
language: cpp
2+
compiler:
3+
- gcc
4+
- clang
5+
6+
addons:
7+
apt:
8+
packages:
9+
- valgrind
10+
11+
install:
12+
- DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
13+
- mkdir ${DEPS_DIR} && cd ${DEPS_DIR}
14+
- CMAKE_URL="http://www.cmake.org/files/v3.3/cmake-3.3.2-Linux-x86_64.tar.gz"
15+
- mkdir cmake && travis_retry wget --no-check-certificate --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C cmake
16+
- export PATH=${DEPS_DIR}/cmake/bin:${PATH}
17+
- pip install --user conan && export PATH=$PATH:$HOME/.local/bin
18+
- cd ${TRAVIS_BUILD_DIR}
19+
- mkdir build && cd build
20+
- cmake .. -DBACKWARD_TESTS=ON
21+
- cmake --build .
22+
23+
script:
24+
- valgrind ctest .. --verbose
25+
- cd ${TRAVIS_BUILD_DIR} && conan create . Manu343726/testing --build=outdated
Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
#
2+
# BackwardMacros.cmake
3+
# Copyright 2013 Google Inc. All Rights Reserved.
4+
#
5+
# Permission is hereby granted, free of charge, to any person obtaining a copy
6+
# of this software and associated documentation files (the "Software"), to deal
7+
# in the Software without restriction, including without limitation the rights
8+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
# copies of the Software, and to permit persons to whom the Software is
10+
# furnished to do so, subject to the following conditions:
11+
#
12+
# The above copyright notice and this permission notice shall be included in
13+
# all copies or substantial portions of the Software.
14+
#
15+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
# SOFTWARE.
22+
23+
###############################################################################
24+
# OPTIONS
25+
###############################################################################
26+
27+
set(STACK_WALKING_UNWIND TRUE CACHE BOOL
28+
"Use compiler's unwind API")
29+
set(STACK_WALKING_BACKTRACE FALSE CACHE BOOL
30+
"Use backtrace from (e)glibc for stack walking")
31+
set(STACK_WALKING_LIBUNWIND FALSE CACHE BOOL
32+
"Use libunwind for stack walking")
33+
34+
set(STACK_DETAILS_AUTO_DETECT TRUE CACHE BOOL
35+
"Auto detect backward's stack details dependencies")
36+
37+
set(STACK_DETAILS_BACKTRACE_SYMBOL FALSE CACHE BOOL
38+
"Use backtrace from (e)glibc for symbols resolution")
39+
set(STACK_DETAILS_DW FALSE CACHE BOOL
40+
"Use libdw to read debug info")
41+
set(STACK_DETAILS_BFD FALSE CACHE BOOL
42+
"Use libbfd to read debug info")
43+
set(STACK_DETAILS_DWARF FALSE CACHE BOOL
44+
"Use libdwarf/libelf to read debug info")
45+
46+
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR AND NOT DEFINED BACKWARD_TESTS)
47+
# If this is a top level CMake project, we most lixely want the tests
48+
set(BACKWARD_TESTS ON CACHE BOOL "Enable tests")
49+
else()
50+
set(BACKWARD_TESTS OFF CACHE BOOL "Enable tests")
51+
endif()
52+
###############################################################################
53+
# CONFIGS
54+
###############################################################################
55+
include(FindPackageHandleStandardArgs)
56+
57+
if (STACK_WALKING_LIBUNWIND)
58+
# libunwind works on the macOS without having to add special include
59+
# paths or libraries
60+
if (NOT APPLE)
61+
find_path(LIBUNWIND_INCLUDE_DIR NAMES "libunwind.h")
62+
find_library(LIBUNWIND_LIBRARY unwind)
63+
64+
if (LIBUNWIND_LIBRARY)
65+
include(CheckSymbolExists)
66+
check_symbol_exists(UNW_INIT_SIGNAL_FRAME libunwind.h HAVE_UNW_INIT_SIGNAL_FRAME)
67+
if (NOT HAVE_UNW_INIT_SIGNAL_FRAME)
68+
message(STATUS "libunwind does not support unwinding from signal handler frames")
69+
endif()
70+
endif()
71+
72+
set(LIBUNWIND_INCLUDE_DIRS ${LIBUNWIND_INCLUDE_DIR})
73+
set(LIBDWARF_LIBRARIES ${LIBUNWIND_LIBRARY})
74+
find_package_handle_standard_args(libunwind DEFAULT_MSG
75+
LIBUNWIND_LIBRARY LIBUNWIND_INCLUDE_DIR)
76+
mark_as_advanced(LIBUNWIND_INCLUDE_DIR LIBUNWIND_LIBRARY)
77+
list(APPEND _BACKWARD_LIBRARIES ${LIBUNWIND_LIBRARY})
78+
endif()
79+
80+
# Disable other unwinders if libunwind is found
81+
set(STACK_WALKING_UNWIND FALSE)
82+
set(STACK_WALKING_BACKTRACE FALSE)
83+
endif()
84+
85+
if (${STACK_DETAILS_AUTO_DETECT})
86+
if(NOT CMAKE_VERSION VERSION_LESS 3.17)
87+
set(_name_mismatched_arg NAME_MISMATCHED)
88+
endif()
89+
# find libdw
90+
find_path(LIBDW_INCLUDE_DIR NAMES "elfutils/libdw.h" "elfutils/libdwfl.h")
91+
find_library(LIBDW_LIBRARY dw)
92+
set(LIBDW_INCLUDE_DIRS ${LIBDW_INCLUDE_DIR} )
93+
set(LIBDW_LIBRARIES ${LIBDW_LIBRARY} )
94+
find_package_handle_standard_args(libdw ${_name_mismatched_arg}
95+
REQUIRED_VARS LIBDW_LIBRARY LIBDW_INCLUDE_DIR)
96+
mark_as_advanced(LIBDW_INCLUDE_DIR LIBDW_LIBRARY)
97+
98+
# find libbfd
99+
find_path(LIBBFD_INCLUDE_DIR NAMES "bfd.h")
100+
find_path(LIBDL_INCLUDE_DIR NAMES "dlfcn.h")
101+
find_library(LIBBFD_LIBRARY bfd)
102+
find_library(LIBDL_LIBRARY dl)
103+
set(LIBBFD_INCLUDE_DIRS ${LIBBFD_INCLUDE_DIR} ${LIBDL_INCLUDE_DIR})
104+
set(LIBBFD_LIBRARIES ${LIBBFD_LIBRARY} ${LIBDL_LIBRARY})
105+
find_package_handle_standard_args(libbfd ${_name_mismatched_arg}
106+
REQUIRED_VARS LIBBFD_LIBRARY LIBBFD_INCLUDE_DIR
107+
LIBDL_LIBRARY LIBDL_INCLUDE_DIR)
108+
mark_as_advanced(LIBBFD_INCLUDE_DIR LIBBFD_LIBRARY
109+
LIBDL_INCLUDE_DIR LIBDL_LIBRARY)
110+
111+
# find libdwarf
112+
find_path(LIBDWARF_INCLUDE_DIR NAMES "libdwarf.h" PATH_SUFFIXES libdwarf)
113+
find_path(LIBELF_INCLUDE_DIR NAMES "libelf.h")
114+
find_path(LIBDL_INCLUDE_DIR NAMES "dlfcn.h")
115+
find_library(LIBDWARF_LIBRARY dwarf)
116+
find_library(LIBELF_LIBRARY elf)
117+
find_library(LIBDL_LIBRARY dl)
118+
set(LIBDWARF_INCLUDE_DIRS ${LIBDWARF_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBDL_INCLUDE_DIR})
119+
set(LIBDWARF_LIBRARIES ${LIBDWARF_LIBRARY} ${LIBELF_LIBRARY} ${LIBDL_LIBRARY})
120+
find_package_handle_standard_args(libdwarf ${_name_mismatched_arg}
121+
REQUIRED_VARS LIBDWARF_LIBRARY LIBDWARF_INCLUDE_DIR
122+
LIBELF_LIBRARY LIBELF_INCLUDE_DIR
123+
LIBDL_LIBRARY LIBDL_INCLUDE_DIR)
124+
mark_as_advanced(LIBDWARF_INCLUDE_DIR LIBDWARF_LIBRARY
125+
LIBELF_INCLUDE_DIR LIBELF_LIBRARY
126+
LIBDL_INCLUDE_DIR LIBDL_LIBRARY)
127+
128+
if (LIBDW_FOUND)
129+
LIST(APPEND _BACKWARD_INCLUDE_DIRS ${LIBDW_INCLUDE_DIRS})
130+
LIST(APPEND _BACKWARD_LIBRARIES ${LIBDW_LIBRARIES})
131+
set(STACK_DETAILS_DW TRUE)
132+
set(STACK_DETAILS_BFD FALSE)
133+
set(STACK_DETAILS_DWARF FALSE)
134+
set(STACK_DETAILS_BACKTRACE_SYMBOL FALSE)
135+
elseif(LIBBFD_FOUND)
136+
LIST(APPEND _BACKWARD_INCLUDE_DIRS ${LIBBFD_INCLUDE_DIRS})
137+
LIST(APPEND _BACKWARD_LIBRARIES ${LIBBFD_LIBRARIES})
138+
139+
# If we attempt to link against static bfd, make sure to link its dependencies, too
140+
get_filename_component(bfd_lib_ext "${LIBBFD_LIBRARY}" EXT)
141+
if (bfd_lib_ext STREQUAL "${CMAKE_STATIC_LIBRARY_SUFFIX}")
142+
list(APPEND _BACKWARD_LIBRARIES iberty z)
143+
endif()
144+
145+
set(STACK_DETAILS_DW FALSE)
146+
set(STACK_DETAILS_BFD TRUE)
147+
set(STACK_DETAILS_DWARF FALSE)
148+
set(STACK_DETAILS_BACKTRACE_SYMBOL FALSE)
149+
elseif(LIBDWARF_FOUND)
150+
LIST(APPEND _BACKWARD_INCLUDE_DIRS ${LIBDWARF_INCLUDE_DIRS})
151+
LIST(APPEND _BACKWARD_LIBRARIES ${LIBDWARF_LIBRARIES})
152+
153+
set(STACK_DETAILS_DW FALSE)
154+
set(STACK_DETAILS_BFD FALSE)
155+
set(STACK_DETAILS_DWARF TRUE)
156+
set(STACK_DETAILS_BACKTRACE_SYMBOL FALSE)
157+
else()
158+
set(STACK_DETAILS_DW FALSE)
159+
set(STACK_DETAILS_BFD FALSE)
160+
set(STACK_DETAILS_DWARF FALSE)
161+
set(STACK_DETAILS_BACKTRACE_SYMBOL TRUE)
162+
endif()
163+
else()
164+
if (STACK_DETAILS_DW)
165+
LIST(APPEND _BACKWARD_LIBRARIES dw)
166+
endif()
167+
168+
if (STACK_DETAILS_BFD)
169+
LIST(APPEND _BACKWARD_LIBRARIES bfd dl)
170+
endif()
171+
172+
if (STACK_DETAILS_DWARF)
173+
LIST(APPEND _BACKWARD_LIBRARIES dwarf elf)
174+
endif()
175+
endif()
176+
177+
macro(map_definitions var_prefix define_prefix)
178+
foreach(def ${ARGN})
179+
if (${${var_prefix}${def}})
180+
LIST(APPEND _BACKWARD_DEFINITIONS "${define_prefix}${def}=1")
181+
else()
182+
LIST(APPEND _BACKWARD_DEFINITIONS "${define_prefix}${def}=0")
183+
endif()
184+
endforeach()
185+
endmacro()
186+
187+
if (NOT _BACKWARD_DEFINITIONS)
188+
map_definitions("STACK_WALKING_" "BACKWARD_HAS_" UNWIND LIBUNWIND BACKTRACE)
189+
map_definitions("STACK_DETAILS_" "BACKWARD_HAS_" BACKTRACE_SYMBOL DW BFD DWARF)
190+
endif()
191+
192+
if(WIN32)
193+
list(APPEND _BACKWARD_LIBRARIES dbghelp psapi)
194+
if(MINGW)
195+
set(MINGW_MSVCR_LIBRARY "msvcr90$<$<CONFIG:DEBUG>:d>" CACHE STRING "Mingw MSVC runtime import library")
196+
list(APPEND _BACKWARD_LIBRARIES ${MINGW_MSVCR_LIBRARY})
197+
endif()
198+
endif()
199+
200+
set(BACKWARD_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}")
201+
202+
set(BACKWARD_HAS_EXTERNAL_LIBRARIES FALSE)
203+
set(FIND_PACKAGE_REQUIRED_VARS BACKWARD_INCLUDE_DIR)
204+
if(DEFINED _BACKWARD_LIBRARIES)
205+
set(BACKWARD_HAS_EXTERNAL_LIBRARIES TRUE)
206+
list(APPEND FIND_PACKAGE_REQUIRED_VARS _BACKWARD_LIBRARIES)
207+
endif()
208+
209+
include(FindPackageHandleStandardArgs)
210+
find_package_handle_standard_args(Backward
211+
REQUIRED_VARS ${FIND_PACKAGE_REQUIRED_VARS}
212+
)
213+
list(APPEND _BACKWARD_INCLUDE_DIRS ${BACKWARD_INCLUDE_DIR})
214+
215+
macro(add_backward target)
216+
target_include_directories(${target} PRIVATE ${BACKWARD_INCLUDE_DIRS})
217+
set_property(TARGET ${target} APPEND PROPERTY COMPILE_DEFINITIONS ${BACKWARD_DEFINITIONS})
218+
set_property(TARGET ${target} APPEND PROPERTY LINK_LIBRARIES ${BACKWARD_LIBRARIES})
219+
endmacro()
220+
221+
set(BACKWARD_INCLUDE_DIRS ${_BACKWARD_INCLUDE_DIRS} CACHE INTERNAL "_BACKWARD_INCLUDE_DIRS")
222+
set(BACKWARD_DEFINITIONS ${_BACKWARD_DEFINITIONS} CACHE INTERNAL "BACKWARD_DEFINITIONS")
223+
set(BACKWARD_LIBRARIES ${_BACKWARD_LIBRARIES} CACHE INTERNAL "BACKWARD_LIBRARIES")
224+
mark_as_advanced(BACKWARD_INCLUDE_DIRS BACKWARD_DEFINITIONS BACKWARD_LIBRARIES)
225+
226+
# Expand each definition in BACKWARD_DEFINITIONS to its own cmake var and export
227+
# to outer scope
228+
foreach(var ${BACKWARD_DEFINITIONS})
229+
string(REPLACE "=" ";" var_as_list ${var})
230+
list(GET var_as_list 0 var_name)
231+
list(GET var_as_list 1 var_value)
232+
set(${var_name} ${var_value})
233+
mark_as_advanced(${var_name})
234+
endforeach()
235+
236+
if (NOT TARGET Backward::Backward)
237+
add_library(Backward::Backward INTERFACE IMPORTED)
238+
set_target_properties(Backward::Backward PROPERTIES
239+
INTERFACE_INCLUDE_DIRECTORIES "${BACKWARD_INCLUDE_DIRS}"
240+
INTERFACE_COMPILE_DEFINITIONS "${BACKWARD_DEFINITIONS}"
241+
)
242+
if(BACKWARD_HAS_EXTERNAL_LIBRARIES)
243+
set_target_properties(Backward::Backward PROPERTIES
244+
INTERFACE_LINK_LIBRARIES "${BACKWARD_LIBRARIES}"
245+
)
246+
endif()
247+
endif()

0 commit comments

Comments
 (0)