From abe72d5c8415c83f268d01b266e2fa5f5892de46 Mon Sep 17 00:00:00 2001 From: Peter Harris Date: Mon, 10 Aug 2020 19:03:09 -0400 Subject: aix: detect and support the AIX dynamic linker --- mesonbuild/linkers.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'mesonbuild/linkers.py') 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.""" -- cgit v1.1 From 0f90299b1c5ba98a685e6545fcc6eda5acbe996d Mon Sep 17 00:00:00 2001 From: Peter Harris Date: Wed, 12 Aug 2020 19:49:35 -0400 Subject: aix: allow both 32-bit and 64-bit objects in a static library Without the -Xany flag, the ar command will complain when an .o file is compiled for the non-default bit width. This change is necessary to allow 64-bit builds via a native (or cross) file. --- mesonbuild/linkers.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'mesonbuild/linkers.py') diff --git a/mesonbuild/linkers.py b/mesonbuild/linkers.py index 84c6538..535174d 100644 --- a/mesonbuild/linkers.py +++ b/mesonbuild/linkers.py @@ -247,6 +247,18 @@ class C2000Linker(StaticLinker): return ['-r'] +class AIXArLinker(ArLinker): + + def __init__(self, exelist: T.List[str]): + StaticLinker.__init__(self, exelist) + self.id = 'aixar' + self.std_args = ['-csr', '-Xany'] + + def can_linker_accept_rsp(self) -> bool: + # AIXAr can't accept arguments using the @rsp syntax + return False + + def prepare_rpaths(raw_rpaths: str, build_dir: str, from_dir: str) -> T.List[str]: # The rpaths we write must be relative if they point to the build dir, # because otherwise they have different length depending on the build -- cgit v1.1