Files
flycast/shell/cmake/DarwinXcodeProbeCache.cmake
vkedwardli 8f877e69a2 cmake: pre-seed native macOS Xcode feature checks (#2394)
Speed up macOS Xcode project generation by skipping repeated feature checks, can be disabled with `FLYCAST_PRESEED_DARWIN_XCODE_CHECKS=OFF`
[ci skip]
2026-07-07 18:46:26 +02:00

321 lines
6.8 KiB
CMake

include_guard(GLOBAL)
# Xcode try_compile projects are expensive. These are stable native macOS
# SDK/libSystem facts; keep architecture-specific probes out of this cache.
if(NOT APPLE
OR NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin"
OR CMAKE_CROSSCOMPILING
OR NOT CMAKE_GENERATOR STREQUAL "Xcode"
OR NOT CMAKE_C_COMPILER_ID MATCHES "^(AppleClang|Clang)$")
return()
endif()
message(STATUS "Pre-seeding native macOS CMake feature checks for Xcode")
function(_flycast_seed_darwin_xcode_probe name value)
if(NOT DEFINED ${name} AND NOT DEFINED CACHE{${name}})
set(${name} "${value}" CACHE INTERNAL "Pre-seeded native macOS feature-test result")
endif()
endfunction()
foreach(_probe IN ITEMS
CMAKE_HAVE_LIBC_PTHREAD
COMPILER_SUPPORTS_FOBJC_ARC
CXX_FLAG_QUNUSED_ARGUMENTS
CXX_FLAG_WALL
CXX_FLAG_WA_NOEXECSTACK
CXX_FLAG_WCAST_ALIGN
CXX_FLAG_WCAST_QUAL
CXX_FLAG_WEXTRA
CXX_FLAG_WSHADOW
CXX_FLAG_WUNDEF
C_FLAG_QUNUSED_ARGUMENTS
C_FLAG_WALL
C_FLAG_WA_NOEXECSTACK
C_FLAG_WCAST_ALIGN
C_FLAG_WCAST_QUAL
C_FLAG_WEXTRA
C_FLAG_WSHADOW
C_FLAG_WSTRICT_PROTOTYPES
C_FLAG_WUNDEF
HAVE_ABS
HAVE_ACOS
HAVE_ACOSF
HAVE_ARC4RANDOM
HAVE_ASIN
HAVE_ASINF
HAVE_ATAN
HAVE_ATAN2
HAVE_ATAN2F
HAVE_ATANF
HAVE_ATOF
HAVE_ATOI
HAVE_BCOPY
HAVE_BSEARCH
HAVE_CALLOC
HAVE_CEIL
HAVE_CEILF
HAVE_CLOCK_GETTIME
HAVE_CLONEFILE
HAVE_COPYSIGN
HAVE_COPYSIGNF
HAVE_COS
HAVE_COSF
HAVE_CTYPE_H
HAVE_DLOPEN_IN_LIBC
HAVE_EXP
HAVE_EXPF
HAVE_FABS
HAVE_FABSF
HAVE_FCHMOD
HAVE_FCNTL_H
HAVE_FILENO
HAVE_FLOAT_H
HAVE_FLOOR
HAVE_FLOORF
HAVE_FMOD
HAVE_FMODF
HAVE_FREE
HAVE_FRAMEWORK_COREHAPTICS
HAVE_FRAMEWORK_GAMECONTROLLER
HAVE_FRAMEWORK_METAL
HAVE_FSEEKO
HAVE_FTELLO
HAVE_FTS_H
HAVE_FTS_OPEN
HAVE_GCC_ATOMICS
HAVE_GCC_COMMENT_BLOCK_COMMANDS
HAVE_GCC_FVISIBILITY
HAVE_GCC_NO_STRICT_ALIASING
HAVE_GCC_WALL
HAVE_GCC_WDECLARATION_AFTER_STATEMENT
HAVE_GCC_WDOCUMENTATION
HAVE_GCC_WDOCUMENTATION_UNKNOWN_COMMAND
HAVE_GCC_WSHADOW
HAVE_GCC_WUNDEF
HAVE_GCC_WUNUSED_LOCAL_TYPEDEFS
HAVE_GETENV
HAVE_GETPROGNAME
HAVE_ICONV_H
HAVE_INDEX
HAVE_INTTYPES_H
HAVE_INTTYPES_H_LIBZIP
HAVE_LIBM
HAVE_LIMITS_H
HAVE_LOCALTIME_R
HAVE_LOG
HAVE_LOG10
HAVE_LOG10F
HAVE_LOGF
HAVE_LROUND
HAVE_LROUNDF
HAVE_MALLOC
HAVE_MATH_H
HAVE_MEMCMP
HAVE_MEMCPY
HAVE_MEMMOVE
HAVE_MEMORY_H
HAVE_MEMSET
HAVE_MPROTECT
HAVE_M_PI
HAVE_NANOSLEEP
HAVE_NULLABLE
HAVE_O_CLOEXEC
HAVE_POLL
HAVE_POW
HAVE_POWF
HAVE_PTHREADS
HAVE_PTHREADS_SEM
HAVE_PTHREAD_H
HAVE_PTHREAD_SETNAME_NP
HAVE_PTHREAD_THREADID_NP
HAVE_PUTENV
HAVE_QSORT
HAVE_RANDOM
HAVE_REALLOC
HAVE_RECURSIVE_MUTEXES
HAVE_RINDEX
HAVE_ROUND
HAVE_ROUNDF
HAVE_SA_SIGACTION
HAVE_SCALBN
HAVE_SCALBNF
HAVE_SETENV
HAVE_SETJMP
HAVE_SETMODE
HAVE_SIGACTION
HAVE_SIGNAL_H
HAVE_SIN
HAVE_SINF
HAVE_SNPRINTF
HAVE_SQRT
HAVE_SQRTF
HAVE_SSCANF
HAVE_STDARG_H
HAVE_STDBOOL_H
HAVE_STDDEF_H
HAVE_STDINT_H
HAVE_STDINT_H_LIBZIP
HAVE_STDIO_H
HAVE_STDLIB_H
HAVE_STRCASECMP
HAVE_STRCASESTR
HAVE_STRCHR
HAVE_STRCMP
HAVE_STRDUP
HAVE_STRINGS_H
HAVE_STRING_H
HAVE_STRLCAT
HAVE_STRLCPY
HAVE_STRLEN
HAVE_STRNCASECMP
HAVE_STRNCMP
HAVE_STRRCHR
HAVE_STRSTR
HAVE_STRTOD
HAVE_STRTOK_R
HAVE_STRTOL
HAVE_STRTOLL
HAVE_STRTOUL
HAVE_STRTOULL
HAVE_STRUCT_TIMESPEC
HAVE_SYSCONF
HAVE_SYSCTLBYNAME
HAVE_SYSLOG
HAVE_SYS_TIME_H
HAVE_SYS_TYPES_H
HAVE_SYS_TYPES_H_LIBZIP
HAVE_TAN
HAVE_TANF
HAVE_TRUNC
HAVE_TRUNCF
HAVE_UNISTD_H
HAVE_UNSETENV
HAVE_VISIBILITY
HAVE_VSNPRINTF
HAVE_VSSCANF
HAVE_WCHAR_H
HAVE_WCSCASECMP
HAVE_WCSCMP
HAVE_WCSDUP
HAVE_WCSLCAT
HAVE_WCSLCPY
HAVE_WCSLEN
HAVE_WCSNCASECMP
HAVE_WCSNCMP
HAVE_WCSSTR
HAVE_WNO_ERROR_DEPRECATED_DECLARATIONS
HAVE__EXIT
NOWIDE_HAS_INIT_PRIORITY
NOWIDE_HAS_LFS
STDC_HEADERS)
_flycast_seed_darwin_xcode_probe(${_probe} 1)
endforeach()
foreach(_probe IN ITEMS
HAVE_ASM_TYPES_H
HAVE_ELF_AUX_INFO
HAVE_EVENTFD
HAVE_EXPLICIT_BZERO
HAVE_EXPLICIT_MEMSET
HAVE_FICLONERANGE
HAVE_FOPEN64
HAVE_FSEEKO64
HAVE_GETAUXVAL
HAVE_ITOA
HAVE_LOCALTIME_S
HAVE_MALLOC_H
HAVE_MEMCPY_S
HAVE_MEMFD_CREATE
HAVE_NFDS_T
HAVE_PIPE2
HAVE_POSIX_FALLOCATE
HAVE_PTHREAD_CONDATTR_SETCLOCK
HAVE_PTHREAD_NP_H
HAVE_SEM_TIMEDWAIT
HAVE_SIGTIMEDWAIT
HAVE_SNPRINTF_S
HAVE_STRERRORLEN_S
HAVE_STRERROR_S
HAVE_STRICMP
HAVE_STRNCPY_S
HAVE_TIMERFD
HAVE__CLOSE
HAVE__DUP
HAVE__FDOPEN
HAVE__FILENO
HAVE__I64TOA
HAVE__LTOA
HAVE__SETMODE
HAVE__SNPRINTF
HAVE__SNPRINTF_S
HAVE__SNWPRINTF_S
HAVE__STRDUP
HAVE__STRICMP
HAVE__STRLWR
HAVE__STRNICMP
HAVE__STRREV
HAVE__STRTOI64
HAVE__STRTOUI64
HAVE__STRUPR
HAVE__UI64TOA
HAVE__UITOA
HAVE__ULTOA
HAVE__UNLINK
HAVE__WCSDUP
HAVE__WCSICMP
HAVE__WCSNICMP
LD_FLAG_Z_NOEXECSTACK
LIBC_IS_GLIBC)
_flycast_seed_darwin_xcode_probe(${_probe} "")
endforeach()
foreach(_probe IN ITEMS
HAVE___INT16_LIBZIP
HAVE___INT32_LIBZIP
HAVE___INT64_LIBZIP
HAVE___INT8_LIBZIP)
_flycast_seed_darwin_xcode_probe(${_probe} FALSE)
endforeach()
foreach(_probe IN ITEMS
__INT16_LIBZIP
__INT32_LIBZIP
__INT64_LIBZIP
__INT8_LIBZIP)
_flycast_seed_darwin_xcode_probe(${_probe} "")
endforeach()
_flycast_seed_darwin_xcode_probe(HAVE_INT8_T_LIBZIP TRUE)
_flycast_seed_darwin_xcode_probe(INT8_T_LIBZIP 1)
_flycast_seed_darwin_xcode_probe(HAVE_UINT8_T_LIBZIP TRUE)
_flycast_seed_darwin_xcode_probe(UINT8_T_LIBZIP 1)
_flycast_seed_darwin_xcode_probe(HAVE_INT16_T_LIBZIP TRUE)
_flycast_seed_darwin_xcode_probe(INT16_T_LIBZIP 2)
_flycast_seed_darwin_xcode_probe(HAVE_UINT16_T_LIBZIP TRUE)
_flycast_seed_darwin_xcode_probe(UINT16_T_LIBZIP 2)
_flycast_seed_darwin_xcode_probe(HAVE_SHORT_LIBZIP TRUE)
_flycast_seed_darwin_xcode_probe(SHORT_LIBZIP 2)
_flycast_seed_darwin_xcode_probe(HAVE_INT32_T_LIBZIP TRUE)
_flycast_seed_darwin_xcode_probe(INT32_T_LIBZIP 4)
_flycast_seed_darwin_xcode_probe(HAVE_UINT32_T_LIBZIP TRUE)
_flycast_seed_darwin_xcode_probe(UINT32_T_LIBZIP 4)
_flycast_seed_darwin_xcode_probe(HAVE_INT_LIBZIP TRUE)
_flycast_seed_darwin_xcode_probe(INT_LIBZIP 4)
# Flycast supports x86_64 and arm64 macOS builds; both use LP64.
_flycast_seed_darwin_xcode_probe(HAVE_INT64_T_LIBZIP TRUE)
_flycast_seed_darwin_xcode_probe(INT64_T_LIBZIP 8)
_flycast_seed_darwin_xcode_probe(HAVE_UINT64_T_LIBZIP TRUE)
_flycast_seed_darwin_xcode_probe(UINT64_T_LIBZIP 8)
_flycast_seed_darwin_xcode_probe(HAVE_LONG_LIBZIP TRUE)
_flycast_seed_darwin_xcode_probe(LONG_LIBZIP 8)
_flycast_seed_darwin_xcode_probe(HAVE_LONG_LONG_LIBZIP TRUE)
_flycast_seed_darwin_xcode_probe(LONG_LONG_LIBZIP 8)
_flycast_seed_darwin_xcode_probe(HAVE_SIZEOF_OFF_T TRUE)
_flycast_seed_darwin_xcode_probe(SIZEOF_OFF_T 8)
_flycast_seed_darwin_xcode_probe(HAVE_SIZEOF_SIZE_T TRUE)
_flycast_seed_darwin_xcode_probe(SIZEOF_SIZE_T 8)
unset(_probe)