diff --git a/Sources/SwiftDriver/Toolchains/DarwinToolchain.swift b/Sources/SwiftDriver/Toolchains/DarwinToolchain.swift index 624bb3ac5..c1a7b45ae 100644 --- a/Sources/SwiftDriver/Toolchains/DarwinToolchain.swift +++ b/Sources/SwiftDriver/Toolchains/DarwinToolchain.swift @@ -415,7 +415,9 @@ public final class DarwinToolchain: Toolchain { if let explicitClangTripleArg = driver.parsedOptions.getLastArgument(.clangTarget)?.asSingle { clangTargetTriple = explicitClangTripleArg } else { - clangTargetTriple = frontendTargetInfo.target.unversionedTriple.triple + sdkInfo.versionString + let currentTriple = frontendTargetInfo.target.triple + let sdkVersionedOSString = currentTriple.osNameUnversioned + sdkInfo.sdkVersion(for: currentTriple).sdkVersionString + clangTargetTriple = currentTriple.triple.replacingOccurrences(of: currentTriple.osName, with: sdkVersionedOSString) } commandLine.appendFlag(.clangTarget) diff --git a/TestInputs/SDKChecks/MacOSX10.15.sdk/SDKSettings.json b/TestInputs/SDKChecks/MacOSX10.15.sdk/SDKSettings.json index 83d658d17..8287192c1 100644 --- a/TestInputs/SDKChecks/MacOSX10.15.sdk/SDKSettings.json +++ b/TestInputs/SDKChecks/MacOSX10.15.sdk/SDKSettings.json @@ -1,8 +1,8 @@ { "Version": "10.15", "VersionMap": { - "macOS_iOSMac": {}, - "iOSMac_macOS": {} + "macOS_iOSMac": {"10.15":"13.3"}, + "iOSMac_macOS": {"13.3":"10.15"} }, "CanonicalName": "macosx10.15" } diff --git a/Tests/SwiftDriverTests/SwiftDriverTests.swift b/Tests/SwiftDriverTests/SwiftDriverTests.swift index 590b01735..75155dcca 100644 --- a/Tests/SwiftDriverTests/SwiftDriverTests.swift +++ b/Tests/SwiftDriverTests/SwiftDriverTests.swift @@ -3685,7 +3685,7 @@ final class SwiftDriverTests: XCTestCase { func testClangTargetForExplicitModule() throws { #if os(macOS) - let sdkRoot = testInputsPath.appending(component: "SDKChecks").appending(component: "iPhoneOS.sdk") + let sdkRoot = testInputsPath.appending(component: "SDKChecks").appending(component: "MacOSX10.15.sdk") // Check -clang-target is on by default when explicit module is on. try withTemporaryDirectory { path in @@ -3694,7 +3694,26 @@ final class SwiftDriverTests: XCTestCase { $0 <<< "import Swift" } var driver = try Driver(args: ["swiftc", "-explicit-module-build", - "-target", "arm64-apple-ios14.0", + "-target", "arm64-apple-macos10.14", + "-sdk", sdkRoot.pathString, + main.pathString]) + guard driver.isFrontendArgSupported(.clangTarget) else { + throw XCTSkip("Skipping: compiler does not support '-clang-target'") + } + let plannedJobs = try driver.planBuild() + XCTAssertTrue(plannedJobs.contains { job in + job.commandLine.contains(subsequence: [.flag("-clang-target"), .flag("arm64-apple-macos10.15")]) + }) + } + + // Check -clang-target is handled correctly with the MacCatalyst remap. + try withTemporaryDirectory { path in + let main = path.appending(component: "Foo.swift") + try localFileSystem.writeFileContents(main) { + $0 <<< "import Swift" + } + var driver = try Driver(args: ["swiftc", "-explicit-module-build", + "-target", "arm64e-apple-ios13.0-macabi", "-sdk", sdkRoot.pathString, main.pathString]) guard driver.isFrontendArgSupported(.clangTarget) else { @@ -3702,9 +3721,10 @@ final class SwiftDriverTests: XCTestCase { } let plannedJobs = try driver.planBuild() XCTAssertTrue(plannedJobs.contains { job in - job.commandLine.contains(subsequence: [.flag("-clang-target"), .flag("arm64-apple-ios13.0")]) + job.commandLine.contains(subsequence: [.flag("-clang-target"), .flag("arm64e-apple-ios13.3-macabi")]) }) } + // Check -disable-clang-target works try withTemporaryDirectory { path in let main = path.appending(component: "Foo.swift") @@ -3713,7 +3733,7 @@ final class SwiftDriverTests: XCTestCase { } var driver = try Driver(args: ["swiftc", "-disable-clang-target", "-explicit-module-build", - "-target", "arm64-apple-ios14.0", + "-target", "arm64-apple-macos10.14", "-sdk", sdkRoot.pathString, main.pathString]) guard driver.isFrontendArgSupported(.clangTarget) else {