Skip to content

Commit d45d46f

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

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

Sources/SwiftDriver/Toolchains/DarwinToolchain.swift

Lines changed: 3 additions & 1 deletion
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)
Lines changed: 2 additions & 2 deletions
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

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3747,7 +3747,7 @@ final class SwiftDriverTests: XCTestCase {
37473747

37483748
func testClangTargetForExplicitModule() throws {
37493749
#if os(macOS)
3750-
let sdkRoot = testInputsPath.appending(component: "SDKChecks").appending(component: "iPhoneOS.sdk")
3750+
let sdkRoot = testInputsPath.appending(component: "SDKChecks").appending(component: "MacOSX10.15.sdk")
37513751

37523752
// Check -clang-target is on by default when explicit module is on.
37533753
try withTemporaryDirectory { path in
@@ -3756,17 +3756,37 @@ final class SwiftDriverTests: XCTestCase {
37563756
$0 <<< "import Swift"
37573757
}
37583758
var driver = try Driver(args: ["swiftc", "-explicit-module-build",
3759-
"-target", "arm64-apple-ios14.0",
3759+
"-target", "arm64-apple-macos10.14",
3760+
"-sdk", sdkRoot.pathString,
3761+
main.pathString])
3762+
guard driver.isFrontendArgSupported(.clangTarget) else {
3763+
throw XCTSkip("Skipping: compiler does not support '-clang-target'")
3764+
}
3765+
let plannedJobs = try driver.planBuild()
3766+
XCTAssertTrue(plannedJobs.contains { job in
3767+
job.commandLine.contains(subsequence: [.flag("-clang-target"), .flag("arm64-apple-macos10.15")])
3768+
})
3769+
}
3770+
3771+
// Check -clang-target is handled correctly with the MacCatalyst remap.
3772+
try withTemporaryDirectory { path in
3773+
let main = path.appending(component: "Foo.swift")
3774+
try localFileSystem.writeFileContents(main) {
3775+
$0 <<< "import Swift"
3776+
}
3777+
var driver = try Driver(args: ["swiftc", "-explicit-module-build",
3778+
"-target", "arm64e-apple-ios13.0-macabi",
37603779
"-sdk", sdkRoot.pathString,
37613780
main.pathString])
37623781
guard driver.isFrontendArgSupported(.clangTarget) else {
37633782
throw XCTSkip("Skipping: compiler does not support '-clang-target'")
37643783
}
37653784
let plannedJobs = try driver.planBuild()
37663785
XCTAssertTrue(plannedJobs.contains { job in
3767-
job.commandLine.contains(subsequence: [.flag("-clang-target"), .flag("arm64-apple-ios13.0")])
3786+
job.commandLine.contains(subsequence: [.flag("-clang-target"), .flag("arm64e-apple-ios13.3-macabi")])
37683787
})
37693788
}
3789+
37703790
// Check -disable-clang-target works
37713791
try withTemporaryDirectory { path in
37723792
let main = path.appending(component: "Foo.swift")
@@ -3775,7 +3795,7 @@ final class SwiftDriverTests: XCTestCase {
37753795
}
37763796
var driver = try Driver(args: ["swiftc", "-disable-clang-target",
37773797
"-explicit-module-build",
3778-
"-target", "arm64-apple-ios14.0",
3798+
"-target", "arm64-apple-macos10.14",
37793799
"-sdk", sdkRoot.pathString,
37803800
main.pathString])
37813801
guard driver.isFrontendArgSupported(.clangTarget) else {

0 commit comments

Comments
 (0)