Skip to content

Commit a930b51

Browse files
committed
[Apple Silicon] Simulator support for arm64
1 parent 40d0024 commit a930b51

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
@@ -421,13 +421,16 @@ function verify_host_is_supported() {
421421
| macosx-arm64e \
422422
| iphonesimulator-i386 \
423423
| iphonesimulator-x86_64 \
424+
| iphonesimulator-arm64 \
424425
| iphoneos-armv7 \
425426
| iphoneos-armv7s \
426427
| iphoneos-arm64 \
427428
| iphoneos-arm64e \
428429
| appletvsimulator-x86_64 \
430+
| appletvsimulator-arm64 \
429431
| appletvos-arm64 \
430432
| watchsimulator-i386 \
433+
| watchsimulator-arm64 \
431434
| watchos-armv7k \
432435
| android-armv7 \
433436
| android-aarch64)
@@ -528,6 +531,21 @@ function set_build_options_for_host() {
528531
SWIFT_HOST_VARIANT_SDK="IOS_SIMULATOR"
529532
cmake_osx_deployment_target=""
530533
;;
534+
iphonesimulator-arm64)
535+
xcrun_sdk_name="iphonesimulator"
536+
llvm_target_arch="AArch64"
537+
SWIFT_HOST_TRIPLE="arm64-apple-ios${DARWIN_DEPLOYMENT_VERSION_IOS}-simulator"
538+
SWIFT_HOST_VARIANT="iphonesimulator"
539+
SWIFT_HOST_VARIANT_SDK="IOS_SIMULATOR"
540+
SWIFT_HOST_VARIANT_ARCH="arm64"
541+
542+
cmake_osx_deployment_target=""
543+
cmark_cmake_options=(
544+
-DCMAKE_C_FLAGS="$(cmark_c_flags ${host})"
545+
-DCMAKE_CXX_FLAGS="$(cmark_c_flags ${host})"
546+
-DCMAKE_OSX_SYSROOT:PATH="$(xcrun --sdk ${xcrun_sdk_name} --show-sdk-path)"
547+
)
548+
;;
531549
iphoneos-armv7)
532550
SWIFT_HOST_TRIPLE="armv7-apple-ios${DARWIN_DEPLOYMENT_VERSION_IOS}"
533551
llvm_target_arch="ARM"
@@ -563,6 +581,21 @@ function set_build_options_for_host() {
563581
SWIFT_HOST_VARIANT_SDK="TVOS_SIMULATOR"
564582
cmake_osx_deployment_target=""
565583
;;
584+
appletvsimulator-arm64)
585+
xcrun_sdk_name="appletvsimulator"
586+
llvm_target_arch="AArch64"
587+
SWIFT_HOST_TRIPLE="arm64-apple-tvos${DARWIN_DEPLOYMENT_VERSION_IOS}-simulator"
588+
SWIFT_HOST_VARIANT="appletvsimulator"
589+
SWIFT_HOST_VARIANT_SDK="TVOS_SIMULATOR"
590+
SWIFT_HOST_VARIANT_ARCH="arm64"
591+
592+
cmake_osx_deployment_target=""
593+
cmark_cmake_options=(
594+
-DCMAKE_C_FLAGS="$(cmark_c_flags ${host})"
595+
-DCMAKE_CXX_FLAGS="$(cmark_c_flags ${host})"
596+
-DCMAKE_OSX_SYSROOT:PATH="$(xcrun --sdk ${xcrun_sdk_name} --show-sdk-path)"
597+
)
598+
;;
566599
appletvos-arm64)
567600
SWIFT_HOST_TRIPLE="arm64-apple-tvos${DARWIN_DEPLOYMENT_VERSION_TVOS}"
568601
llvm_target_arch="AArch64"
@@ -577,6 +610,21 @@ function set_build_options_for_host() {
577610
SWIFT_HOST_VARIANT_SDK="WATCHOS_SIMULATOR"
578611
cmake_osx_deployment_target=""
579612
;;
613+
watchsimulator-arm64)
614+
xcrun_sdk_name="watchsimulator"
615+
llvm_target_arch="AArch64"
616+
SWIFT_HOST_TRIPLE="arm64-apple-watchos${DARWIN_DEPLOYMENT_VERSION_IOS}-simulator"
617+
SWIFT_HOST_VARIANT="watchsimulator"
618+
SWIFT_HOST_VARIANT_SDK="WATCHOS_SIMULATOR"
619+
SWIFT_HOST_VARIANT_ARCH="arm64"
620+
621+
cmake_osx_deployment_target=""
622+
cmark_cmake_options=(
623+
-DCMAKE_C_FLAGS="$(cmark_c_flags ${host})"
624+
-DCMAKE_CXX_FLAGS="$(cmark_c_flags ${host})"
625+
-DCMAKE_OSX_SYSROOT:PATH="$(xcrun --sdk ${xcrun_sdk_name} --show-sdk-path)"
626+
)
627+
;;
580628
watchos-armv7k)
581629
SWIFT_HOST_TRIPLE="armv7k-apple-watchos${DARWIN_DEPLOYMENT_VERSION_WATCHOS}"
582630
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)