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 )