Skip to content

Commit efb1281

Browse files
committed
Revert "Revert "Only add '-fobjc-link-runtime' to the linker invocation when the driver is invoked with '-link-objc-runtime'""
This reverts commit 2dbaf86.
1 parent f26d9a9 commit efb1281

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

Sources/SwiftDriver/Jobs/DarwinToolchain+LinkerSupport.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,9 +214,14 @@ extension DarwinToolchain {
214214
commandLine.appendPath(VirtualPath.lookup(sdkPath))
215215
}
216216

217+
// -link-objc-runtime also implies -fobjc-link-runtime
218+
if parsedOptions.hasFlag(positive: .linkObjcRuntime,
219+
negative: .noLinkObjcRuntime,
220+
default: false) {
221+
commandLine.appendFlag("-fobjc-link-runtime")
222+
}
223+
217224
commandLine.appendFlags(
218-
"-fobjc-link-runtime",
219-
"-lobjc",
220225
"-lSystem"
221226
)
222227

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1653,6 +1653,8 @@ final class SwiftDriverTests: XCTestCase {
16531653

16541654
XCTAssertFalse(cmd.contains(.flag("-static")))
16551655
XCTAssertFalse(cmd.contains(.flag("-shared")))
1656+
// Handling of '-lobjc' is now in the Clang linker driver.
1657+
XCTAssertFalse(cmd.contains(.flag("-lobjc")))
16561658
}
16571659

16581660
do {
@@ -1728,6 +1730,39 @@ final class SwiftDriverTests: XCTestCase {
17281730
XCTAssertFalse(cmd.contains(.flag("-shared")))
17291731
}
17301732

1733+
do {
1734+
// -fobjc-link-runtime default
1735+
var driver = try Driver(args: commonArgs + ["-emit-library", "-target", "x86_64-apple-macosx10.15"], env: env)
1736+
let plannedJobs = try driver.planBuild()
1737+
XCTAssertEqual(3, plannedJobs.count)
1738+
let linkJob = plannedJobs[2]
1739+
XCTAssertEqual(linkJob.kind, .link)
1740+
let cmd = linkJob.commandLine
1741+
XCTAssertFalse(cmd.contains(.flag("-fobjc-link-runtime")))
1742+
}
1743+
1744+
do {
1745+
// -fobjc-link-runtime enable
1746+
var driver = try Driver(args: commonArgs + ["-emit-library", "-target", "x86_64-apple-macosx10.15", "-link-objc-runtime"], env: env)
1747+
let plannedJobs = try driver.planBuild()
1748+
XCTAssertEqual(3, plannedJobs.count)
1749+
let linkJob = plannedJobs[2]
1750+
XCTAssertEqual(linkJob.kind, .link)
1751+
let cmd = linkJob.commandLine
1752+
XCTAssertTrue(cmd.contains(.flag("-fobjc-link-runtime")))
1753+
}
1754+
1755+
do {
1756+
// -fobjc-link-runtime disable override
1757+
var driver = try Driver(args: commonArgs + ["-emit-library", "-target", "x86_64-apple-macosx10.15", "-link-objc-runtime", "-no-link-objc-runtime"], env: env)
1758+
let plannedJobs = try driver.planBuild()
1759+
XCTAssertEqual(3, plannedJobs.count)
1760+
let linkJob = plannedJobs[2]
1761+
XCTAssertEqual(linkJob.kind, .link)
1762+
let cmd = linkJob.commandLine
1763+
XCTAssertFalse(cmd.contains(.flag("-fobjc-link-runtime")))
1764+
}
1765+
17311766
do {
17321767
// Xlinker flags
17331768
// Ensure that Xlinker flags are passed as such to the clang linker invocation.

0 commit comments

Comments
 (0)