From 8ef4e34cae956cb48cf0d22667c6e18af1340519 Mon Sep 17 00:00:00 2001 From: Benoit Pierre Date: Sun, 10 Sep 2023 17:22:16 +0200 Subject: [PATCH] linkers: fix LLD linker response file handling Correct base classes so GNU-like linkers all default to supporting response files. --- mesonbuild/linkers/linkers.py | 6 +++--- unittests/allplatformstests.py | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/mesonbuild/linkers/linkers.py b/mesonbuild/linkers/linkers.py index d00fd7a4b139..0b892735953c 100644 --- a/mesonbuild/linkers/linkers.py +++ b/mesonbuild/linkers/linkers.py @@ -606,6 +606,9 @@ def _apply_prefix(self, arg: T.Union[str, T.List[str]]) -> T.List[str]: ... "boot_application": "16", } + def get_accepts_rsp(self) -> bool: + return True + def get_pie_args(self) -> T.List[str]: return ['-pie'] @@ -849,9 +852,6 @@ class GnuDynamicLinker(GnuLikeDynamicLinkerMixin, PosixDynamicLinkerMixin, Dynam """Representation of GNU ld.bfd and ld.gold.""" - def get_accepts_rsp(self) -> bool: - return True - class GnuGoldDynamicLinker(GnuDynamicLinker): diff --git a/unittests/allplatformstests.py b/unittests/allplatformstests.py index 726252611fb7..e790ca493a78 100644 --- a/unittests/allplatformstests.py +++ b/unittests/allplatformstests.py @@ -5010,3 +5010,12 @@ def test_c_cpp_stds(self): # The first supported std should be selected self.setconf('-Dcpp_std=c++11,gnu++11,vc++11') self.assertEqual(self.getconf('cpp_std'), 'c++11') + + def test_rsp_support(self): + env = get_fake_env() + cc = detect_c_compiler(env, MachineChoice.HOST) + has_rsp = cc.linker.id in { + 'ld.bfd', 'ld.gold', 'ld.lld', 'ld.mold', 'ld.qcld', 'ld.wasm', + 'link', 'lld-link', 'mwldarm', 'mwldeppc', 'optlink', 'xilink', + } + self.assertEqual(cc.linker.get_accepts_rsp(), has_rsp)