mirror of
https://github.com/GerbilSoft/rom-properties.git
synced 2025-06-19 12:05:43 -04:00

The sanitizer doesn't support IFUNC (crashes), and hangs on exit if seccomp is in use, even if all the syscalls are added.
42 lines
1.4 KiB
CMake
42 lines
1.4 KiB
CMake
# Check for IFUNC support.
|
|
# Requires ELF. Currently supported by gcc, but not clang.
|
|
|
|
FUNCTION(CHECK_IFUNC_SUPPORT)
|
|
IF(NOT DEFINED HAVE_IFUNC)
|
|
# NOTE: ${CMAKE_MODULE_PATH} has two directories, macros/ and libs/,
|
|
# so we have to configure this manually.
|
|
SET(IFUNC_SOURCE_PATH "${CMAKE_SOURCE_DIR}/cmake/macros")
|
|
|
|
# NOTE: If -fsanitize is specified, disable IFUNC.
|
|
# Otherwise, SIGSEGV will happen.
|
|
IF(CMAKE_C_FLAGS MATCHES -fsanitize OR CMAKE_CXX_FLAGS MATCHES -fsanitize)
|
|
SET(IS_SANITIZE 1)
|
|
ENDIF()
|
|
|
|
# Check for IFUNC support.
|
|
MESSAGE(STATUS "Checking if IFUNC is supported")
|
|
IF(WIN32 OR APPLE)
|
|
# No IFUNC for Windows or Mac OS X.
|
|
# Shortcut here to avoid needing a cross-compiled test program.
|
|
MESSAGE(STATUS "Checking if IFUNC is supported - no")
|
|
SET(TMP_HAVE_IFUNC FALSE)
|
|
ELSEIF(IS_SANITIZE)
|
|
MESSAGE(STATUS "Checking if IFUNC is supported - disabled due to -fsanitize")
|
|
SET(TMP_HAVE_IFUNC FALSE)
|
|
ELSE()
|
|
TRY_RUN(TMP_HAVE_IFUNC_RUN TMP_HAVE_IFUNC_COMPILE
|
|
"${CMAKE_BINARY_DIR}"
|
|
"${IFUNC_SOURCE_PATH}/IfuncTest.c")
|
|
IF(TMP_HAVE_IFUNC_COMPILE AND (TMP_HAVE_IFUNC_RUN EQUAL 0))
|
|
MESSAGE(STATUS "Checking if IFUNC is supported - yes")
|
|
SET(TMP_HAVE_IFUNC TRUE)
|
|
ELSE()
|
|
MESSAGE(STATUS "Checking if IFUNC is supported - no")
|
|
SET(TMP_HAVE_IFUNC FALSE)
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
SET(HAVE_IFUNC ${TMP_HAVE_IFUNC} CACHE INTERNAL "Is IFUNC supported?")
|
|
ENDIF()
|
|
ENDFUNCTION(CHECK_IFUNC_SUPPORT)
|