Skip to content

Commit 029d4ba

Browse files
authored
Merge pull request #192 from drexin/wip-static-resource-dir
Pass -use-static-resource-dir to frontend when linking statically
2 parents 90baa46 + 311ddd5 commit 029d4ba

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
@@ -187,6 +187,15 @@ extension Driver {
187187
commandLine.appendPath(
188188
try AbsolutePath(validating: frontendTargetInfo.paths.runtimeResourcePath))
189189

190+
if parsedOptions.hasFlag(positive: .staticExecutable,
191+
negative: .noStaticExecutable,
192+
default: false) ||
193+
parsedOptions.hasFlag(positive: .staticStdlib,
194+
negative: .noStaticStdlib,
195+
default: false) {
196+
commandLine.appendFlag("-use-static-resource-dir")
197+
}
198+
190199
// -g implies -enable-anonymous-context-mangled-names, because the extra
191200
// metadata aids debugging.
192201
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
@@ -273,12 +273,22 @@ extension Driver {
273273
if parsedOptions.hasArgument(.printTargetInfo) {
274274
let sdkPath = try parsedOptions.getLastArgument(.sdk).map { try VirtualPath(path: $0.asSingle) }
275275
let resourceDirPath = try parsedOptions.getLastArgument(.resourceDir).map { try VirtualPath(path: $0.asSingle) }
276+
var useStaticResourceDir = false
277+
if parsedOptions.hasFlag(positive: .staticExecutable,
278+
negative: .noStaticExecutable,
279+
default: false) ||
280+
parsedOptions.hasFlag(positive: .staticStdlib,
281+
negative: .noStaticStdlib,
282+
default: false) {
283+
useStaticResourceDir = true
284+
}
276285

277286
return try toolchain.printTargetInfoJob(target: targetTriple,
278287
targetVariant: targetVariantTriple,
279288
sdkPath: sdkPath,
280289
resourceDirPath: resourceDirPath,
281-
requiresInPlaceExecution: true)
290+
requiresInPlaceExecution: true,
291+
useStaticResourceDir: useStaticResourceDir)
282292
}
283293

284294
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
@@ -2177,6 +2177,39 @@ final class SwiftDriverTests: XCTestCase {
21772177
XCTAssertTrue(job.commandLine.contains(.flag("-sdk")))
21782178
XCTAssertTrue(job.commandLine.contains(.flag("-resource-dir")))
21792179
}
2180+
2181+
do {
2182+
var driver = try Driver(args: ["swift", "-print-target-info", "-target", "x86_64-unknown-linux"])
2183+
let plannedJobs = try driver.planBuild()
2184+
XCTAssertTrue(plannedJobs.count == 1)
2185+
let job = plannedJobs[0]
2186+
XCTAssertEqual(job.kind, .printTargetInfo)
2187+
XCTAssertTrue(job.commandLine.contains(.flag("-print-target-info")))
2188+
XCTAssertTrue(job.commandLine.contains(.flag("-target")))
2189+
XCTAssertFalse(job.commandLine.contains(.flag("-use-static-resource-dir")))
2190+
}
2191+
2192+
do {
2193+
var driver = try Driver(args: ["swift", "-print-target-info", "-target", "x86_64-unknown-linux", "-static-stdlib"])
2194+
let plannedJobs = try driver.planBuild()
2195+
XCTAssertTrue(plannedJobs.count == 1)
2196+
let job = plannedJobs[0]
2197+
XCTAssertEqual(job.kind, .printTargetInfo)
2198+
XCTAssertTrue(job.commandLine.contains(.flag("-print-target-info")))
2199+
XCTAssertTrue(job.commandLine.contains(.flag("-target")))
2200+
XCTAssertTrue(job.commandLine.contains(.flag("-use-static-resource-dir")))
2201+
}
2202+
2203+
do {
2204+
var driver = try Driver(args: ["swift", "-print-target-info", "-target", "x86_64-unknown-linux", "-static-executable"])
2205+
let plannedJobs = try driver.planBuild()
2206+
XCTAssertTrue(plannedJobs.count == 1)
2207+
let job = plannedJobs[0]
2208+
XCTAssertEqual(job.kind, .printTargetInfo)
2209+
XCTAssertTrue(job.commandLine.contains(.flag("-print-target-info")))
2210+
XCTAssertTrue(job.commandLine.contains(.flag("-target")))
2211+
XCTAssertTrue(job.commandLine.contains(.flag("-use-static-resource-dir")))
2212+
}
21802213
}
21812214

21822215
func testDiagnosticOptions() throws {
@@ -2929,6 +2962,43 @@ final class SwiftDriverTests: XCTestCase {
29292962
XCTAssertEqual(compileJob.outputs[1].file, .temporary(RelativePath("foo.swiftdoc")))
29302963
}
29312964
}
2965+
2966+
func testUseStaticResourceDir() throws {
2967+
do {
2968+
var driver = try Driver(args: ["swiftc", "-emit-module", "-target", "x86_64-unknown-linux", "foo.swift"])
2969+
let plannedJobs = try driver.planBuild()
2970+
let job = plannedJobs[0]
2971+
XCTAssertFalse(job.commandLine.contains(.flag("-use-static-resource-dir")))
2972+
}
2973+
2974+
do {
2975+
var driver = try Driver(args: ["swiftc", "-emit-module", "-target", "x86_64-unknown-linux", "-no-static-executable", "foo.swift"])
2976+
let plannedJobs = try driver.planBuild()
2977+
let job = plannedJobs[0]
2978+
XCTAssertFalse(job.commandLine.contains(.flag("-use-static-resource-dir")))
2979+
}
2980+
2981+
do {
2982+
var driver = try Driver(args: ["swiftc", "-emit-module", "-target", "x86_64-unknown-linux", "-no-static-stdlib", "foo.swift"])
2983+
let plannedJobs = try driver.planBuild()
2984+
let job = plannedJobs[0]
2985+
XCTAssertFalse(job.commandLine.contains(.flag("-use-static-resource-dir")))
2986+
}
2987+
2988+
do {
2989+
var driver = try Driver(args: ["swiftc", "-emit-module", "-target", "x86_64-unknown-linux", "-static-executable", "foo.swift"])
2990+
let plannedJobs = try driver.planBuild()
2991+
let job = plannedJobs[0]
2992+
XCTAssertTrue(job.commandLine.contains(.flag("-use-static-resource-dir")))
2993+
}
2994+
2995+
do {
2996+
var driver = try Driver(args: ["swiftc", "-emit-module", "-target", "x86_64-unknown-linux", "-static-stdlib", "foo.swift"])
2997+
let plannedJobs = try driver.planBuild()
2998+
let job = plannedJobs[0]
2999+
XCTAssertTrue(job.commandLine.contains(.flag("-use-static-resource-dir")))
3000+
}
3001+
}
29323002
}
29333003

29343004
func assertString(

0 commit comments

Comments
 (0)