cmake: check whether libunwind can be compiled and linked against
This commit is contained in:
1 parent
8908d16285
commit
0262f757e1
2 files changed
+50
-15
No files matched your search
@@ -1336,3 +1336,50 @@ macro(CheckLibUDev)
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(CheckLibUnwind)
|
||||
set(found_libunwind FALSE)
|
||||
set(_libunwind_src "#include <libunwind.h>\nint main() {unw_context_t context; unw_getcontext(&context); return 0;}")
|
||||
|
||||
if(NOT found_libunwind)
|
||||
cmake_push_check_state()
|
||||
check_c_source_compiles("${_libunwind_src}" LIBC_HAS_WORKING_LIBUNWIND)
|
||||
cmake_pop_check_state()
|
||||
if(LIBC_HAS_WORKING_LIBUNWIND)
|
||||
set(found_libunwind TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT found_libunwind)
|
||||
cmake_push_check_state()
|
||||
list(APPEND CMAKE_REQUIRED_LIBRARIES "unwind")
|
||||
check_c_source_compiles("${_libunwind_src}" LIBUNWIND_HAS_WORKINGLIBUNWIND)
|
||||
cmake_pop_check_state()
|
||||
if(LIBUNWIND_HAS_WORKINGLIBUNWIND)
|
||||
set(found_libunwind TRUE)
|
||||
list(APPEND EXTRA_TEST_LIBS unwind)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT found_libunwind)
|
||||
set(LibUnwind_PKG_CONFIG_SPEC libunwind libunwind-generic)
|
||||
pkg_check_modules(PC_LIBUNWIND IMPORTED_TARGET ${LibUnwind_PKG_CONFIG_SPEC})
|
||||
if(PC_LIBUNWIND_FOUND)
|
||||
cmake_push_check_state()
|
||||
list(APPEND CMAKE_REQUIRED_LIBRARIES ${PC_LIBUNWIND_LIBRARIES})
|
||||
list(APPEND CMAKE_REQUIRED_INCLUDES ${PC_LIBUNWIND_INCLUDE_DIRS})
|
||||
check_c_source_compiles("${_libunwind_src}" PC_LIBUNWIND_HAS_WORKING_LIBUNWIND)
|
||||
cmake_pop_check_state()
|
||||
if(PC_LIBUNWIND_HAS_WORKING_LIBUNWIND)
|
||||
set(found_libunwind TRUE)
|
||||
list(APPEND EXTRA_TEST_LIBS ${PC_LIBUNWIND_LIBRARIES})
|
||||
list(APPEND EXTRA_TEST_INCLUDES ${PC_LIBUNWIND_INCLUDE_DIRS})
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(found_libunwind)
|
||||
set(HAVE_LIBUNWIND_H TRUE)
|
||||
endif()
|
||||
endmacro()
|
||||
Reference in new issue
Block a user