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)