Warning, /sdk/heaptrack/cmake/FindLibunwind.cmake is written in an unsupported language. File is not indexed.
0001 #.rst:
0002 # FindLibunwind
0003 # -----------
0004 #
0005 # Find Libunwind
0006 #
0007 # Find Libunwind headers and library
0008 #
0009 # ::
0010 #
0011 # LIBUNWIND_FOUND - True if libunwind is found.
0012 # LIBUNWIND_INCLUDE_DIRS - Directory where libunwind headers are located.
0013 # LIBUNWIND_LIBRARIES - Unwind libraries to link against.
0014 # LIBUNWIND_HAS_UNW_GETCONTEXT - True if unw_getcontext() is found (optional).
0015 # LIBUNWIND_HAS_UNW_INIT_LOCAL - True if unw_init_local() is found (optional).
0016 # LIBUNWIND_HAS_UNW_BACKTRACE - True if unw_backtrace() is found (required).
0017 # LIBUNWIND_HAS_UNW_BACKTRACE_SKIP - True if unw_backtrace_skip() is found (optional).
0018 # LIBUNWIND_VERSION_STRING - version number as a string (ex: "5.0.3")
0019
0020 #=============================================================================
0021 # SPDX-FileCopyrightText: 2014 ZBackup contributors
0022 # SPDX-License-Identifier: BSD-3-Clause
0023
0024
0025 find_path(LIBUNWIND_INCLUDE_DIR libunwind.h )
0026 if(NOT EXISTS "${LIBUNWIND_INCLUDE_DIR}/unwind.h")
0027 MESSAGE("Found libunwind.h but corresponding unwind.h is absent!")
0028 SET(LIBUNWIND_INCLUDE_DIR "")
0029 endif()
0030
0031 find_library(LIBUNWIND_LIBRARY unwind)
0032
0033 if(LIBUNWIND_INCLUDE_DIR AND EXISTS "${LIBUNWIND_INCLUDE_DIR}/libunwind-common.h")
0034 file(STRINGS "${LIBUNWIND_INCLUDE_DIR}/libunwind-common.h" LIBUNWIND_HEADER_CONTENTS REGEX "#define UNW_VERSION_[A-Z]+\t[0-9]*")
0035
0036 string(REGEX REPLACE ".*#define UNW_VERSION_MAJOR\t([0-9]*).*" "\\1" LIBUNWIND_VERSION_MAJOR "${LIBUNWIND_HEADER_CONTENTS}")
0037 string(REGEX REPLACE ".*#define UNW_VERSION_MINOR\t([0-9]*).*" "\\1" LIBUNWIND_VERSION_MINOR "${LIBUNWIND_HEADER_CONTENTS}")
0038 string(REGEX REPLACE ".*#define UNW_VERSION_EXTRA\t([0-9]*).*" "\\1" LIBUNWIND_VERSION_EXTRA "${LIBUNWIND_HEADER_CONTENTS}")
0039
0040 if(LIBUNWIND_VERSION_EXTRA)
0041 set(LIBUNWIND_VERSION_STRING "${LIBUNWIND_VERSION_MAJOR}.${LIBUNWIND_VERSION_MINOR}.${LIBUNWIND_VERSION_EXTRA}")
0042 else(not LIBUNWIND_VERSION_EXTRA)
0043 set(LIBUNWIND_VERSION_STRING "${LIBUNWIND_VERSION_MAJOR}.${LIBUNWIND_VERSION_MINOR}")
0044 endif()
0045 unset(LIBUNWIND_HEADER_CONTENTS)
0046 endif()
0047
0048 if (LIBUNWIND_LIBRARY)
0049 include(CheckCSourceCompiles)
0050 set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET})
0051 set(CMAKE_REQUIRED_QUIET ${Libunwind_FIND_QUIETLY})
0052 set(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES})
0053 set(CMAKE_REQUIRED_LIBRARIES ${LIBUNWIND_LIBRARY})
0054 set(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES})
0055 set(CMAKE_REQUIRED_INCLUDES ${LIBUNWIND_INCLUDE_DIR})
0056 check_c_source_compiles("#define UNW_LOCAL_ONLY 1\n#include <libunwind.h>\nint main() { unw_context_t context; unw_getcontext(&context); return 0; }"
0057 LIBUNWIND_HAS_UNW_GETCONTEXT)
0058 check_c_source_compiles("#define UNW_LOCAL_ONLY 1\n#include <libunwind.h>\nint main() { unw_context_t context; unw_cursor_t cursor; unw_getcontext(&context); unw_init_local(&cursor, &context); return 0; }"
0059 LIBUNWIND_HAS_UNW_INIT_LOCAL)
0060 check_c_source_compiles("#define UNW_LOCAL_ONLY 1\n#include <libunwind.h>\nint main() { void* buf[10]; unw_backtrace(buf, 10); return 0; }" LIBUNWIND_HAS_UNW_BACKTRACE)
0061 check_c_source_compiles ("#define UNW_LOCAL_ONLY 1\n#include <libunwind.h>\nint main() { void* buf[10]; unw_backtrace_skip(buf, 10, 2); return 0; }" LIBUNWIND_HAS_UNW_BACKTRACE_SKIP)
0062 check_c_source_compiles ("#define UNW_LOCAL_ONLY 1\n#include <libunwind.h>\nint main() { return unw_set_cache_size(unw_local_addr_space, 1024, 0); }" LIBUNWIND_HAS_UNW_SET_CACHE_SIZE)
0063 check_c_source_compiles ("#define UNW_LOCAL_ONLY 1\n#include <libunwind.h>\nint main() { return unw_set_caching_policy(unw_local_addr_space, UNW_CACHE_PER_THREAD); }" LIBUNWIND_HAS_UNW_CACHE_PER_THREAD)
0064 set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE})
0065 set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE})
0066 set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE})
0067 endif ()
0068
0069 include(FindPackageHandleStandardArgs)
0070 FIND_PACKAGE_HANDLE_STANDARD_ARGS(Libunwind REQUIRED_VARS LIBUNWIND_INCLUDE_DIR
0071 LIBUNWIND_LIBRARY
0072 LIBUNWIND_HAS_UNW_BACKTRACE
0073 VERSION_VAR LIBUNWIND_VERSION_STRING
0074 )
0075
0076 if (LIBUNWIND_FOUND)
0077 set(LIBUNWIND_LIBRARIES ${LIBUNWIND_LIBRARY})
0078 set(LIBUNWIND_INCLUDE_DIRS ${LIBUNWIND_INCLUDE_DIR})
0079 endif ()
0080
0081 mark_as_advanced( LIBUNWIND_INCLUDE_DIR LIBUNWIND_LIBRARY )