Skip to content

Commit 1f1ed5f

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

File tree

4 files changed

+97
-2
lines changed

4 files changed

+97
-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 = true) 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: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1759,6 +1759,40 @@ 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+
XCTAssertTrue(job.commandLine.contains(.flag("-use-static-resource-dir")))
1772+
XCTAssertFalse(job.commandLine.contains(.flag("-use-static-resource-dir")))
1773+
}
1774+
1775+
do {
1776+
var driver = try Driver(args: ["swift", "-print-target-info", "-target", "x86_64-unknown-linux", "-static-stdlib"])
1777+
let plannedJobs = try driver.planBuild()
1778+
XCTAssertTrue(plannedJobs.count == 1)
1779+
let job = plannedJobs[0]
1780+
XCTAssertEqual(job.kind, .printTargetInfo)
1781+
XCTAssertTrue(job.commandLine.contains(.flag("-print-target-info")))
1782+
XCTAssertTrue(job.commandLine.contains(.flag("-target")))
1783+
XCTAssertTrue(job.commandLine.contains(.flag("-use-static-resource-dir")))
1784+
}
1785+
1786+
do {
1787+
var driver = try Driver(args: ["swift", "-print-target-info", "-target", "x86_64-unknown-linux", "-static-executable"])
1788+
let plannedJobs = try driver.planBuild()
1789+
XCTAssertTrue(plannedJobs.count == 1)
1790+
let job = plannedJobs[0]
1791+
XCTAssertEqual(job.kind, .printTargetInfo)
1792+
XCTAssertTrue(job.commandLine.contains(.flag("-print-target-info")))
1793+
XCTAssertTrue(job.commandLine.contains(.flag("-target")))
1794+
XCTAssertTrue(job.commandLine.contains(.flag("-use-static-resource-dir")))
1795+
}
17621796
}
17631797

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

25002571
func assertString(

0 commit comments

Comments
 (0)