Skip to content

Commit ba1d273

Browse files
authored
Embedded: don't link swiftrt.o for bare metal (#1533)
When linking with `swiftc` for `-unknown-none-` triples, it attempts to link `swiftrt.o` runtime file, which is currently not needed and is not present for these triples. We should avoid linking it in these cases.
1 parent 9dd3191 commit ba1d273

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ extension GenericUnixToolchain {
185185
}
186186
}
187187

188-
if !parsedOptions.hasArgument(.nostartfiles) {
188+
if !isEmbeddedEnabled && !parsedOptions.hasArgument(.nostartfiles) {
189189
let swiftrtPath = VirtualPath.lookup(targetInfo.runtimeResourcePath.path)
190190
.appending(
191191
components: targetTriple.platformName() ?? "",

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6549,10 +6549,12 @@ final class SwiftDriverTests: XCTestCase {
65496549
let invalidPath = try VirtualPath(path: "/Tools/swift.xctoolchain/usr/lib/swift")
65506550
let invalid = linkJob.commandLine.contains(.responseFilePath(invalidPath))
65516551
XCTAssertFalse(invalid) // ensure the driver does not emit invalid responseFilePaths to the clang invocation
6552+
XCTAssertFalse(linkJob.commandLine.joinedUnresolvedArguments.contains("swiftrt.o"))
65526553
}
65536554

6555+
// Embedded Wasm compile job
65546556
do {
6555-
var driver = try Driver(args: ["swiftc", "-target", "wasm32-none-none-wasm", "test.swift", "-enable-experimental-feature", "Embedded", "-wmo", "-o", "a.wasm"], env: env)
6557+
var driver = try Driver(args: ["swiftc", "-target", "wasm32-none-none-wasm", "test.swift", "-enable-experimental-feature", "Embedded", "-wmo", "-o", "a.wasm"], env: env)
65566558
let plannedJobs = try driver.planBuild()
65576559
XCTAssertEqual(plannedJobs.count, 3)
65586560
let compileJob = plannedJobs[0]
@@ -6563,6 +6565,20 @@ final class SwiftDriverTests: XCTestCase {
65636565
XCTAssertFalse(linkJob.commandLine.contains(.flag("-rpath")))
65646566
XCTAssertFalse(linkJob.commandLine.contains(.flag("-lswiftCore")))
65656567
}
6568+
6569+
// Embedded Wasm link job
6570+
do {
6571+
var driver = try Driver(args: ["swiftc", "-target", "wasm32-none-none-wasm", "test.o", "-enable-experimental-feature", "Embedded", "-wmo", "-o", "a.wasm"], env: env)
6572+
let plannedJobs = try driver.planBuild()
6573+
XCTAssertEqual(plannedJobs.count, 2)
6574+
let _ /*autolinkJob*/ = plannedJobs[0]
6575+
let linkJob = plannedJobs[1]
6576+
XCTAssertFalse(linkJob.commandLine.contains(.flag("-force_load")))
6577+
XCTAssertFalse(linkJob.commandLine.contains(.flag("-rpath")))
6578+
XCTAssertFalse(linkJob.commandLine.contains(.flag("-lswiftCore")))
6579+
XCTAssertFalse(linkJob.commandLine.joinedUnresolvedArguments.contains("swiftrt.o"))
6580+
}
6581+
65666582
do {
65676583
let diags = DiagnosticsEngine()
65686584
var driver = try Driver(args: ["swiftc", "-target", "arm64-apple-macosx10.13", "test.swift", "-enable-experimental-feature", "Embedded", "-parse-as-library", "-wmo", "-o", "a.out", "-module-name", "main", "-enable-library-evolution"], diagnosticsEngine: diags)

0 commit comments

Comments
 (0)