aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/linkers
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2024-05-15 22:53:58 +0300
committerGitHub <noreply@github.com>2024-05-15 22:53:58 +0300
commitf24307e55943f08e1a505a24112ee62d127c0900 (patch)
tree0e2923dfa3a21b8b9221a628beb8396c9ec5e807 /mesonbuild/linkers
parentbfb9ca04529aea96c1c997a8d881ddc7df7d6c84 (diff)
parent456d879ff42624a5c67512022ab700518d869b21 (diff)
downloadmeson-f24307e55943f08e1a505a24112ee62d127c0900.zip
meson-f24307e55943f08e1a505a24112ee62d127c0900.tar.gz
meson-f24307e55943f08e1a505a24112ee62d127c0900.tar.bz2
Merge pull request #11421 from mon/ti-armclang
Basic support for TI Arm Clang toolchain
Diffstat (limited to 'mesonbuild/linkers')
-rw-r--r--mesonbuild/linkers/detect.py2
-rw-r--r--mesonbuild/linkers/linkers.py27
2 files changed, 25 insertions, 4 deletions
diff --git a/mesonbuild/linkers/detect.py b/mesonbuild/linkers/detect.py
index bb391d1..65d77f6 100644
--- a/mesonbuild/linkers/detect.py
+++ b/mesonbuild/linkers/detect.py
@@ -141,7 +141,7 @@ def guess_nix_linker(env: 'Environment', compiler: T.List[str], comp_class: T.Ty
v = search_version(o + e)
linker: DynamicLinker
- if 'LLD' in o.split('\n', maxsplit=1)[0]:
+ if 'LLD' in o.split('\n', maxsplit=1)[0] or 'tiarmlnk' in e:
if isinstance(comp_class.LINKER_PREFIX, str):
cmd = compiler + override + [comp_class.LINKER_PREFIX + '-v'] + extra_args
else:
diff --git a/mesonbuild/linkers/linkers.py b/mesonbuild/linkers/linkers.py
index ca3c854..de08e0f 100644
--- a/mesonbuild/linkers/linkers.py
+++ b/mesonbuild/linkers/linkers.py
@@ -885,15 +885,36 @@ class LLVMDynamicLinker(GnuLikeDynamicLinkerMixin, PosixDynamicLinkerMixin, Dyna
super().__init__(exelist, for_machine, prefix_arg, always_args, version=version)
# Some targets don't seem to support this argument (windows, wasm, ...)
- _, _, e = mesonlib.Popen_safe(self.exelist + always_args + self._apply_prefix('--allow-shlib-undefined'))
- # Versions < 9 do not have a quoted argument
- self.has_allow_shlib_undefined = ('unknown argument: --allow-shlib-undefined' not in e) and ("unknown argument: '--allow-shlib-undefined'" not in e)
+ self.has_allow_shlib_undefined = self._supports_flag('--allow-shlib-undefined', always_args)
+ # These aren't supported by TI Arm Clang
+ self.has_as_needed = self._supports_flag('--as-needed', always_args)
+ self.has_no_undefined = self._supports_flag('--no-undefined', always_args)
+
+ def _supports_flag(self, flag: str, always_args: T.List[str]) -> bool:
+ _, _, e = mesonlib.Popen_safe(self.exelist + always_args + self._apply_prefix(flag))
+ return (
+ # Versions < 9 do not have a quoted argument
+ (f'unknown argument: {flag}' not in e) and
+ (f"unknown argument: '{flag}'" not in e) and
+ # TI Arm Clang uses a different message
+ (f'invalid option: {flag}' not in e)
+ )
def get_allow_undefined_args(self) -> T.List[str]:
if self.has_allow_shlib_undefined:
return self._apply_prefix('--allow-shlib-undefined')
return []
+ def get_asneeded_args(self) -> T.List[str]:
+ if self.has_as_needed:
+ return self._apply_prefix('--as-needed')
+ return []
+
+ def no_undefined_args(self) -> T.List[str]:
+ if self.has_no_undefined:
+ return self._apply_prefix('--no-undefined')
+ return []
+
def get_thinlto_cache_args(self, path: str) -> T.List[str]:
return ['-Wl,--thinlto-cache-dir=' + path]