Skip to content

Commit 00a9c11

Browse files
committed
[Apple Silicon] [Platform] Baseline arm64 simulators at iOS/tvOS 14.0 and watchOS 7.0.
1 parent 795c363 commit 00a9c11

File tree

3 files changed

+36
-9
lines changed

3 files changed

+36
-9
lines changed

lib/AST/Availability.cpp

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -315,25 +315,27 @@ AvailabilityContext ASTContext::getSwift52Availability() {
315315
if (target.getArchName() == "arm64e")
316316
return AvailabilityContext::alwaysAvailable();
317317

318-
if (target.isMacOSX() ) {
318+
if (target.isMacOSX()) {
319319
if (target.isAArch64())
320320
return AvailabilityContext::alwaysAvailable();
321321

322322
return AvailabilityContext(
323-
VersionRange::allGTE(llvm::VersionTuple(10, 99, 0)));
323+
VersionRange::allGTE(llvm::VersionTuple(10, 15, 4)));
324324
} else if (target.isiOS()) {
325325
if (target.isAArch64() &&
326326
(target.isSimulatorEnvironment() || target.isMacCatalystEnvironment()))
327327
return AvailabilityContext::alwaysAvailable();
328328

329329
return AvailabilityContext(
330-
VersionRange::allGTE(llvm::VersionTuple(99, 0, 0)));
330+
VersionRange::allGTE(llvm::VersionTuple(13, 4, 0)));
331331
} else if (target.isWatchOS()) {
332+
if (target.isArch64Bit())
333+
return AvailabilityContext::alwaysAvailable();
334+
332335
return AvailabilityContext(
333-
VersionRange::allGTE(llvm::VersionTuple(9, 99, 0)));
334-
} else {
335-
return AvailabilityContext::alwaysAvailable();
336+
VersionRange::allGTE(llvm::VersionTuple(6, 2, 0)));
336337
}
338+
return AvailabilityContext::alwaysAvailable();
337339
}
338340

339341
AvailabilityContext ASTContext::getSwift53Availability() {
@@ -346,18 +348,24 @@ AvailabilityContext ASTContext::getSwift53Availability() {
346348
if (target.isAArch64())
347349
return AvailabilityContext::alwaysAvailable();
348350

351+
llvm::VersionTuple macOVersion53(10, 16, 0);
352+
macOVersion53 = canonicalizePlatformVersion(PlatformKind::OSX, macOVersion53);
349353
return AvailabilityContext(
350-
VersionRange::allGTE(llvm::VersionTuple(10, 99, 0)));
354+
VersionRange::allGTE(llvm::VersionTuple(10, 16, 0)));
355+
VersionRange::allGTE(macOVersion53));
351356
} else if (target.isiOS()) {
352357
if (target.isAArch64() &&
353358
(target.isSimulatorEnvironment() || target.isMacCatalystEnvironment()))
354359
return AvailabilityContext::alwaysAvailable();
355360

356361
return AvailabilityContext(
357-
VersionRange::allGTE(llvm::VersionTuple(99, 0, 0)));
362+
VersionRange::allGTE(llvm::VersionTuple(14, 0, 0)));
358363
} else if (target.isWatchOS()) {
364+
if (target.isArch64Bit())
365+
return AvailabilityContext::alwaysAvailable();
366+
359367
return AvailabilityContext(
360-
VersionRange::allGTE(llvm::VersionTuple(9, 99, 0)));
368+
VersionRange::allGTE(llvm::VersionTuple(7, 0, 0)));
361369
} else {
362370
return AvailabilityContext::alwaysAvailable();
363371
}

lib/Driver/DarwinToolChains.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,16 @@ toolchains::Darwin::addDeploymentTargetArgs(ArgStringList &Arguments,
632632
case DarwinPlatformKind::TvOS:
633633
case DarwinPlatformKind::TvOSSimulator:
634634
triple.getiOSVersion(major, minor, micro);
635+
636+
// The first deployment of arm64 simulators is iOS/tvOS 14.0;
637+
// the linker doesn't want to see a deployment target before that.
638+
if (triple.isSimulatorEnvironment() && triple.isAArch64() &&
639+
major < 14) {
640+
major = 14;
641+
minor = 0;
642+
micro = 0;
643+
}
644+
635645
break;
636646
case DarwinPlatformKind::WatchOS:
637647
case DarwinPlatformKind::WatchOSSimulator:

test/Driver/linker.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,22 @@
113113
// RUN: %swiftc_driver -sdk "" -driver-print-jobs -target x86_64-apple-macosx11.0 %s 2>&1 | %FileCheck -check-prefix X86_MACOS11_LINKER %s
114114
// RUN: %swiftc_driver -sdk "" -driver-print-jobs -target arm64-apple-macosx11.0 %s 2>&1 | %FileCheck -check-prefix ARM64E_MACOS_LINKER %s
115115

116+
// Check arm64 simulators first deployment version adjustment.
117+
// RUN: %swiftc_driver -sdk "" -driver-print-jobs -target arm64-apple-ios13.0-simulator %s 2>&1 | %FileCheck -check-prefix ARM64_IOS_SIMULATOR_LINKER %s
118+
// RUN: %swiftc_driver -sdk "" -driver-print-jobs -target arm64-apple-tvos13.0-simulator %s 2>&1 | %FileCheck -check-prefix ARM64_TVOS_SIMULATOR_LINKER %s
119+
// RUN: %swiftc_driver -sdk "" -driver-print-jobs -target arm64-apple-watchos5.0-simulator %s 2>&1 | %FileCheck -check-prefix ARM64_WATCHOS_SIMULATOR_LINKER %s
120+
121+
116122
// MACOS_10_15: -platform_version macos 10.9.0 10.15.0
117123
// MACOS_10_15_4: -platform_version macos 10.9.0 10.15.4
118124
// MACOS_UNVERSIONED: -platform_version macos 10.9.0 0.0.0
119125

120126
// ARM64E_MACOS_LINKER: -platform_version macos 11.0.0
121127
// X86_MACOS11_LINKER: -platform_version macos 10.16.0
122128
// X86_64_WATCHOS_SIM_LINKER: -platform_version watchos-simulator 7.0.0
129+
// ARM64_IOS_SIMULATOR_LINKER: -platform_version ios-simulator 14.0.0
130+
// ARM64_TVOS_SIMULATOR_LINKER: -platform_version tvos-simulator 14.0.0
131+
// ARM64_WATCHOS_SIMULATOR_LINKER: -platform_version watchos-simulator 7.0.0
123132

124133
// There are more RUN lines further down in the file.
125134

0 commit comments

Comments
 (0)