master
cmake 52 lines 2.19 KB
Raw
1 # SPDX-License-Identifier: GPL-3.0-or-later
2 # Functions and macros for handling of libbacktrace
3 #
4 # Handle bundling of libbacktrace.
5 #
6 # This clones and builds libbacktrace using ExternalProject functionality.
7
8 include(ExternalProject)
9
10 function(netdata_bundle_libbacktrace)
11 message(STATUS "Preparing libbacktrace")
12
13 set(libbacktrace_SOURCE_DIR "${CMAKE_BINARY_DIR}/libbacktrace-src")
14 set(libbacktrace_BINARY_DIR "${CMAKE_BINARY_DIR}/libbacktrace-build")
15 set(libbacktrace_INSTALL_DIR "${CMAKE_BINARY_DIR}/libbacktrace-install")
16 set(libbacktrace_LIBRARY "${libbacktrace_INSTALL_DIR}/lib/libbacktrace.a")
17
18 # Clone and build libbacktrace
19 ExternalProject_Add(
20 libbacktrace
21 GIT_REPOSITORY https://github.com/ianlancetaylor/libbacktrace.git
22 SOURCE_DIR "${libbacktrace_SOURCE_DIR}"
23 BINARY_DIR "${libbacktrace_BINARY_DIR}"
24 CONFIGURE_COMMAND "${libbacktrace_SOURCE_DIR}/configure" --prefix=${libbacktrace_INSTALL_DIR} --enable-static
25 BUILD_COMMAND make install
26 INSTALL_COMMAND ""
27 BUILD_BYPRODUCTS "${libbacktrace_LIBRARY}"
28 EXCLUDE_FROM_ALL 1
29 UPDATE_DISCONNECTED ON
30 )
31
32 # Create an imported library target
33 add_library(libbacktrace_library STATIC IMPORTED GLOBAL)
34 set_property(
35 TARGET libbacktrace_library
36 PROPERTY IMPORTED_LOCATION "${libbacktrace_LIBRARY}"
37 )
38 add_dependencies(libbacktrace_library libbacktrace)
39
40 # Export variables to parent scope
41 set(NETDATA_LIBBACKTRACE_INCLUDE_DIRS "${libbacktrace_INSTALL_DIR}/include" PARENT_SCOPE)
42 set(NETDATA_LIBBACKTRACE_LIBRARIES libbacktrace_library PARENT_SCOPE)
43 set(HAVE_LIBBACKTRACE TRUE PARENT_SCOPE)
44
45 message(STATUS "Finished preparing libbacktrace")
46 endfunction()
47
48 function(netdata_add_libbacktrace_to_target _target)
49 target_include_directories(${_target} BEFORE PUBLIC "${NETDATA_LIBBACKTRACE_INCLUDE_DIRS}")
50 target_link_libraries(${_target} PUBLIC ${NETDATA_LIBBACKTRACE_LIBRARIES})
51 add_dependencies(${_target} libbacktrace)
52 endfunction()