diff options
-rw-r--r-- | mesonbuild/environment.py | 9 | ||||
-rw-r--r-- | mesonbuild/linkers.py | 32 |
2 files changed, 41 insertions, 0 deletions
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index 315f6c5..bf49de9 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -61,6 +61,7 @@ from .linkers import ( PGIDynamicLinker, PGIStaticLinker, SolarisDynamicLinker, + AIXDynamicLinker, XilinkDynamicLinker, CudaLinker, VisualStudioLikeLinkerMixin, @@ -1092,6 +1093,14 @@ class Environment: linker = SolarisDynamicLinker( compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v) + elif 'ld: 0706-012 The -- flag is not recognized' in e: + if isinstance(comp_class.LINKER_PREFIX, str): + _, _, e = Popen_safe(compiler + [comp_class.LINKER_PREFIX + '-V'] + extra_args) + else: + _, _, e = Popen_safe(compiler + comp_class.LINKER_PREFIX + ['-V'] + extra_args) + linker = AIXDynamicLinker( + compiler, for_machine, comp_class.LINKER_PREFIX, override, + version=search_version(e)) else: raise EnvironmentException('Unable to determine dynamic linker') return linker diff --git a/mesonbuild/linkers.py b/mesonbuild/linkers.py index 3ce7111..84c6538 100644 --- a/mesonbuild/linkers.py +++ b/mesonbuild/linkers.py @@ -1141,6 +1141,38 @@ class SolarisDynamicLinker(PosixDynamicLinkerMixin, DynamicLinker): return self._apply_prefix('-soname,{}{}.{}{}'.format(prefix, shlib_name, suffix, sostr)) +class AIXDynamicLinker(PosixDynamicLinkerMixin, DynamicLinker): + + """Sys-V derived linker used on AIX""" + + def __init__(self, *args, **kwargs): + super().__init__('ld.aix', *args, **kwargs) + + def get_always_args(self) -> T.List[str]: + return self._apply_prefix(['-bsvr4', '-bnoipath', '-bbigtoc']) + super().get_always_args() + + def no_undefined_args(self) -> T.List[str]: + return self._apply_prefix(['-z', 'defs']) + + def get_allow_undefined_args(self) -> T.List[str]: + return self._apply_prefix(['-z', 'nodefs']) + + def build_rpath_args(self, env: 'Environment', build_dir: str, from_dir: str, + rpath_paths: str, build_rpath: str, + install_rpath: str) -> T.Tuple[T.List[str], T.Set[bytes]]: + all_paths = mesonlib.OrderedSet(['/opt/freeware/lib']) # for libgcc_s.a + for p in rpath_paths: + all_paths.add(os.path.join(build_dir, p)) + if build_rpath != '': + all_paths.add(build_rpath) + if install_rpath != '': + all_paths.add(install_rpath) + return (self._apply_prefix([x for p in all_paths for x in ('-R', p)]), set()) + + def thread_flags(self, env: 'Environment') -> T.List[str]: + return ['-pthread'] + + class OptlinkDynamicLinker(VisualStudioLikeLinkerMixin, DynamicLinker): """Digital Mars dynamic linker for windows.""" |