Skip to content

Commit cdf0304

Browse files
committed
Specify -clang-target only when explicit module is on
We should turn clang target on for implicit module when we are confident the feature works nicely in explicit module builds.
1 parent 32d4c18 commit cdf0304

File tree

2 files changed

+38
-14
lines changed

2 files changed

+38
-14
lines changed

Sources/SwiftDriver/Jobs/FrontendJobHelpers.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,10 @@ extension Driver {
6868

6969
// Pass down -clang-target.
7070
// If not specified otherwise, we should use the same triple as -target
71+
// TODO: enable -clang-target for implicit module build as well.
7172
if !parsedOptions.hasArgument(.disableClangTarget) &&
72-
isFrontendArgSupported(.clangTarget) {
73+
isFrontendArgSupported(.clangTarget) &&
74+
parsedOptions.contains(.driverExplicitModuleBuild) {
7375
let clangTriple = parsedOptions.getLastArgument(.clangTarget)?.asSingle ?? targetTriple.triple
7476
commandLine.appendFlag(.clangTarget)
7577
commandLine.appendFlag(clangTriple)

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2490,23 +2490,45 @@ final class SwiftDriverTests: XCTestCase {
24902490
}
24912491
}
24922492

2493-
func testClangTarget() throws {
2494-
var driver = try Driver(args: ["swiftc", "-target",
2495-
"x86_64-apple-macosx10.14", "foo.swift", "bar.swift"])
2496-
guard driver.isFrontendArgSupported(.clangTarget) else {
2497-
throw XCTSkip("Skipping: compiler does not support '-clang-target'")
2493+
func testClangTargetForExplicitModule() throws {
2494+
// Check -clang-target is on by defualt when explicit module is on.
2495+
try withTemporaryDirectory { path in
2496+
let main = path.appending(component: "Foo.swift")
2497+
try localFileSystem.writeFileContents(main) {
2498+
$0 <<< "import Swift"
2499+
}
2500+
var driver = try Driver(args: ["swiftc", "-experimental-explicit-module-build", "-target",
2501+
"x86_64-apple-macosx10.14", main.pathString])
2502+
guard driver.isFrontendArgSupported(.clangTarget) else {
2503+
throw XCTSkip("Skipping: compiler does not support '-clang-target'")
2504+
}
2505+
let plannedJobs = try driver.planBuild()
2506+
XCTAssertTrue(plannedJobs.contains { job in
2507+
job.commandLine.contains(.flag("-clang-target"))
2508+
})
2509+
}
2510+
// Check -disable-clang-target works
2511+
try withTemporaryDirectory { path in
2512+
let main = path.appending(component: "Foo.swift")
2513+
try localFileSystem.writeFileContents(main) {
2514+
$0 <<< "import Swift"
2515+
}
2516+
var driver = try Driver(args: ["swiftc", "-disable-clang-target",
2517+
"-experimental-explicit-module-build", "-target",
2518+
"x86_64-apple-macosx10.14", main.pathString])
2519+
guard driver.isFrontendArgSupported(.clangTarget) else {
2520+
throw XCTSkip("Skipping: compiler does not support '-clang-target'")
2521+
}
2522+
let plannedJobs = try driver.planBuild()
2523+
XCTAssertFalse(plannedJobs.contains { job in
2524+
job.commandLine.contains(.flag("-clang-target"))
2525+
})
24982526
}
2499-
let plannedJobs = try driver.planBuild()
2500-
XCTAssertEqual(plannedJobs.count, 3)
2501-
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-target")))
2502-
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-clang-target")))
2503-
XCTAssert(plannedJobs[1].commandLine.contains(.flag("-target")))
2504-
XCTAssert(plannedJobs[1].commandLine.contains(.flag("-clang-target")))
25052527
}
25062528

2507-
func testDisableClangTarget() throws {
2529+
func testDisableClangTargetForImplicitModule() throws {
25082530
var driver = try Driver(args: ["swiftc", "-target",
2509-
"x86_64-apple-macosx10.14", "foo.swift", "-disable-clang-target"])
2531+
"x86_64-apple-macosx10.14", "foo.swift"])
25102532
let plannedJobs = try driver.planBuild()
25112533
XCTAssertEqual(plannedJobs.count, 2)
25122534
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-target")))

0 commit comments

Comments
 (0)