Skip to content

Commit 3794e75

Browse files
authored
Merge pull request #1361 from slavapestov/no-force-load-shims
Add support for compatibility shims that we don't want to -force-load
2 parents 0dfb2b7 + c8b07f4 commit 3794e75

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

Sources/SwiftDriver/Jobs/PrintTargetInfoJob.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public struct FrontendTargetInfo: Codable {
7777

7878
let libraryName: String
7979
let filter: Filter
80+
let forceLoad: Bool?
8081
}
8182

8283
struct Target: Codable {

Sources/SwiftDriver/Jobs/Toolchain+LinkerSupport.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,13 @@ extension DarwinToolchain {
100100

101101
// Link compatibility libraries, if we're deploying back to OSes that
102102
// have an older Swift runtime.
103-
func addArgsForBackDeployLib(_ libName: String) throws {
103+
func addArgsForBackDeployLib(_ libName: String, forceLoad: Bool) throws {
104104
let backDeployLibPath = VirtualPath.lookup(targetInfo.runtimeResourcePath.path)
105105
.appending(components: targetTriple.platformName() ?? "", libName)
106106
if try fileSystem.exists(backDeployLibPath) {
107-
commandLine.append(.flag("-force_load"))
107+
if forceLoad {
108+
commandLine.append(.flag("-force_load"))
109+
}
108110
commandLine.appendPath(backDeployLibPath)
109111
}
110112
}
@@ -121,7 +123,9 @@ extension DarwinToolchain {
121123
}
122124

123125
if shouldLink {
124-
try addArgsForBackDeployLib("lib" + compatibilityLib.libraryName + ".a")
126+
// Old frontends don't set forceLoad at all; assume it's true in that case
127+
try addArgsForBackDeployLib("lib" + compatibilityLib.libraryName + ".a",
128+
forceLoad: compatibilityLib.forceLoad ?? true)
125129
}
126130
}
127131

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2262,10 +2262,12 @@ final class SwiftDriverTests: XCTestCase {
22622262
let path5_0iOS = path.appending(components: "iphoneos", "libswiftCompatibility50.a")
22632263
let path5_1iOS = path.appending(components: "iphoneos", "libswiftCompatibility51.a")
22642264
let pathDynamicReplacementsiOS = path.appending(components: "iphoneos", "libswiftCompatibilityDynamicReplacements.a")
2265+
let pathCompatibilityPacksMac = path.appending(components: "macosx", "libswiftCompatibilityPacks.a")
22652266

22662267
for compatibilityLibPath in [path5_0Mac, path5_1Mac,
22672268
pathDynamicReplacementsMac, path5_0iOS,
2268-
path5_1iOS, pathDynamicReplacementsiOS] {
2269+
path5_1iOS, pathDynamicReplacementsiOS,
2270+
pathCompatibilityPacksMac] {
22692271
try localFileSystem.writeFileContents(compatibilityLibPath) { $0 <<< "Empty" }
22702272
}
22712273
let commonArgs = ["swiftc", "foo.swift", "bar.swift", "-module-name", "Test", "-resource-dir", path.pathString]
@@ -2282,6 +2284,9 @@ final class SwiftDriverTests: XCTestCase {
22822284
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_0Mac))]))
22832285
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_1Mac))]))
22842286
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathDynamicReplacementsMac))]))
2287+
2288+
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathCompatibilityPacksMac))]))
2289+
XCTAssertTrue(cmd.contains(subsequence: [.path(.absolute(pathCompatibilityPacksMac))]))
22852290
}
22862291

22872292
do {
@@ -2296,6 +2301,9 @@ final class SwiftDriverTests: XCTestCase {
22962301
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_0Mac))]))
22972302
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_1Mac))]))
22982303
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathDynamicReplacementsMac))]))
2304+
2305+
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathCompatibilityPacksMac))]))
2306+
XCTAssertTrue(cmd.contains(subsequence: [.path(.absolute(pathCompatibilityPacksMac))]))
22992307
}
23002308

23012309
do {
@@ -2310,6 +2318,9 @@ final class SwiftDriverTests: XCTestCase {
23102318
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_0Mac))]))
23112319
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_1Mac))]))
23122320
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathDynamicReplacementsMac))]))
2321+
2322+
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathCompatibilityPacksMac))]))
2323+
XCTAssertTrue(cmd.contains(subsequence: [.path(.absolute(pathCompatibilityPacksMac))]))
23132324
}
23142325

23152326
do {
@@ -2324,6 +2335,9 @@ final class SwiftDriverTests: XCTestCase {
23242335
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_0Mac))]))
23252336
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_1Mac))]))
23262337
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathDynamicReplacementsMac))]))
2338+
2339+
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathCompatibilityPacksMac))]))
2340+
XCTAssertTrue(cmd.contains(subsequence: [.path(.absolute(pathCompatibilityPacksMac))]))
23272341
}
23282342

23292343
do {

0 commit comments

Comments
 (0)