6cff86c1bdfd8f507275882a752aa58f0e0fa281
[iec.git] / src / type3_AndroidCloud / anbox-master / external / backward-cpp / BackwardConfig.cmake
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
32 set(STACK_DETAILS_AUTO_DETECT TRUE CACHE BOOL
33         "Auto detect backward's stack details dependencies")
34
35 set(STACK_DETAILS_BACKTRACE_SYMBOL FALSE CACHE BOOL
36         "Use backtrace from (e)glibc for symbols resolution")
37 set(STACK_DETAILS_DW FALSE CACHE BOOL
38         "Use libdw to read debug info")
39 set(STACK_DETAILS_BFD FALSE CACHE BOOL
40         "Use libbfd to read debug info")
41 set(STACK_DETAILS_DWARF FALSE CACHE BOOL
42         "Use libdwarf/libelf to read debug info")
43
44 set(BACKWARD_TESTS FALSE CACHE BOOL "Enable tests")
45
46 ###############################################################################
47 # CONFIGS
48 ###############################################################################
49 if (${STACK_DETAILS_AUTO_DETECT})
50         include(FindPackageHandleStandardArgs)
51
52         # find libdw
53         find_path(LIBDW_INCLUDE_DIR NAMES "elfutils/libdw.h" "elfutils/libdwfl.h")
54         find_library(LIBDW_LIBRARY dw)
55         set(LIBDW_INCLUDE_DIRS ${LIBDW_INCLUDE_DIR} )
56         set(LIBDW_LIBRARIES ${LIBDW_LIBRARY} )
57         find_package_handle_standard_args(libdw DEFAULT_MSG
58                 LIBDW_LIBRARY LIBDW_INCLUDE_DIR)
59         mark_as_advanced(LIBDW_INCLUDE_DIR LIBDW_LIBRARY)
60
61         # find libbfd
62         find_path(LIBBFD_INCLUDE_DIR NAMES "bfd.h")
63         find_path(LIBDL_INCLUDE_DIR NAMES "dlfcn.h")
64         find_library(LIBBFD_LIBRARY bfd)
65         find_library(LIBDL_LIBRARY dl)
66         set(LIBBFD_INCLUDE_DIRS ${LIBBFD_INCLUDE_DIR} ${LIBDL_INCLUDE_DIR})
67         set(LIBBFD_LIBRARIES ${LIBBFD_LIBRARY} ${LIBDL_LIBRARY})
68         find_package_handle_standard_args(libbfd DEFAULT_MSG
69                 LIBBFD_LIBRARY LIBBFD_INCLUDE_DIR
70                 LIBDL_LIBRARY LIBDL_INCLUDE_DIR)
71         mark_as_advanced(LIBBFD_INCLUDE_DIR LIBBFD_LIBRARY
72                 LIBDL_INCLUDE_DIR LIBDL_LIBRARY)
73
74         # find libdwarf
75         find_path(LIBDWARF_INCLUDE_DIR NAMES "libdwarf.h" PATH_SUFFIXES libdwarf)
76         find_path(LIBELF_INCLUDE_DIR NAMES "libelf.h")
77         find_path(LIBDL_INCLUDE_DIR NAMES "dlfcn.h")
78         find_library(LIBDWARF_LIBRARY dwarf)
79         find_library(LIBELF_LIBRARY elf)
80         find_library(LIBDL_LIBRARY dl)
81         set(LIBDWARF_INCLUDE_DIRS ${LIBDWARF_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBDL_INCLUDE_DIR})
82         set(LIBDWARF_LIBRARIES ${LIBDWARF_LIBRARY} ${LIBELF_LIBRARY} ${LIBDL_LIBRARY})
83         find_package_handle_standard_args(libdwarf DEFAULT_MSG
84                 LIBDWARF_LIBRARY LIBDWARF_INCLUDE_DIR
85                 LIBELF_LIBRARY LIBELF_INCLUDE_DIR
86                 LIBDL_LIBRARY LIBDL_INCLUDE_DIR)
87         mark_as_advanced(LIBDWARF_INCLUDE_DIR LIBDWARF_LIBRARY
88                 LIBELF_INCLUDE_DIR LIBELF_LIBRARY
89                 LIBDL_INCLUDE_DIR LIBDL_LIBRARY)
90
91         if (LIBDW_FOUND)
92                 LIST(APPEND _BACKWARD_INCLUDE_DIRS ${LIBDW_INCLUDE_DIRS})
93                 LIST(APPEND _BACKWARD_LIBRARIES ${LIBDW_LIBRARIES})
94                 set(STACK_DETAILS_DW TRUE)
95                 set(STACK_DETAILS_BFD FALSE)
96                 set(STACK_DETAILS_DWARF FALSE)
97                 set(STACK_DETAILS_BACKTRACE_SYMBOL FALSE)
98         elseif(LIBBFD_FOUND)
99                 LIST(APPEND _BACKWARD_INCLUDE_DIRS ${LIBBFD_INCLUDE_DIRS})
100                 LIST(APPEND _BACKWARD_LIBRARIES ${LIBBFD_LIBRARIES})
101
102                 # If we attempt to link against static bfd, make sure to link its dependencies, too
103                 get_filename_component(bfd_lib_ext "${LIBBFD_LIBRARY}" EXT)
104                 if (bfd_lib_ext STREQUAL "${CMAKE_STATIC_LIBRARY_SUFFIX}")
105                         list(APPEND _BACKWARD_LIBRARIES iberty z)
106                 endif()
107
108                 set(STACK_DETAILS_DW FALSE)
109                 set(STACK_DETAILS_BFD TRUE)
110                 set(STACK_DETAILS_DWARF FALSE)
111                 set(STACK_DETAILS_BACKTRACE_SYMBOL FALSE)
112         elseif(LIBDWARF_FOUND)
113                 LIST(APPEND _BACKWARD_INCLUDE_DIRS ${LIBDWARF_INCLUDE_DIRS})
114                 LIST(APPEND BACKWARD_LIBRARIES ${LIBDWARF_LIBRARIES})
115
116                 set(STACK_DETAILS_DW FALSE)
117                 set(STACK_DETAILS_BFD FALSE)
118                 set(STACK_DETAILS_DWARF TRUE)
119                 set(STACK_DETAILS_BACKTRACE_SYMBOL FALSE)
120         else()
121                 set(STACK_DETAILS_DW FALSE)
122                 set(STACK_DETAILS_BFD FALSE)
123                 set(STACK_DETAILS_DWARF FALSE)
124                 set(STACK_DETAILS_BACKTRACE_SYMBOL TRUE)
125         endif()
126 else()
127         if (STACK_DETAILS_DW)
128                 LIST(APPEND _BACKWARD_LIBRARIES dw)
129         endif()
130
131         if (STACK_DETAILS_BFD)
132                 LIST(APPEND _BACKWARD_LIBRARIES bfd dl)
133         endif()
134
135         if (STACK_DETAILS_DWARF)
136                 LIST(APPEND _BACKWARD_LIBRARIES dwarf elf)
137         endif()
138 endif()
139
140 macro(map_definitions var_prefix define_prefix)
141         foreach(def ${ARGN})
142                 if (${${var_prefix}${def}})
143                         LIST(APPEND _BACKWARD_DEFINITIONS "${define_prefix}${def}=1")
144                 else()
145                         LIST(APPEND _BACKWARD_DEFINITIONS "${define_prefix}${def}=0")
146                 endif()
147         endforeach()
148 endmacro()
149
150 if (NOT _BACKWARD_DEFINITIONS)
151         map_definitions("STACK_WALKING_" "BACKWARD_HAS_" UNWIND BACKTRACE)
152         map_definitions("STACK_DETAILS_" "BACKWARD_HAS_" BACKTRACE_SYMBOL DW BFD DWARF)
153 endif()
154
155 set(BACKWARD_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}")
156
157 set(BACKWARD_HAS_EXTERNAL_LIBRARIES FALSE)
158 set(FIND_PACKAGE_REQUIRED_VARS BACKWARD_INCLUDE_DIR)
159 if(DEFINED _BACKWARD_LIBRARIES)
160         set(BACKWARD_HAS_EXTERNAL_LIBRARIES TRUE)
161         list(APPEND FIND_PACKAGE_REQUIRED_VARS _BACKWARD_LIBRARIES)
162 endif()
163
164 include(FindPackageHandleStandardArgs)
165 find_package_handle_standard_args(Backward
166     REQUIRED_VARS ${FIND_PACKAGE_REQUIRED_VARS}
167 )
168 list(APPEND _BACKWARD_INCLUDE_DIRS ${BACKWARD_INCLUDE_DIR})
169
170 macro(add_backward target)
171         target_include_directories(${target} PRIVATE ${BACKWARD_INCLUDE_DIRS})
172         set_property(TARGET ${target} APPEND PROPERTY COMPILE_DEFINITIONS ${BACKWARD_DEFINITIONS})
173         set_property(TARGET ${target} APPEND PROPERTY LINK_LIBRARIES ${BACKWARD_LIBRARIES})
174 endmacro()
175
176 set(BACKWARD_INCLUDE_DIRS ${_BACKWARD_INCLUDE_DIRS} CACHE INTERNAL "_BACKWARD_INCLUDE_DIRS")
177 set(BACKWARD_DEFINITIONS ${_BACKWARD_DEFINITIONS} CACHE INTERNAL "BACKWARD_DEFINITIONS")
178 set(BACKWARD_LIBRARIES ${_BACKWARD_LIBRARIES} CACHE INTERNAL "BACKWARD_LIBRARIES")
179 mark_as_advanced(BACKWARD_INCLUDE_DIRS BACKWARD_DEFINITIONS BACKWARD_LIBRARIES)
180
181 # Expand each definition in BACKWARD_DEFINITIONS to its own cmake var and export
182 # to outer scope
183 foreach(var ${BACKWARD_DEFINITIONS})
184   string(REPLACE "=" ";" var_as_list ${var})
185   list(GET var_as_list 0 var_name)
186   list(GET var_as_list 1 var_value)
187   set(${var_name} ${var_value})
188   mark_as_advanced(${var_name})
189 endforeach()
190
191 if (NOT TARGET Backward::Backward)
192         add_library(Backward::Backward INTERFACE IMPORTED)
193         set_target_properties(Backward::Backward PROPERTIES
194             INTERFACE_INCLUDE_DIRECTORIES "${BACKWARD_INCLUDE_DIRS}"
195             INTERFACE_COMPILE_DEFINITIONS "${BACKWARD_DEFINITIONS}"
196         )
197         if(BACKWARD_HAS_EXTERNAL_LIBRARIES)
198                 set_target_properties(Backward::Backward PROPERTIES
199                         INTERFACE_LINK_LIBRARIES "${BACKWARD_LIBRARIES}" 
200                 )
201         endif()
202 endif()