Skip to content

Commit

Permalink
Merge pull request #1361 from slavapestov/no-force-load-shims
Browse files Browse the repository at this point in the history
Add support for compatibility shims that we don't want to -force-load
  • Loading branch information
slavapestov committed May 15, 2023
2 parents 0dfb2b7 + c8b07f4 commit 3794e75
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 4 deletions.
1 change: 1 addition & 0 deletions Sources/SwiftDriver/Jobs/PrintTargetInfoJob.swift
Expand Up @@ -77,6 +77,7 @@ public struct FrontendTargetInfo: Codable {

let libraryName: String
let filter: Filter
let forceLoad: Bool?
}

struct Target: Codable {
Expand Down
10 changes: 7 additions & 3 deletions Sources/SwiftDriver/Jobs/Toolchain+LinkerSupport.swift
Expand Up @@ -100,11 +100,13 @@ extension DarwinToolchain {

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

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

Expand Down
16 changes: 15 additions & 1 deletion Tests/SwiftDriverTests/SwiftDriverTests.swift
Expand Up @@ -2262,10 +2262,12 @@ final class SwiftDriverTests: XCTestCase {
let path5_0iOS = path.appending(components: "iphoneos", "libswiftCompatibility50.a")
let path5_1iOS = path.appending(components: "iphoneos", "libswiftCompatibility51.a")
let pathDynamicReplacementsiOS = path.appending(components: "iphoneos", "libswiftCompatibilityDynamicReplacements.a")
let pathCompatibilityPacksMac = path.appending(components: "macosx", "libswiftCompatibilityPacks.a")

for compatibilityLibPath in [path5_0Mac, path5_1Mac,
pathDynamicReplacementsMac, path5_0iOS,
path5_1iOS, pathDynamicReplacementsiOS] {
path5_1iOS, pathDynamicReplacementsiOS,
pathCompatibilityPacksMac] {
try localFileSystem.writeFileContents(compatibilityLibPath) { $0 <<< "Empty" }
}
let commonArgs = ["swiftc", "foo.swift", "bar.swift", "-module-name", "Test", "-resource-dir", path.pathString]
Expand All @@ -2282,6 +2284,9 @@ final class SwiftDriverTests: XCTestCase {
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_0Mac))]))
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_1Mac))]))
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathDynamicReplacementsMac))]))

XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathCompatibilityPacksMac))]))
XCTAssertTrue(cmd.contains(subsequence: [.path(.absolute(pathCompatibilityPacksMac))]))
}

do {
Expand All @@ -2296,6 +2301,9 @@ final class SwiftDriverTests: XCTestCase {
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_0Mac))]))
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_1Mac))]))
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathDynamicReplacementsMac))]))

XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathCompatibilityPacksMac))]))
XCTAssertTrue(cmd.contains(subsequence: [.path(.absolute(pathCompatibilityPacksMac))]))
}

do {
Expand All @@ -2310,6 +2318,9 @@ final class SwiftDriverTests: XCTestCase {
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_0Mac))]))
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_1Mac))]))
XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathDynamicReplacementsMac))]))

XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathCompatibilityPacksMac))]))
XCTAssertTrue(cmd.contains(subsequence: [.path(.absolute(pathCompatibilityPacksMac))]))
}

do {
Expand All @@ -2324,6 +2335,9 @@ final class SwiftDriverTests: XCTestCase {
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_0Mac))]))
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(path5_1Mac))]))
XCTAssertTrue(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathDynamicReplacementsMac))]))

XCTAssertFalse(cmd.contains(subsequence: [.flag("-force_load"), .path(.absolute(pathCompatibilityPacksMac))]))
XCTAssertTrue(cmd.contains(subsequence: [.path(.absolute(pathCompatibilityPacksMac))]))
}

do {
Expand Down

0 comments on commit 3794e75

Please sign in to comment.