From d68bed83979ba3f61ee000c131c9dfd18eef040b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 7 Apr 2026 12:42:45 +0200 Subject: [PATCH] Apple: Treat arm64 as matching arm64e when resolving arch sysroots Xcode 26.4's iPhoneOS SDK advertises arm64e (not arm64) in libSystem.tbd. After stripping the platform suffix, the arch list contains arm64e, which doesn't match when CMAKE_OSX_ARCHITECTURES includes arm64. As a result, arm64 falls through to the simulator SDK, silently breaking iOS device builds. Since arm64e is a superset of arm64 (all arm64e devices run arm64 binaries), we now fall back to checking for arm64e when arm64 is not found in an SDK's architecture list. --- Modules/Platform/Darwin-Initialize.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Modules/Platform/Darwin-Initialize.cmake b/Modules/Platform/Darwin-Initialize.cmake index d518ac9779..fe42de163d 100644 --- a/Modules/Platform/Darwin-Initialize.cmake +++ b/Modules/Platform/Darwin-Initialize.cmake @@ -222,6 +222,10 @@ function(_apple_resolve_multi_arch_sysroots) set(_arch_sysroot "") foreach(sdk ${_sdks}) list(FIND _sdk_archs_${sdk} ${arch} arch_index) + # arm64e is a superset of arm64; an SDK listing arm64e supports arm64 binaries. + if(arch_index EQUAL -1 AND arch STREQUAL "arm64") + list(FIND _sdk_archs_${sdk} "arm64e" arch_index) + endif() if(NOT arch_index EQUAL -1) set(_arch_sysroot ${_sdk_path_${sdk}}) break()