Skip to content

Commit 3781fbc

Browse files
committed
Don't add an autolink-extract job unless actually linking ELF/WASM objects, matching the original C++ driver
1 parent e3d4597 commit 3781fbc

File tree

2 files changed

+6
-11
lines changed

2 files changed

+6
-11
lines changed

Sources/SwiftDriver/Jobs/AutolinkExtractJob.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import struct TSCBasic.RelativePath
1818
// FIXME: Also handle Cygwin and MinGW
1919
extension Driver {
2020
/*@_spi(Testing)*/ public var isAutolinkExtractJobNeeded: Bool {
21-
[.elf, .wasm].contains(targetTriple.objectFormat) && lto == nil
21+
[.elf, .wasm].contains(targetTriple.objectFormat) && lto == nil &&
22+
linkerOutputType != nil
2223
}
2324

2425
mutating func autolinkExtractJob(inputs: [TypedVirtualPath]) throws -> Job? {

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3347,25 +3347,19 @@ final class SwiftDriverTests: XCTestCase {
33473347
}
33483348
}
33493349

3350-
#if os(Linux) || os(Android)
3351-
let autoLinkExtractJob = 1
3352-
#else
3353-
let autoLinkExtractJob = 0
3354-
#endif
3355-
33563350
do {
33573351
// non library-evolution builds require a single job, because cross-module-optimization is enabled by default.
33583352
var driver = try Driver(args: ["swiftc", "foo.swift", "bar.swift", "-module-name", "Test", "-emit-module-path", rebase("Test.swiftmodule", at: root), "-c", "-o", rebase("test.o", at: root), "-wmo", "-O" ])
33593353
let plannedJobs = try driver.planBuild()
3360-
XCTAssertEqual(plannedJobs.count, 1 + autoLinkExtractJob)
3354+
XCTAssertEqual(plannedJobs.count, 1)
33613355
XCTAssertTrue(plannedJobs[0].commandLine.contains(.flag("-enable-default-cmo")))
33623356
}
33633357

33643358
do {
33653359
// library-evolution builds can emit the module in a separate job.
33663360
var driver = try Driver(args: ["swiftc", "foo.swift", "bar.swift", "-module-name", "Test", "-emit-module-path", rebase("Test.swiftmodule", at: root), "-c", "-o", rebase("test.o", at: root), "-wmo", "-O", "-enable-library-evolution" ])
33673361
let plannedJobs = try driver.planBuild()
3368-
XCTAssertEqual(plannedJobs.count, 2 + autoLinkExtractJob)
3362+
XCTAssertEqual(plannedJobs.count, 2)
33693363
XCTAssertFalse(plannedJobs[0].commandLine.contains(.flag("-enable-default-cmo")))
33703364
XCTAssertFalse(plannedJobs[1].commandLine.contains(.flag("-enable-default-cmo")))
33713365
}
@@ -3374,7 +3368,7 @@ final class SwiftDriverTests: XCTestCase {
33743368
// When disabling cross-module-optimization, the module can be emitted in a separate job.
33753369
var driver = try Driver(args: ["swiftc", "foo.swift", "bar.swift", "-module-name", "Test", "-emit-module-path", rebase("Test.swiftmodule", at: root), "-c", "-o", rebase("test.o", at: root), "-wmo", "-O", "-disable-cmo" ])
33763370
let plannedJobs = try driver.planBuild()
3377-
XCTAssertEqual(plannedJobs.count, 2 + autoLinkExtractJob)
3371+
XCTAssertEqual(plannedJobs.count, 2)
33783372
XCTAssertFalse(plannedJobs[0].commandLine.contains(.flag("-enable-default-cmo")))
33793373
XCTAssertFalse(plannedJobs[1].commandLine.contains(.flag("-enable-default-cmo")))
33803374
}
@@ -3383,7 +3377,7 @@ final class SwiftDriverTests: XCTestCase {
33833377
// non optimized builds can emit the module in a separate job.
33843378
var driver = try Driver(args: ["swiftc", "foo.swift", "bar.swift", "-module-name", "Test", "-emit-module-path", rebase("Test.swiftmodule", at: root), "-c", "-o", rebase("test.o", at: root), "-wmo" ])
33853379
let plannedJobs = try driver.planBuild()
3386-
XCTAssertEqual(plannedJobs.count, 2 + autoLinkExtractJob)
3380+
XCTAssertEqual(plannedJobs.count, 2)
33873381
XCTAssertFalse(plannedJobs[0].commandLine.contains(.flag("-enable-default-cmo")))
33883382
XCTAssertFalse(plannedJobs[1].commandLine.contains(.flag("-enable-default-cmo")))
33893383
}

0 commit comments

Comments
 (0)