Skip to content

Commit

Permalink
Suppress redundant linkage warnings due to dependency linkage propaga…
Browse files Browse the repository at this point in the history
…tion (#7404)

Suppress redundant linkage warnings due to dependency linkage
propagation rdar://112671586

### Motivation:

Improve user experience by suppressing  redundant linkage warnings

### Modifications:

Pass "-no_warn_duplicate_libraries" to linker.

### Result:

We should not see warnings such as "ld: warning: ignoring duplicate
libraries: '-lsqlite3'"

---------

Co-authored-by: Max Desiatov <[email protected]>
(cherry picked from commit e73cb5b)
  • Loading branch information
pusukuri committed Mar 20, 2024
1 parent 8268caa commit 906c40e
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 6 deletions.
Expand Up @@ -8,9 +8,7 @@ let package = Package(
.executableTarget(
name: "DoNotFilterLinkerDiagnostics",
linkerSettings: [
.linkedLibrary("z"),
.unsafeFlags(["-lz"]),
// should produce: ld: warning: ignoring duplicate libraries: '-lz'
.unsafeFlags(["-Lfoobar"]),
]
),
]
Expand Down
6 changes: 6 additions & 0 deletions Sources/Build/BuildDescription/ProductBuildDescription.swift
Expand Up @@ -182,6 +182,12 @@ package final class ProductBuildDescription: SPMBuildCore.ProductBuildDescriptio

var isLinkingStaticStdlib = false
let triple = self.buildParameters.triple

// radar://112671586 supress unnecessary warnings
if triple.isMacOSX {
args += ["-Xlinker", "-no_warn_duplicate_libraries"]
}

switch derivedProductType {
case .macro:
throw InternalError("macro not supported") // should never be reached
Expand Down
3 changes: 3 additions & 0 deletions Sources/XCBuildSupport/PIFBuilder.swift
Expand Up @@ -685,6 +685,9 @@ final class PackagePIFProjectBuilder: PIFProjectBuilder {
impartedSettings[.OTHER_LDFLAGS, default: ["$(inherited)"]].append("-lc++")
}

// radar://112671586 supress unnecessary warnings
impartedSettings[.OTHER_LDFLAGS, default: ["$(inherited)"]].append("-Wl,-no_warn_duplicate_libraries")

addSources(target.sources, to: pifTarget)

// Handle the target's dependencies (but don't link against them).
Expand Down
15 changes: 15 additions & 0 deletions Tests/BuildTests/BuildPlanTests.swift
Expand Up @@ -807,6 +807,7 @@ final class BuildPlanTests: XCTestCase {
"-L", buildPath.pathString,
"-o", buildPath.appending(components: "exe").pathString,
"-module-name", "exe",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-executable",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path",
"@\(buildPath.appending(components: "exe.product", "Objects.LinkFileList"))",
Expand Down Expand Up @@ -1220,6 +1221,7 @@ final class BuildPlanTests: XCTestCase {
"-L", buildPath.pathString,
"-o", buildPath.appending(components: "exe").pathString,
"-module-name", "exe",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-executable",
"-Xlinker", "-dead_strip",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path",
Expand Down Expand Up @@ -1310,6 +1312,7 @@ final class BuildPlanTests: XCTestCase {
"-L", buildPath.pathString,
"-o", buildPath.appending(components: "exe").pathString,
"-module-name", "exe",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-executable",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path",
"@\(buildPath.appending(components: "exe.product", "Objects.LinkFileList"))",
Expand Down Expand Up @@ -1469,6 +1472,7 @@ final class BuildPlanTests: XCTestCase {
"-L", buildPath.pathString,
"-o", buildPath.appending(components: "exe").pathString,
"-module-name", "exe",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-executable",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path",
"@\(buildPath.appending(components: "exe.product", "Objects.LinkFileList"))",
Expand Down Expand Up @@ -1659,6 +1663,7 @@ final class BuildPlanTests: XCTestCase {
"-L", buildPath.pathString,
"-o", buildPath.appending(components: "exe").pathString,
"-module-name", "exe",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-executable",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path",
"@\(buildPath.appending(components: "exe.product", "Objects.LinkFileList"))",
Expand Down Expand Up @@ -1813,6 +1818,7 @@ final class BuildPlanTests: XCTestCase {
"-L", buildPath.pathString,
"-o", buildPath.appending(components: "exe").pathString,
"-module-name", "exe",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-executable",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path",
"@\(buildPath.appending(components: "exe.product", "Objects.LinkFileList"))",
Expand Down Expand Up @@ -2061,6 +2067,7 @@ final class BuildPlanTests: XCTestCase {
buildPath.appending(components: "PkgPackageTests.xctest", "Contents", "MacOS", "PkgPackageTests")
.pathString,
"-module-name", "PkgPackageTests",
"-Xlinker", "-no_warn_duplicate_libraries",
"-Xlinker", "-bundle",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path/../../../",
"@\(buildPath.appending(components: "PkgPackageTests.product", "Objects.LinkFileList"))",
Expand Down Expand Up @@ -2159,6 +2166,7 @@ final class BuildPlanTests: XCTestCase {
"-L", buildPath.pathString,
"-o", buildPath.appending(components: "exe").pathString,
"-module-name", "exe",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-executable",
"-Xlinker", "-dead_strip",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path",
Expand Down Expand Up @@ -2523,6 +2531,7 @@ final class BuildPlanTests: XCTestCase {
"-L", buildPath.pathString,
"-o", buildPath.appending(components: "exe").pathString,
"-module-name", "exe",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-executable",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path",
"@\(buildPath.appending(components: "exe.product", "Objects.LinkFileList"))",
Expand Down Expand Up @@ -2670,6 +2679,7 @@ final class BuildPlanTests: XCTestCase {
"-o", buildPath.appending(components: "Foo").pathString,
"-module-name", "Foo",
"-lBar-Baz",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-executable",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path",
"@\(buildPath.appending(components: "Foo.product", "Objects.LinkFileList"))",
Expand All @@ -2685,6 +2695,7 @@ final class BuildPlanTests: XCTestCase {
"-L", buildPath.pathString,
"-o", buildPath.appending(components: "libBar-Baz.dylib").pathString,
"-module-name", "Bar_Baz",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-library",
"-Xlinker", "-install_name", "-Xlinker", "@rpath/libBar-Baz.dylib",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path",
Expand Down Expand Up @@ -2837,6 +2848,7 @@ final class BuildPlanTests: XCTestCase {
"-L", buildPath.pathString,
"-o", buildPath.appending(components: "liblib.dylib").pathString,
"-module-name", "lib",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-library",
"-Xlinker", "-install_name", "-Xlinker", "@rpath/liblib.dylib",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path",
Expand Down Expand Up @@ -2976,6 +2988,7 @@ final class BuildPlanTests: XCTestCase {
"-L", buildPath.pathString,
"-o", buildPath.appending(components: "liblib.dylib").pathString,
"-module-name", "lib",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-library",
"-Xlinker", "-install_name", "-Xlinker", "@rpath/liblib.dylib",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path",
Expand All @@ -2990,6 +3003,7 @@ final class BuildPlanTests: XCTestCase {
"-L", buildPath.pathString,
"-o", buildPath.appending(components: "exe").pathString,
"-module-name", "exe",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-executable",
"-Xlinker", "-rpath", "-Xlinker", "@loader_path",
"@\(buildPath.appending(components: "exe.product", "Objects.LinkFileList"))",
Expand Down Expand Up @@ -6087,6 +6101,7 @@ final class BuildPlanTests: XCTestCase {
"-L", buildPath.pathString,
"-o", buildPath.appending(components: "exe").pathString,
"-module-name", "exe",
"-Xlinker", "-no_warn_duplicate_libraries",
"-emit-executable",
"@\(buildPath.appending(components: "exe.product", "Objects.LinkFileList"))",
"-Xlinker", "-rpath", "-Xlinker", "/fake/path/lib/swift-5.5/macosx",
Expand Down
2 changes: 1 addition & 1 deletion Tests/BuildTests/BuildSystemDelegateTests.swift
Expand Up @@ -25,7 +25,7 @@ final class BuildSystemDelegateTests: XCTestCase {
try XCTSkipIf(true, "test is only supported on macOS")
#endif
let (fullLog, _) = try executeSwiftBuild(fixturePath)
XCTAssertTrue(fullLog.contains("ld: warning: ignoring duplicate libraries: '-lz'"), "log didn't contain expected linker diagnostics")
XCTAssertTrue(fullLog.contains("ld: warning: search path 'foobar' not found"), "log didn't contain expected linker diagnostics")
}
}

Expand Down
6 changes: 4 additions & 2 deletions Tests/XCBuildSupportTests/PIFBuilderTests.swift
Expand Up @@ -1312,6 +1312,7 @@ class PIFBuilderTests: XCTestCase {
"-fmodule-map-file=$(OBJROOT)/GeneratedModuleMaps/$(PLATFORM_NAME)/FooLib1.modulemap"
])
XCTAssertEqual(settings[.OTHER_LDRFLAGS], [])
XCTAssertEqual(settings[.OTHER_LDFLAGS], ["$(inherited)", "-Wl,-no_warn_duplicate_libraries"])
}
}

Expand Down Expand Up @@ -1384,7 +1385,7 @@ class PIFBuilderTests: XCTestCase {
"-fmodule-map-file=$(OBJROOT)/GeneratedModuleMaps/$(PLATFORM_NAME)/FooLib2.modulemap"
])
XCTAssertEqual(settings[.OTHER_LDRFLAGS], [])
XCTAssertEqual(settings[.OTHER_LDFLAGS], ["$(inherited)", "-lc++"])
XCTAssertEqual(settings[.OTHER_LDFLAGS], ["$(inherited)", "-lc++", "-Wl,-no_warn_duplicate_libraries"])
XCTAssertEqual(settings[.OTHER_SWIFT_FLAGS], [
"$(inherited)",
"-Xcc", "-fmodule-map-file=$(OBJROOT)/GeneratedModuleMaps/$(PLATFORM_NAME)/FooLib2.modulemap"
Expand Down Expand Up @@ -1463,6 +1464,7 @@ class PIFBuilderTests: XCTestCase {
"-fmodule-map-file=$(OBJROOT)/GeneratedModuleMaps/$(PLATFORM_NAME)/BarLib.modulemap"
])
XCTAssertEqual(settings[.OTHER_LDRFLAGS], [])
XCTAssertEqual(settings[.OTHER_LDFLAGS], ["$(inherited)", "-Wl,-no_warn_duplicate_libraries"])
XCTAssertEqual(settings[.OTHER_SWIFT_FLAGS], [
"$(inherited)",
"-Xcc", "-fmodule-map-file=$(OBJROOT)/GeneratedModuleMaps/$(PLATFORM_NAME)/BarLib.modulemap"
Expand Down Expand Up @@ -2406,7 +2408,7 @@ class PIFBuilderTests: XCTestCase {
target.checkImpartedBuildSettings { settings in
XCTAssertEqual(settings[.GCC_PREPROCESSOR_DEFINITIONS], nil)
XCTAssertEqual(settings[.HEADER_SEARCH_PATHS], nil)
XCTAssertEqual(settings[.OTHER_LDFLAGS], ["$(inherited)", "-lz"])
XCTAssertEqual(settings[.OTHER_LDFLAGS], ["$(inherited)", "-Wl,-no_warn_duplicate_libraries", "-lz"])
XCTAssertEqual(settings[.OTHER_SWIFT_FLAGS], nil)
}
}
Expand Down

0 comments on commit 906c40e

Please sign in to comment.