summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-04-15 10:27:20 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2025-04-16 12:17:25 +0300
commitcece1a7e9992a3bbcc35f90777ba22ba9d62b538 (patch)
tree85c8005118fc0743a04ff4a4b7b0ada4ffaf5bca
parent48fc3ec8fa25c0cb001603f025ab516e8f0df1e2 (diff)
downloadmeson-cece1a7e9992a3bbcc35f90777ba22ba9d62b538.tar.gz
linkers: pass system to DynamicLinker.__init__ for Darwin linkers
Apple linkers need to use different arguments on macOS and iOS-like platforms. Pass the system to the constructor so that it can be examined. Co-authored-by: Russell Keith-Magee <russell@keith-magee.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--mesonbuild/compilers/detect.py4
-rw-r--r--mesonbuild/linkers/detect.py13
-rw-r--r--mesonbuild/linkers/linkers.py4
3 files changed, 15 insertions, 6 deletions
diff --git a/mesonbuild/compilers/detect.py b/mesonbuild/compilers/detect.py
index 9dab06a85..53bdd8513 100644
--- a/mesonbuild/compilers/detect.py
+++ b/mesonbuild/compilers/detect.py
@@ -1122,8 +1122,8 @@ def detect_rust_compiler(env: 'Environment', for_machine: MachineChoice) -> Rust
version=cc.linker.version, **extra_args) # type: ignore
else:
linker = type(cc.linker)(compiler, for_machine, cc.LINKER_PREFIX,
- always_args=always_args, version=cc.linker.version,
- **extra_args)
+ always_args=always_args, system=cc.linker.system,
+ version=cc.linker.version, **extra_args)
elif 'link' in override[0]:
linker = guess_win_linker(env,
override, cls, version, for_machine, use_linker_prefix=False)
diff --git a/mesonbuild/linkers/detect.py b/mesonbuild/linkers/detect.py
index 493430a87..ee9bb0861 100644
--- a/mesonbuild/linkers/detect.py
+++ b/mesonbuild/linkers/detect.py
@@ -131,6 +131,7 @@ def guess_nix_linker(env: 'Environment', compiler: T.List[str], comp_class: T.Ty
env.coredata.add_lang_args(comp_class.language, comp_class, for_machine, env)
extra_args = extra_args or []
+ system = env.machines[for_machine].system
ldflags = env.coredata.get_external_link_args(for_machine, comp_class.language)
extra_args += comp_class._unix_args_to_native(ldflags, env.machines[for_machine])
@@ -164,7 +165,7 @@ def guess_nix_linker(env: 'Environment', compiler: T.List[str], comp_class: T.Ty
lld_cls = linkers.LLVMDynamicLinker
linker = lld_cls(
- compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v)
+ compiler, for_machine, comp_class.LINKER_PREFIX, override, system=system, version=v)
elif 'Snapdragon' in e and 'LLVM' in e:
linker = linkers.QualcommLLVMDynamicLinker(
compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v)
@@ -222,7 +223,10 @@ def guess_nix_linker(env: 'Environment', compiler: T.List[str], comp_class: T.Ty
elif 'xtools-' in o.split('\n', maxsplit=1)[0]:
xtools = o.split(' ', maxsplit=1)[0]
v = xtools.split('-', maxsplit=2)[1]
- linker = linkers.AppleDynamicLinker(compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v)
+ linker = linkers.AppleDynamicLinker(
+ compiler, for_machine, comp_class.LINKER_PREFIX, override,
+ system=system, version=v
+ )
# detect linker on MacOS - must be after other platforms because the
# "(use -v to see invocation)" will match clang on other platforms,
# but the rest of the checks will fail and call __failed_to_detect_linker.
@@ -241,7 +245,10 @@ def guess_nix_linker(env: 'Environment', compiler: T.List[str], comp_class: T.Ty
break
else:
__failed_to_detect_linker(compiler, check_args, o, e)
- linker = linkers.AppleDynamicLinker(compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v)
+ linker = linkers.AppleDynamicLinker(
+ compiler, for_machine, comp_class.LINKER_PREFIX, override,
+ system=system, version=v
+ )
else:
__failed_to_detect_linker(compiler, check_args, o, e)
return linker
diff --git a/mesonbuild/linkers/linkers.py b/mesonbuild/linkers/linkers.py
index e74ff708d..47a76198e 100644
--- a/mesonbuild/linkers/linkers.py
+++ b/mesonbuild/linkers/linkers.py
@@ -141,9 +141,11 @@ class DynamicLinker(metaclass=abc.ABCMeta):
def __init__(self, exelist: T.List[str],
for_machine: mesonlib.MachineChoice, prefix_arg: T.Union[str, T.List[str]],
- always_args: T.List[str], *, version: str = 'unknown version'):
+ always_args: T.List[str], *, system: str = 'unknown system',
+ version: str = 'unknown version'):
self.exelist = exelist
self.for_machine = for_machine
+ self.system = system
self.version = version
self.prefix_arg = prefix_arg
self.always_args = always_args