Skip to content

Commit 795c363

Browse files
committed
[Apple Silicon] Simulator support for arm64
1 parent 8364ec9 commit 795c363

File tree

3 files changed

+73
-7
lines changed

3 files changed

+73
-7
lines changed

cmake/modules/DarwinSDKs.cmake

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,35 @@ option(SWIFT_ENABLE_IOS32
44

55
if(SWIFT_ENABLE_IOS32)
66
set(SUPPORTED_IOS_ARCHS "armv7;armv7s;arm64;arm64e")
7-
set(SUPPORTED_IOS_SIMULATOR_ARCHS "i386;x86_64")
7+
set(SUPPORTED_IOS_SIMULATOR_ARCHS "i386;x86_64;arm64")
88
else()
99
set(SUPPORTED_IOS_ARCHS "arm64;arm64e")
10-
set(SUPPORTED_IOS_SIMULATOR_ARCHS "x86_64")
10+
set(SUPPORTED_IOS_SIMULATOR_ARCHS "x86_64;arm64")
1111
endif()
1212

1313
set(SUPPORTED_TVOS_ARCHS "arm64")
14-
set(SUPPORTED_TVOS_SIMULATOR_ARCHS "x86_64")
14+
set(SUPPORTED_TVOS_SIMULATOR_ARCHS "x86_64;arm64")
1515
set(SUPPORTED_WATCHOS_ARCHS "armv7k")
16-
set(SUPPORTED_WATCHOS_SIMULATOR_ARCHS "i386")
16+
set(SUPPORTED_WATCHOS_SIMULATOR_ARCHS "i386;arm64")
1717
set(SUPPORTED_OSX_ARCHS "x86_64;arm64;arm64e")
1818

19+
# Get the SDK version from SDKSettings.
20+
execute_process(
21+
COMMAND "defaults" "read" "${CMAKE_OSX_SYSROOT}/SDKSettings.plist" "Version"
22+
OUTPUT_VARIABLE SWIFT_OSX_SDK_VERSION
23+
OUTPUT_STRIP_TRAILING_WHITESPACE)
24+
25+
# Remove the last component, if any. e.g. 10.15.26 -> 10.15
26+
string(REGEX REPLACE "\([0-9]*[.][0-9]*\)[.][0-9]*" "\\1"
27+
SWIFT_OSX_SDK_VERSION "${SWIFT_OSX_SDK_VERSION}")
28+
29+
if (${SWIFT_OSX_SDK_VERSION} STREQUAL "10.14" OR
30+
${SWIFT_OSX_SDK_VERSION} STREQUAL "10.15")
31+
set(SUPPORTED_OSX_ARCHS "x86_64")
32+
else()
33+
set(SUPPORTED_OSX_ARCHS "x86_64;arm64e")
34+
endif()
35+
1936
is_sdk_requested(OSX swift_build_osx)
2037
if(swift_build_osx)
2138
configure_sdk_darwin(

utils/build-script-impl

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,13 +420,16 @@ function verify_host_is_supported() {
420420
| macosx-arm64e \
421421
| iphonesimulator-i386 \
422422
| iphonesimulator-x86_64 \
423+
| iphonesimulator-arm64 \
423424
| iphoneos-armv7 \
424425
| iphoneos-armv7s \
425426
| iphoneos-arm64 \
426427
| iphoneos-arm64e \
427428
| appletvsimulator-x86_64 \
429+
| appletvsimulator-arm64 \
428430
| appletvos-arm64 \
429431
| watchsimulator-i386 \
432+
| watchsimulator-arm64 \
430433
| watchos-armv7k \
431434
| android-armv7 \
432435
| android-aarch64)
@@ -527,6 +530,21 @@ function set_build_options_for_host() {
527530
SWIFT_HOST_VARIANT_SDK="IOS_SIMULATOR"
528531
cmake_osx_deployment_target=""
529532
;;
533+
iphonesimulator-arm64)
534+
xcrun_sdk_name="iphonesimulator"
535+
llvm_target_arch="AArch64"
536+
SWIFT_HOST_TRIPLE="arm64-apple-ios${DARWIN_DEPLOYMENT_VERSION_IOS}-simulator"
537+
SWIFT_HOST_VARIANT="iphonesimulator"
538+
SWIFT_HOST_VARIANT_SDK="IOS_SIMULATOR"
539+
SWIFT_HOST_VARIANT_ARCH="arm64"
540+
541+
cmake_osx_deployment_target=""
542+
cmark_cmake_options=(
543+
-DCMAKE_C_FLAGS="$(cmark_c_flags ${host})"
544+
-DCMAKE_CXX_FLAGS="$(cmark_c_flags ${host})"
545+
-DCMAKE_OSX_SYSROOT:PATH="$(xcrun --sdk ${xcrun_sdk_name} --show-sdk-path)"
546+
)
547+
;;
530548
iphoneos-armv7)
531549
SWIFT_HOST_TRIPLE="armv7-apple-ios${DARWIN_DEPLOYMENT_VERSION_IOS}"
532550
llvm_target_arch="ARM"
@@ -562,6 +580,21 @@ function set_build_options_for_host() {
562580
SWIFT_HOST_VARIANT_SDK="TVOS_SIMULATOR"
563581
cmake_osx_deployment_target=""
564582
;;
583+
appletvsimulator-arm64)
584+
xcrun_sdk_name="appletvsimulator"
585+
llvm_target_arch="AArch64"
586+
SWIFT_HOST_TRIPLE="arm64-apple-tvos${DARWIN_DEPLOYMENT_VERSION_IOS}-simulator"
587+
SWIFT_HOST_VARIANT="appletvsimulator"
588+
SWIFT_HOST_VARIANT_SDK="TVOS_SIMULATOR"
589+
SWIFT_HOST_VARIANT_ARCH="arm64"
590+
591+
cmake_osx_deployment_target=""
592+
cmark_cmake_options=(
593+
-DCMAKE_C_FLAGS="$(cmark_c_flags ${host})"
594+
-DCMAKE_CXX_FLAGS="$(cmark_c_flags ${host})"
595+
-DCMAKE_OSX_SYSROOT:PATH="$(xcrun --sdk ${xcrun_sdk_name} --show-sdk-path)"
596+
)
597+
;;
565598
appletvos-arm64)
566599
SWIFT_HOST_TRIPLE="arm64-apple-tvos${DARWIN_DEPLOYMENT_VERSION_TVOS}"
567600
llvm_target_arch="AArch64"
@@ -576,6 +609,21 @@ function set_build_options_for_host() {
576609
SWIFT_HOST_VARIANT_SDK="WATCHOS_SIMULATOR"
577610
cmake_osx_deployment_target=""
578611
;;
612+
watchsimulator-arm64)
613+
xcrun_sdk_name="watchsimulator"
614+
llvm_target_arch="AArch64"
615+
SWIFT_HOST_TRIPLE="arm64-apple-watchos${DARWIN_DEPLOYMENT_VERSION_IOS}-simulator"
616+
SWIFT_HOST_VARIANT="watchsimulator"
617+
SWIFT_HOST_VARIANT_SDK="WATCHOS_SIMULATOR"
618+
SWIFT_HOST_VARIANT_ARCH="arm64"
619+
620+
cmake_osx_deployment_target=""
621+
cmark_cmake_options=(
622+
-DCMAKE_C_FLAGS="$(cmark_c_flags ${host})"
623+
-DCMAKE_CXX_FLAGS="$(cmark_c_flags ${host})"
624+
-DCMAKE_OSX_SYSROOT:PATH="$(xcrun --sdk ${xcrun_sdk_name} --show-sdk-path)"
625+
)
626+
;;
579627
watchos-armv7k)
580628
SWIFT_HOST_TRIPLE="armv7k-apple-watchos${DARWIN_DEPLOYMENT_VERSION_WATCHOS}"
581629
llvm_target_arch="ARM"

utils/swift_build_support/swift_build_support/targets.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ class StdlibDeploymentTarget(object):
159159

160160
iOS = DarwinPlatform("iphoneos", archs=["armv7", "armv7s", "arm64", "arm64e"],
161161
sdk_name="IOS")
162-
iOSSimulator = DarwinPlatform("iphonesimulator", archs=["i386", "x86_64"],
162+
iOSSimulator = DarwinPlatform("iphonesimulator", archs=["i386", "x86_64", "arm64"],
163163
sdk_name="IOS_SIMULATOR",
164164
is_simulator=True)
165165

@@ -168,13 +168,14 @@ class StdlibDeploymentTarget(object):
168168

169169
AppleTV = DarwinPlatform("appletvos", archs=["arm64"],
170170
sdk_name="TVOS")
171-
AppleTVSimulator = DarwinPlatform("appletvsimulator", archs=["x86_64"],
171+
AppleTVSimulator = DarwinPlatform("appletvsimulator", archs=["x86_64", "arm64"],
172172
sdk_name="TVOS_SIMULATOR",
173173
is_simulator=True)
174174

175175
AppleWatch = DarwinPlatform("watchos", archs=["armv7k"],
176176
sdk_name="WATCHOS")
177-
AppleWatchSimulator = DarwinPlatform("watchsimulator", archs=["i386"],
177+
178+
AppleWatchSimulator = DarwinPlatform("watchsimulator", archs=["i386", "arm64"],
178179
sdk_name="WATCHOS_SIMULATOR",
179180
is_simulator=True)
180181

0 commit comments

Comments
 (0)