Skip to content

Commit 311ddd5

Browse files
committed
Pass -use-static-resource-dir to frontend when linking statically
1 parent ffe24e5 commit 311ddd5

File tree

4 files changed

+96
-2
lines changed

4 files changed

+96
-2
lines changed

Sources/SwiftDriver/Jobs/FrontendJobHelpers.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,15 @@ extension Driver {
186186
commandLine.appendPath(
187187
try AbsolutePath(validating: frontendTargetInfo.paths.runtimeResourcePath))
188188

189+
if parsedOptions.hasFlag(positive: .staticExecutable,
190+
negative: .noStaticExecutable,
191+
default: false) ||
192+
parsedOptions.hasFlag(positive: .staticStdlib,
193+
negative: .noStaticStdlib,
194+
default: false) {
195+
commandLine.appendFlag("-use-static-resource-dir")
196+
}
197+
189198
// -g implies -enable-anonymous-context-mangled-names, because the extra
190199
// metadata aids debugging.
191200
if parsedOptions.getLast(in: .g) != nil {

Sources/SwiftDriver/Jobs/Planning.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,12 +244,22 @@ extension Driver {
244244
if parsedOptions.hasArgument(.printTargetInfo) {
245245
let sdkPath = try parsedOptions.getLastArgument(.sdk).map { try VirtualPath(path: $0.asSingle) }
246246
let resourceDirPath = try parsedOptions.getLastArgument(.resourceDir).map { try VirtualPath(path: $0.asSingle) }
247+
var useStaticResourceDir = false
248+
if parsedOptions.hasFlag(positive: .staticExecutable,
249+
negative: .noStaticExecutable,
250+
default: false) ||
251+
parsedOptions.hasFlag(positive: .staticStdlib,
252+
negative: .noStaticStdlib,
253+
default: false) {
254+
useStaticResourceDir = true
255+
}
247256

248257
return try toolchain.printTargetInfoJob(target: targetTriple,
249258
targetVariant: targetVariantTriple,
250259
sdkPath: sdkPath,
251260
resourceDirPath: resourceDirPath,
252-
requiresInPlaceExecution: true)
261+
requiresInPlaceExecution: true,
262+
useStaticResourceDir: useStaticResourceDir)
253263
}
254264

255265
if parsedOptions.hasArgument(.version) || parsedOptions.hasArgument(.version_) {

Sources/SwiftDriver/Jobs/PrintTargetInfoJob.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ extension Toolchain {
116116
sdkPath: VirtualPath? = nil,
117117
resourceDirPath: VirtualPath? = nil,
118118
runtimeCompatibilityVersion: String? = nil,
119-
requiresInPlaceExecution: Bool = false) throws -> Job {
119+
requiresInPlaceExecution: Bool = false,
120+
useStaticResourceDir: Bool = false) throws -> Job {
120121
var commandLine: [Job.ArgTemplate] = [.flag("-frontend"),
121122
.flag("-print-target-info")]
122123
// If we were given a target, include it. Otherwise, let the frontend
@@ -145,6 +146,10 @@ extension Toolchain {
145146
]
146147
}
147148

149+
if useStaticResourceDir {
150+
commandLine += [.flag("-use-static-resource-dir")]
151+
}
152+
148153
return Job(
149154
moduleName: "",
150155
kind: .printTargetInfo,

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1759,6 +1759,39 @@ final class SwiftDriverTests: XCTestCase {
17591759
XCTAssertTrue(job.commandLine.contains(.flag("-sdk")))
17601760
XCTAssertTrue(job.commandLine.contains(.flag("-resource-dir")))
17611761
}
1762+
1763+
do {
1764+
var driver = try Driver(args: ["swift", "-print-target-info", "-target", "x86_64-unknown-linux"])
1765+
let plannedJobs = try driver.planBuild()
1766+
XCTAssertTrue(plannedJobs.count == 1)
1767+
let job = plannedJobs[0]
1768+
XCTAssertEqual(job.kind, .printTargetInfo)
1769+
XCTAssertTrue(job.commandLine.contains(.flag("-print-target-info")))
1770+
XCTAssertTrue(job.commandLine.contains(.flag("-target")))
1771+
XCTAssertFalse(job.commandLine.contains(.flag("-use-static-resource-dir")))
1772+
}
1773+
1774+
do {
1775+
var driver = try Driver(args: ["swift", "-print-target-info", "-target", "x86_64-unknown-linux", "-static-stdlib"])
1776+
let plannedJobs = try driver.planBuild()
1777+
XCTAssertTrue(plannedJobs.count == 1)
1778+
let job = plannedJobs[0]
1779+
XCTAssertEqual(job.kind, .printTargetInfo)
1780+
XCTAssertTrue(job.commandLine.contains(.flag("-print-target-info")))
1781+
XCTAssertTrue(job.commandLine.contains(.flag("-target")))
1782+
XCTAssertTrue(job.commandLine.contains(.flag("-use-static-resource-dir")))
1783+
}
1784+
1785+
do {
1786+
var driver = try Driver(args: ["swift", "-print-target-info", "-target", "x86_64-unknown-linux", "-static-executable"])
1787+
let plannedJobs = try driver.planBuild()
1788+
XCTAssertTrue(plannedJobs.count == 1)
1789+
let job = plannedJobs[0]
1790+
XCTAssertEqual(job.kind, .printTargetInfo)
1791+
XCTAssertTrue(job.commandLine.contains(.flag("-print-target-info")))
1792+
XCTAssertTrue(job.commandLine.contains(.flag("-target")))
1793+
XCTAssertTrue(job.commandLine.contains(.flag("-use-static-resource-dir")))
1794+
}
17621795
}
17631796

17641797
func testDiagnosticOptions() throws {
@@ -2495,6 +2528,43 @@ final class SwiftDriverTests: XCTestCase {
24952528
XCTAssertEqual(compileJob.outputs[1].file, .temporary(RelativePath("foo.swiftdoc")))
24962529
}
24972530
}
2531+
2532+
func testUseStaticResourceDir() throws {
2533+
do {
2534+
var driver = try Driver(args: ["swiftc", "-emit-module", "-target", "x86_64-unknown-linux", "foo.swift"])
2535+
let plannedJobs = try driver.planBuild()
2536+
let job = plannedJobs[0]
2537+
XCTAssertFalse(job.commandLine.contains(.flag("-use-static-resource-dir")))
2538+
}
2539+
2540+
do {
2541+
var driver = try Driver(args: ["swiftc", "-emit-module", "-target", "x86_64-unknown-linux", "-no-static-executable", "foo.swift"])
2542+
let plannedJobs = try driver.planBuild()
2543+
let job = plannedJobs[0]
2544+
XCTAssertFalse(job.commandLine.contains(.flag("-use-static-resource-dir")))
2545+
}
2546+
2547+
do {
2548+
var driver = try Driver(args: ["swiftc", "-emit-module", "-target", "x86_64-unknown-linux", "-no-static-stdlib", "foo.swift"])
2549+
let plannedJobs = try driver.planBuild()
2550+
let job = plannedJobs[0]
2551+
XCTAssertFalse(job.commandLine.contains(.flag("-use-static-resource-dir")))
2552+
}
2553+
2554+
do {
2555+
var driver = try Driver(args: ["swiftc", "-emit-module", "-target", "x86_64-unknown-linux", "-static-executable", "foo.swift"])
2556+
let plannedJobs = try driver.planBuild()
2557+
let job = plannedJobs[0]
2558+
XCTAssertTrue(job.commandLine.contains(.flag("-use-static-resource-dir")))
2559+
}
2560+
2561+
do {
2562+
var driver = try Driver(args: ["swiftc", "-emit-module", "-target", "x86_64-unknown-linux", "-static-stdlib", "foo.swift"])
2563+
let plannedJobs = try driver.planBuild()
2564+
let job = plannedJobs[0]
2565+
XCTAssertTrue(job.commandLine.contains(.flag("-use-static-resource-dir")))
2566+
}
2567+
}
24982568
}
24992569

25002570
func assertString(

0 commit comments

Comments
 (0)