mirror of
https://github.com/Ryujinx/SDL.git
synced 2025-06-19 20:47:48 +00:00
cmake: check whether libunwind can be compiled and linked against
This commit is contained in:
parent
8908d16285
commit
0262f757e1
|
@ -1023,9 +1023,6 @@ if(SDL_LIBC)
|
||||||
sys/types.h
|
sys/types.h
|
||||||
wchar.h
|
wchar.h
|
||||||
)
|
)
|
||||||
if(NOT EMSCRIPTEN)
|
|
||||||
list(APPEND headers_to_check libunwind.h)
|
|
||||||
endif()
|
|
||||||
foreach(_HEADER ${headers_to_check})
|
foreach(_HEADER ${headers_to_check})
|
||||||
string(TOUPPER "HAVE_${_HEADER}" _UPPER)
|
string(TOUPPER "HAVE_${_HEADER}" _UPPER)
|
||||||
string(REGEX REPLACE "[./]" "_" _HAVE_H ${_UPPER})
|
string(REGEX REPLACE "[./]" "_" _HAVE_H ${_UPPER})
|
||||||
|
@ -1405,10 +1402,7 @@ elseif(EMSCRIPTEN)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
CheckPTHREAD()
|
CheckPTHREAD()
|
||||||
|
CheckLibUnwind()
|
||||||
if(HAVE_LIBUNWIND_H)
|
|
||||||
list(APPEND EXTRA_TEST_LIBS unwind)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
|
elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
|
||||||
if(SDL_AUDIO)
|
if(SDL_AUDIO)
|
||||||
|
@ -1572,15 +1566,8 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(HAVE_LIBUNWIND_H)
|
|
||||||
# We've already found the header, so link the lib if present.
|
|
||||||
# NB: This .pc file is not present on FreeBSD where the implicitly
|
|
||||||
# linked base system libgcc_s includes all libunwind ABI.
|
|
||||||
pkg_search_module(UNWIND libunwind)
|
|
||||||
pkg_search_module(UNWIND_GENERIC libunwind-generic)
|
|
||||||
list(APPEND EXTRA_TEST_LIBS ${UNWIND_LIBRARIES} ${UNWIND_GENERIC_LIBRARIES})
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
CheckLibUnwind()
|
||||||
|
|
||||||
if(HAVE_DBUS_DBUS_H)
|
if(HAVE_DBUS_DBUS_H)
|
||||||
list(APPEND SOURCE_FILES "${SDL2_SOURCE_DIR}/src/core/linux/SDL_dbus.c")
|
list(APPEND SOURCE_FILES "${SDL2_SOURCE_DIR}/src/core/linux/SDL_dbus.c")
|
||||||
|
@ -3453,6 +3440,7 @@ if(SDL_TEST)
|
||||||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
|
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
|
||||||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/SDL2>")
|
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/SDL2>")
|
||||||
target_link_libraries(SDL2_test PRIVATE ${EXTRA_TEST_LIBS})
|
target_link_libraries(SDL2_test PRIVATE ${EXTRA_TEST_LIBS})
|
||||||
|
target_include_directories(SDL2_test PRIVATE ${EXTRA_TEST_INCLUDES})
|
||||||
set_property(TARGET SDL2_test APPEND PROPERTY COMPATIBLE_INTERFACE_STRING "SDL_VERSION")
|
set_property(TARGET SDL2_test APPEND PROPERTY COMPATIBLE_INTERFACE_STRING "SDL_VERSION")
|
||||||
set_property(TARGET SDL2_test PROPERTY INTERFACE_SDL_VERSION "SDL2")
|
set_property(TARGET SDL2_test PROPERTY INTERFACE_SDL_VERSION "SDL2")
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -1336,3 +1336,50 @@ macro(CheckLibUDev)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endmacro()
|
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()
|
||||||
|
|
Loading…
Reference in a new issue