Skip to content

Commit 0363bc6

Browse files
committed
[Explicit Modules] Handle re-mapped platform versions when specifying
SDK-aligned `-clang-target` on Darwin platforms Resolves rdar://108288193
1 parent b8c7ccf commit 0363bc6

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

Sources/SwiftDriver/Toolchains/DarwinToolchain.swift

+3-1
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,9 @@ public final class DarwinToolchain: Toolchain {
415415
if let explicitClangTripleArg = driver.parsedOptions.getLastArgument(.clangTarget)?.asSingle {
416416
clangTargetTriple = explicitClangTripleArg
417417
} else {
418-
clangTargetTriple = frontendTargetInfo.target.unversionedTriple.triple + sdkInfo.versionString
418+
let currentTriple = frontendTargetInfo.target.triple
419+
let sdkVersionedOSString = currentTriple.osNameUnversioned + sdkInfo.sdkVersion(for: currentTriple).sdkVersionString
420+
clangTargetTriple = currentTriple.triple.replacingOccurrences(of: currentTriple.osName, with: sdkVersionedOSString)
419421
}
420422

421423
commandLine.appendFlag(.clangTarget)
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"Version": "10.15",
33
"VersionMap": {
4-
"macOS_iOSMac": {},
5-
"iOSMac_macOS": {}
4+
"macOS_iOSMac": {"10.15":"13.3"},
5+
"iOSMac_macOS": {"13.3":"10.15"}
66
},
77
"CanonicalName": "macosx10.15"
88
}

Tests/SwiftDriverTests/SwiftDriverTests.swift

+24-4
Original file line numberDiff line numberDiff line change
@@ -3685,7 +3685,7 @@ final class SwiftDriverTests: XCTestCase {
36853685

36863686
func testClangTargetForExplicitModule() throws {
36873687
#if os(macOS)
3688-
let sdkRoot = testInputsPath.appending(component: "SDKChecks").appending(component: "iPhoneOS.sdk")
3688+
let sdkRoot = testInputsPath.appending(component: "SDKChecks").appending(component: "MacOSX10.15.sdk")
36893689

36903690
// Check -clang-target is on by default when explicit module is on.
36913691
try withTemporaryDirectory { path in
@@ -3694,17 +3694,37 @@ final class SwiftDriverTests: XCTestCase {
36943694
$0 <<< "import Swift"
36953695
}
36963696
var driver = try Driver(args: ["swiftc", "-explicit-module-build",
3697-
"-target", "arm64-apple-ios14.0",
3697+
"-target", "arm64-apple-macos10.14",
3698+
"-sdk", sdkRoot.pathString,
3699+
main.pathString])
3700+
guard driver.isFrontendArgSupported(.clangTarget) else {
3701+
throw XCTSkip("Skipping: compiler does not support '-clang-target'")
3702+
}
3703+
let plannedJobs = try driver.planBuild()
3704+
XCTAssertTrue(plannedJobs.contains { job in
3705+
job.commandLine.contains(subsequence: [.flag("-clang-target"), .flag("arm64-apple-macos10.15")])
3706+
})
3707+
}
3708+
3709+
// Check -clang-target is handled correctly with the MacCatalyst remap.
3710+
try withTemporaryDirectory { path in
3711+
let main = path.appending(component: "Foo.swift")
3712+
try localFileSystem.writeFileContents(main) {
3713+
$0 <<< "import Swift"
3714+
}
3715+
var driver = try Driver(args: ["swiftc", "-explicit-module-build",
3716+
"-target", "arm64e-apple-ios13.0-macabi",
36983717
"-sdk", sdkRoot.pathString,
36993718
main.pathString])
37003719
guard driver.isFrontendArgSupported(.clangTarget) else {
37013720
throw XCTSkip("Skipping: compiler does not support '-clang-target'")
37023721
}
37033722
let plannedJobs = try driver.planBuild()
37043723
XCTAssertTrue(plannedJobs.contains { job in
3705-
job.commandLine.contains(subsequence: [.flag("-clang-target"), .flag("arm64-apple-ios13.0")])
3724+
job.commandLine.contains(subsequence: [.flag("-clang-target"), .flag("arm64e-apple-ios13.3-macabi")])
37063725
})
37073726
}
3727+
37083728
// Check -disable-clang-target works
37093729
try withTemporaryDirectory { path in
37103730
let main = path.appending(component: "Foo.swift")
@@ -3713,7 +3733,7 @@ final class SwiftDriverTests: XCTestCase {
37133733
}
37143734
var driver = try Driver(args: ["swiftc", "-disable-clang-target",
37153735
"-explicit-module-build",
3716-
"-target", "arm64-apple-ios14.0",
3736+
"-target", "arm64-apple-macos10.14",
37173737
"-sdk", sdkRoot.pathString,
37183738
main.pathString])
37193739
guard driver.isFrontendArgSupported(.clangTarget) else {

0 commit comments

Comments
 (0)