diff --git a/Sources/SwiftDriver/Jobs/FrontendJobHelpers.swift b/Sources/SwiftDriver/Jobs/FrontendJobHelpers.swift index 0ec11adad..f2e21857c 100644 --- a/Sources/SwiftDriver/Jobs/FrontendJobHelpers.swift +++ b/Sources/SwiftDriver/Jobs/FrontendJobHelpers.swift @@ -68,8 +68,10 @@ extension Driver { // Pass down -clang-target. // If not specified otherwise, we should use the same triple as -target + // TODO: enable -clang-target for implicit module build as well. if !parsedOptions.hasArgument(.disableClangTarget) && - isFrontendArgSupported(.clangTarget) { + isFrontendArgSupported(.clangTarget) && + parsedOptions.contains(.driverExplicitModuleBuild) { let clangTriple = parsedOptions.getLastArgument(.clangTarget)?.asSingle ?? targetTriple.triple commandLine.appendFlag(.clangTarget) commandLine.appendFlag(clangTriple) diff --git a/Tests/SwiftDriverTests/SwiftDriverTests.swift b/Tests/SwiftDriverTests/SwiftDriverTests.swift index 6f66016ca..e060a84e2 100644 --- a/Tests/SwiftDriverTests/SwiftDriverTests.swift +++ b/Tests/SwiftDriverTests/SwiftDriverTests.swift @@ -2490,23 +2490,45 @@ final class SwiftDriverTests: XCTestCase { } } - func testClangTarget() throws { - var driver = try Driver(args: ["swiftc", "-target", - "x86_64-apple-macosx10.14", "foo.swift", "bar.swift"]) - guard driver.isFrontendArgSupported(.clangTarget) else { - throw XCTSkip("Skipping: compiler does not support '-clang-target'") + func testClangTargetForExplicitModule() throws { + // Check -clang-target is on by defualt when explicit module is on. + try withTemporaryDirectory { path in + let main = path.appending(component: "Foo.swift") + try localFileSystem.writeFileContents(main) { + $0 <<< "import Swift" + } + var driver = try Driver(args: ["swiftc", "-experimental-explicit-module-build", "-target", + "x86_64-apple-macosx10.14", 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(.flag("-clang-target")) + }) + } + // Check -disable-clang-target works + try withTemporaryDirectory { path in + let main = path.appending(component: "Foo.swift") + try localFileSystem.writeFileContents(main) { + $0 <<< "import Swift" + } + var driver = try Driver(args: ["swiftc", "-disable-clang-target", + "-experimental-explicit-module-build", "-target", + "x86_64-apple-macosx10.14", main.pathString]) + guard driver.isFrontendArgSupported(.clangTarget) else { + throw XCTSkip("Skipping: compiler does not support '-clang-target'") + } + let plannedJobs = try driver.planBuild() + XCTAssertFalse(plannedJobs.contains { job in + job.commandLine.contains(.flag("-clang-target")) + }) } - let plannedJobs = try driver.planBuild() - XCTAssertEqual(plannedJobs.count, 3) - XCTAssert(plannedJobs[0].commandLine.contains(.flag("-target"))) - XCTAssert(plannedJobs[0].commandLine.contains(.flag("-clang-target"))) - XCTAssert(plannedJobs[1].commandLine.contains(.flag("-target"))) - XCTAssert(plannedJobs[1].commandLine.contains(.flag("-clang-target"))) } - func testDisableClangTarget() throws { + func testDisableClangTargetForImplicitModule() throws { var driver = try Driver(args: ["swiftc", "-target", - "x86_64-apple-macosx10.14", "foo.swift", "-disable-clang-target"]) + "x86_64-apple-macosx10.14", "foo.swift"]) let plannedJobs = try driver.planBuild() XCTAssertEqual(plannedJobs.count, 2) XCTAssert(plannedJobs[0].commandLine.contains(.flag("-target")))