Skip to content

Don't skip the separate compile jobs with emit-module-separately (until other tools are updated) #896

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Nov 4, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion Sources/SwiftDriver/Jobs/Planning.swift
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,11 @@ extension Driver {
}
assert(backendJobs.count <= 1)
addCompileJobGroup(CompileJobGroup(compileJob: compile, backendJob: backendJobs.first))
} else if !canSkipIfOnlyModule {
} else {
// TODO: if !canSkipIfOnlyModule {
// Some other tools still expect the partial jobs. Bring this check
// back once they are updated. rdar://84979778

// We can skip the compile jobs if all we want is a module when it's
// built separately.
let compile = try compileJob(primaryInputs: [primaryInput],
Expand Down
41 changes: 19 additions & 22 deletions Tests/SwiftDriverTests/SwiftDriverTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -820,7 +820,7 @@ final class SwiftDriverTests: XCTestCase {
func testEmitModuleEmittingDependencies() throws {
var driver1 = try Driver(args: ["swiftc", "foo.swift", "bar.swift", "-module-name", "Foo", "-emit-dependencies", "-emit-module", "-serialize-diagnostics", "-driver-filelist-threshold=9999", "-experimental-emit-module-separately"])
let plannedJobs = try driver1.planBuild().removingAutolinkExtractJobs()
XCTAssertEqual(plannedJobs.count, 1)
XCTAssertEqual(plannedJobs.count, 3)
XCTAssertTrue(plannedJobs[0].kind == .emitModule)
XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-emit-dependencies-path")))
XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-serialize-diagnostics-path")))
Expand All @@ -843,7 +843,7 @@ final class SwiftDriverTests: XCTestCase {
"-output-file-map", outputFileMap.description])
let plannedJobs = try driver.planBuild().removingAutolinkExtractJobs()

XCTAssertEqual(plannedJobs.count, 1)
XCTAssertEqual(plannedJobs.count, 3)
XCTAssertTrue(plannedJobs[0].kind == .emitModule)
XCTAssertTrue(plannedJobs[0].commandLine.contains(subsequence: [.flag("-serialize-diagnostics-path"), .path(.absolute(.init("/build/Foo-test.dia")))]))
}
Expand Down Expand Up @@ -2166,7 +2166,7 @@ final class SwiftDriverTests: XCTestCase {
do {
var driver = try Driver(args: ["swiftc", "-module-name=ThisModule", "main.swift", "multi-threaded.swift", "-emit-module", "-o", "test.swiftmodule", "-experimental-emit-module-separately"])
let plannedJobs = try driver.planBuild().removingAutolinkExtractJobs()
XCTAssertEqual(plannedJobs.count, 1)
XCTAssertEqual(plannedJobs.count, 3)
XCTAssertEqual(plannedJobs[0].kind, .emitModule)
XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-emit-abi-descriptor-path")))
}
Expand Down Expand Up @@ -2410,8 +2410,8 @@ final class SwiftDriverTests: XCTestCase {
// -experimental-emit-module-separately.
var driver = try Driver(args: ["swiftc", "foo.swift", "bar.swift", "-module-name", "Test", "-emit-module-path", "/foo/bar/Test.swiftmodule", "-experimental-emit-module-separately"])
let plannedJobs = try driver.planBuild()
XCTAssertEqual(plannedJobs.count, 1)
XCTAssertEqual(Set(plannedJobs.map { $0.kind }), Set([.emitModule]))
XCTAssertEqual(plannedJobs.count, 3)
XCTAssertEqual(Set(plannedJobs.map { $0.kind }), Set([.emitModule, .compile]))
XCTAssertTrue(plannedJobs[0].tool.name.contains("swift"))
XCTAssertEqual(plannedJobs[0].outputs.count, 4)
XCTAssertEqual(plannedJobs[0].outputs[0].file, .absolute(AbsolutePath("/foo/bar/Test.swiftmodule")))
Expand Down Expand Up @@ -3620,7 +3620,7 @@ final class SwiftDriverTests: XCTestCase {
"swiftc", "-working-directory", "/Foo/Bar", "-emit-module", "/tmp/main.swift"
])
let plannedJobs = try driver.planBuild().removingAutolinkExtractJobs()
XCTAssertEqual(plannedJobs.count, 1)
XCTAssertEqual(plannedJobs.count, 2)
XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-o")))
XCTAssertTrue(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "/Foo/Bar/main.swiftmodule"))))
XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-emit-module-doc-path")))
Expand Down Expand Up @@ -3740,7 +3740,7 @@ final class SwiftDriverTests: XCTestCase {
"swiftc", "-emit-module", "/tmp/main.swift", "-emit-module-path", "test-ios-macabi.swiftmodule"
])
let plannedJobs = try driver.planBuild().removingAutolinkExtractJobs()
XCTAssertEqual(plannedJobs.count, 1)
XCTAssertEqual(plannedJobs.count, 2)
XCTAssertTrue(plannedJobs[0].kind == .emitModule)
XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-o")))
XCTAssertTrue(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "test-ios-macabi.swiftmodule"))))
Expand Down Expand Up @@ -4184,7 +4184,7 @@ final class SwiftDriverTests: XCTestCase {
throw XCTSkip("Skipping: compiler does not support '-user-module-version'")
}
let plannedJobs = try driver.planBuild()
XCTAssertEqual(plannedJobs.count, 1)
XCTAssertEqual(plannedJobs.count, 2)
let emitModuleJob = plannedJobs[0]
XCTAssertEqual(emitModuleJob.kind, .emitModule)
XCTAssertTrue(emitModuleJob.commandLine.contains(.flag("-user-module-version")))
Expand All @@ -4202,14 +4202,13 @@ final class SwiftDriverTests: XCTestCase {
"-verify-emitted-module-interface",
"-enable-library-evolution"])
let plannedJobs = try driver.planBuild()
XCTAssertEqual(plannedJobs.count, 2)
let emitJob = plannedJobs[0]
let verifyJob = plannedJobs[1]
XCTAssertEqual(emitJob.kind, .emitModule)
XCTAssertEqual(plannedJobs.count, 3)
let emitJob = plannedJobs.first(where: { $0.kind == .emitModule })!
let verifyJob = plannedJobs.first(where: { $0.kind == .verifyModuleInterface })!

let mergeInterfaceOutputs = emitJob.outputs.filter { $0.type == .swiftInterface }
XCTAssertTrue(mergeInterfaceOutputs.count == 1,
"Merge module job should only have one swiftinterface output")
XCTAssertEqual(verifyJob.kind, .verifyModuleInterface)
XCTAssertTrue(verifyJob.inputs.count == 1)
XCTAssertTrue(verifyJob.inputs[0] == mergeInterfaceOutputs[0])
XCTAssertTrue(verifyJob.outputs.isEmpty)
Expand All @@ -4221,7 +4220,7 @@ final class SwiftDriverTests: XCTestCase {
var driver = try Driver(args: ["swiftc", "foo.swift", "-emit-module", "-module-name",
"foo", "-emit-module-interface", "-verify-emitted-module-interface"], env: envVars)
let plannedJobs = try driver.planBuild()
XCTAssertEqual(plannedJobs.count, 1)
XCTAssertEqual(plannedJobs.count, 2)
}

// Explicitly disabled
Expand All @@ -4231,7 +4230,7 @@ final class SwiftDriverTests: XCTestCase {
"-enable-library-evolution",
"-no-verify-emitted-module-interface"], env: envVars)
let plannedJobs = try driver.planBuild()
XCTAssertEqual(plannedJobs.count, 1)
XCTAssertEqual(plannedJobs.count, 2)
}

// Disabled by default in merge-module
Expand All @@ -4251,7 +4250,7 @@ final class SwiftDriverTests: XCTestCase {
"-enable-library-evolution",
"-experimental-emit-module-separately"])
let plannedJobs = try driver.planBuild()
XCTAssertEqual(plannedJobs.count, 1)
XCTAssertEqual(plannedJobs.count, 2)
}

// Emit-module separately
Expand All @@ -4261,14 +4260,12 @@ final class SwiftDriverTests: XCTestCase {
"-enable-library-evolution",
"-experimental-emit-module-separately"], env: envVars)
let plannedJobs = try driver.planBuild()
XCTAssertEqual(plannedJobs.count, 2)
let emitJob = plannedJobs[0]
let verifyJob = plannedJobs[1]
XCTAssertEqual(emitJob.kind, .emitModule)
XCTAssertEqual(plannedJobs.count, 3)
let emitJob = plannedJobs.first(where: { $0.kind == .emitModule })!
let verifyJob = plannedJobs.first(where: { $0.kind == .verifyModuleInterface })!
let emitInterfaceOutput = emitJob.outputs.filter { $0.type == .swiftInterface }
XCTAssertTrue(emitInterfaceOutput.count == 1,
"Emit module job should only have one swiftinterface output")
XCTAssertEqual(verifyJob.kind, .verifyModuleInterface)
XCTAssertTrue(verifyJob.inputs.count == 1)
XCTAssertTrue(verifyJob.inputs[0] == emitInterfaceOutput[0])
XCTAssertTrue(verifyJob.commandLine.contains(.path(emitInterfaceOutput[0].file)))
Expand Down Expand Up @@ -4326,7 +4323,7 @@ final class SwiftDriverTests: XCTestCase {
"-enable-library-evolution",
"-check-api-availability-only"])
let plannedJobs = try driver.planBuild()
XCTAssertEqual(plannedJobs.count, 2)
XCTAssertEqual(plannedJobs.count, 3)

let emitJob = plannedJobs.first(where: { $0.kind == .emitModule })!
XCTAssertTrue(emitJob.commandLine.contains(.flag("-check-api-availability-only")))
Expand Down