diff --git a/compiler-rt/cmake/builtin-config-ix.cmake b/compiler-rt/cmake/builtin-config-ix.cmake --- a/compiler-rt/cmake/builtin-config-ix.cmake +++ b/compiler-rt/cmake/builtin-config-ix.cmake @@ -80,33 +80,41 @@ # Get supported architecture from SDKSettings. function(sdk_has_arch_support sdk_path os arch has_support) + set(sdk_json "${sdk_path}/SDKSettings.json") + # We can switch to string(JSON) once our minimum CMake version is 3.19+. execute_process(COMMAND - /usr/libexec/PlistBuddy -c "Print :SupportedTargets:${os}:Archs" ${sdk_path}/SDKSettings.plist - OUTPUT_VARIABLE SDK_SUPPORTED_ARCHS - RESULT_VARIABLE PLIST_ERROR + "${Python3_EXECUTABLE}" -c + # `not in` so that our exit code is 0 (success) if the arch is found + "import json; exit('${arch}' not in json.load(open('${sdk_json}'))['SupportedTargets']['${os}']['Archs'])" + RESULT_VARIABLE ARCH_FIND_RESULT ERROR_QUIET) - if (PLIST_ERROR EQUAL 0 AND - SDK_SUPPORTED_ARCHS MATCHES " ${arch}\n") - message(STATUS "Found ${arch} support in ${sdk_path}/SDKSettings.plist") + if (ARCH_FIND_RESULT EQUAL 0) + message(STATUS "Found ${arch} support in ${sdk_json}") set("${has_support}" On PARENT_SCOPE) else() - message(STATUS "No ${arch} support in ${sdk_path}/SDKSettings.plist") + message(STATUS "No ${arch} support in ${sdk_json}") set("${has_support}" Off PARENT_SCOPE) endif() endfunction() + # Add support for arm64 if available in SDK. + function(add_arm64_if_supported sdk_path os archs_var) + set(local_archs ${${archs_var}}) + foreach(arch ${ARM64}) + sdk_has_arch_support(${sdk_path} ${os} ${arch} has_support) + if(has_support) + list(APPEND local_archs ${arch}) + endif() + endforeach() + set(${archs_var} ${local_archs} PARENT_SCOPE) + endfunction() + set(DARWIN_EMBEDDED_PLATFORMS) set(DARWIN_osx_BUILTIN_MIN_VER 10.5) set(DARWIN_osx_BUILTIN_MIN_VER_FLAG -mmacosx-version-min=${DARWIN_osx_BUILTIN_MIN_VER}) set(DARWIN_osx_BUILTIN_ALL_POSSIBLE_ARCHS ${X86} ${X86_64}) - # Add support for arm64 macOS if available in SDK. - foreach(arch ${ARM64}) - sdk_has_arch_support(${DARWIN_osx_SYSROOT} macosx ${arch} MACOS_ARM_SUPPORT) - if (MACOS_ARM_SUPPORT) - list(APPEND DARWIN_osx_BUILTIN_ALL_POSSIBLE_ARCHS ${arch}) - endif() - endforeach(arch) + add_arm64_if_supported(${DARWIN_osx_SYSROOT} macosx DARWIN_osx_BUILTIN_ALL_POSSIBLE_ARCHS) if(COMPILER_RT_ENABLE_IOS) list(APPEND DARWIN_EMBEDDED_PLATFORMS ios) @@ -116,10 +124,7 @@ ${DARWIN_ios_MIN_VER_FLAG}=${DARWIN_ios_BUILTIN_MIN_VER}) set(DARWIN_ios_BUILTIN_ALL_POSSIBLE_ARCHS ${ARM64} ${ARM32}) set(DARWIN_iossim_BUILTIN_ALL_POSSIBLE_ARCHS ${X86} ${X86_64}) - find_darwin_sdk_version(iossim_sdk_version "iphonesimulator") - if ("${iossim_sdk_version}" VERSION_GREATER 14.0 OR "${iossim_sdk_version}" VERSION_EQUAL 14.0) - list(APPEND DARWIN_iossim_BUILTIN_ALL_POSSIBLE_ARCHS arm64) - endif() + add_arm64_if_supported(${DARWIN_iossim_SYSROOT} iphonesimulator DARWIN_iossim_BUILTIN_ALL_POSSIBLE_ARCHS) endif() if(COMPILER_RT_ENABLE_WATCHOS) list(APPEND DARWIN_EMBEDDED_PLATFORMS watchos) @@ -129,10 +134,7 @@ ${DARWIN_watchos_MIN_VER_FLAG}=${DARWIN_watchos_BUILTIN_MIN_VER}) set(DARWIN_watchos_BUILTIN_ALL_POSSIBLE_ARCHS armv7 armv7k arm64_32) set(DARWIN_watchossim_BUILTIN_ALL_POSSIBLE_ARCHS ${X86}) - find_darwin_sdk_version(watchossim_sdk_version "watchsimulator") - if ("${watchossim_sdk_version}" VERSION_GREATER 7.0 OR "${watchossim_sdk_version}" VERSION_EQUAL 7.0) - list(APPEND DARWIN_watchossim_BUILTIN_ALL_POSSIBLE_ARCHS arm64) - endif() + add_arm64_if_supported(${DARWIN_watchossim_SYSROOT} watchsimulator DARWIN_watchossim_BUILTIN_ALL_POSSIBLE_ARCHS) endif() if(COMPILER_RT_ENABLE_TVOS) list(APPEND DARWIN_EMBEDDED_PLATFORMS tvos) @@ -142,10 +144,7 @@ ${DARWIN_tvos_MIN_VER_FLAG}=${DARWIN_tvos_BUILTIN_MIN_VER}) set(DARWIN_tvos_BUILTIN_ALL_POSSIBLE_ARCHS armv7 arm64) set(DARWIN_tvossim_BUILTIN_ALL_POSSIBLE_ARCHS ${X86} ${X86_64}) - find_darwin_sdk_version(tvossim_sdk_version "appletvsimulator") - if ("${tvossim_sdk_version}" VERSION_GREATER 14.0 OR "${tvossim_sdk_version}" VERSION_EQUAL 14.0) - list(APPEND DARWIN_tvossim_BUILTIN_ALL_POSSIBLE_ARCHS arm64) - endif() + add_arm64_if_supported(${DARWIN_tvossim_SYSROOT} appletvsimulator DARWIN_tvossim_BUILTIN_ALL_POSSIBLE_ARCHS) endif() set(BUILTIN_SUPPORTED_OS osx)