From 2a779076100e81495c03aa8d43f02a3d3aae216a Mon Sep 17 00:00:00 2001 From: Maciej Grela Date: Fri, 28 Feb 2025 15:59:56 +0100 Subject: [PATCH 1/4] build: Add -Wl,--as-needed flag for all executable builds PR#33628 has added an explicit link to libatomic for all linux-based builds to fix a build issue on mips. This results with a NEEDED record for libatomic.so.1 even when it's not required. One situation when this happens is building on arm64 with clang. Signed-off-by: Maciej Grela --- build/config/compiler/BUILD.gn | 4 ++++ build/config/defaults.gni | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index 073adcba4a683c..dfab45cd46924d 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn @@ -671,3 +671,7 @@ config("specs_default") { ldflags = cflags } } + +config("link_as_needed") { + ldflags = [ "-Wl,--as-needed" ] +} diff --git a/build/config/defaults.gni b/build/config/defaults.gni index 08bd0030ee786b..aec03cc733a0a3 100644 --- a/build/config/defaults.gni +++ b/build/config/defaults.gni @@ -61,6 +61,10 @@ declare_args() { # Defaults configs for pie. default_configs_pie = [ "${build_root}/config/compiler:pie_default" ] + # Default configs for GNU ld --as-needed + default_configs_link_as_needed = + [ "${build_root}/config/compiler:link_as_needed" ] + # Defaults configs for warnings. default_configs_warnings = [ "${build_root}/config/compiler:warnings_default" ] @@ -124,3 +128,4 @@ default_configs += default_configs_extra executable_default_configs = [] executable_default_configs += default_configs_pie +executable_default_configs += default_configs_link_as_needed From 6313f0fc6051714de5670d5c1b8b750d0fa1a2db Mon Sep 17 00:00:00 2001 From: Maciej Grela Date: Fri, 28 Feb 2025 22:32:59 +0100 Subject: [PATCH 2/4] gn: Restrict --as-needed to only Linux builds using clang Signed-off-by: Maciej Grela --- build/config/compiler/BUILD.gn | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index dfab45cd46924d..c7542697242e75 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn @@ -673,5 +673,7 @@ config("specs_default") { } config("link_as_needed") { - ldflags = [ "-Wl,--as-needed" ] + if (current_os == "linux" and is_clang) { + ldflags = [ "-Wl,--as-needed" ] + } } From 670b297052483f8baf7c0489b616f66ae883dd04 Mon Sep 17 00:00:00 2001 From: Maciej Grela Date: Fri, 28 Feb 2025 22:48:27 +0100 Subject: [PATCH 3/4] typo Signed-off-by: Maciej Grela --- build/config/compiler/BUILD.gn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index c7542697242e75..3d6bb64d1e04aa 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn @@ -673,7 +673,7 @@ config("specs_default") { } config("link_as_needed") { - if (current_os == "linux" and is_clang) { + if (current_os == "linux" && is_clang) { ldflags = [ "-Wl,--as-needed" ] } } From 8e62814ecebc40975348af4eb05e8258cc227ae4 Mon Sep 17 00:00:00 2001 From: Maciej Grela Date: Mon, 3 Mar 2025 15:04:55 +0100 Subject: [PATCH 4/4] gn: Blacklist instead of whitelist, include ios and explanatory comment Signed-off-by: Maciej Grela --- build/config/compiler/BUILD.gn | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index 3d6bb64d1e04aa..5b53a67e0a5792 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn @@ -673,7 +673,8 @@ config("specs_default") { } config("link_as_needed") { - if (current_os == "linux" && is_clang) { + # ld64.lld on clang used by Apple does not have a --as-needed option + if (current_os != "mac" && current_os != "ios") { ldflags = [ "-Wl,--as-needed" ] } }