diff options
author | Eli Schwartz <eschwartz@archlinux.org> | 2021-09-23 17:20:45 -0400 |
---|---|---|
committer | Eli Schwartz <eschwartz@archlinux.org> | 2021-10-10 13:32:22 -0400 |
commit | 0a3a9fa0c3ebf45c94d9009a59cead571cbecf7b (patch) | |
tree | 9c91885f2dc1a908192fb3fe5e2ac03c8510059d /mesonbuild/linkers | |
parent | 253ff71e6b801786290b6ecb23aea61dcfeebeca (diff) | |
download | meson-0a3a9fa0c3ebf45c94d9009a59cead571cbecf7b.zip meson-0a3a9fa0c3ebf45c94d9009a59cead571cbecf7b.tar.gz meson-0a3a9fa0c3ebf45c94d9009a59cead571cbecf7b.tar.bz2 |
ar linker: generate thin archives for uninstalled static libraries
Since they will never be used outside of the build directory, they do
not need to literally contain the .o files, and references will be
sufficient.
This covers a major use of object libraries, which is that the static
library would potentially take up a lot of space by including another
copy of every .o file.
Fixes #9292
Fixes #8057
Fixes #2129
Diffstat (limited to 'mesonbuild/linkers')
-rw-r--r-- | mesonbuild/linkers/linkers.py | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/mesonbuild/linkers/linkers.py b/mesonbuild/linkers/linkers.py index bbd6c46..9332baa 100644 --- a/mesonbuild/linkers/linkers.py +++ b/mesonbuild/linkers/linkers.py @@ -59,7 +59,7 @@ class StaticLinker: def get_exelist(self) -> T.List[str]: return self.exelist.copy() - def get_std_link_args(self) -> T.List[str]: + def get_std_link_args(self, is_thin: bool) -> T.List[str]: return [] def get_buildtype_linker_args(self, buildtype: str) -> T.List[str]: @@ -176,7 +176,7 @@ class ArLikeLinker(StaticLinker): # in fact, only the 'ar' id can return False - def get_std_link_args(self) -> T.List[str]: + def get_std_link_args(self, is_thin: bool) -> T.List[str]: return self.std_args def get_output_args(self, target: str) -> T.List[str]: @@ -193,17 +193,28 @@ class ArLinker(ArLikeLinker): super().__init__(exelist) stdo = mesonlib.Popen_safe(self.exelist + ['-h'])[1] # Enable deterministic builds if they are available. + stdargs = 'csr' + thinargs = '' if '[D]' in stdo: - self.std_args = ['csrD'] - else: - self.std_args = ['csrD'] + stdargs += 'D' + if '[T]' in stdo: + thinargs = 'T' + self.std_args = [stdargs] + self.std_thin_args = [stdargs + thinargs] self.can_rsp = '@<' in stdo def can_linker_accept_rsp(self) -> bool: return self.can_rsp + def get_std_link_args(self, is_thin: bool) -> T.List[str]: + # FIXME: osx ld rejects this: "file built for unknown-unsupported file format" + if is_thin and not mesonlib.is_osx(): + return self.std_thin_args + else: + return self.std_args + -class ArmarLinker(ArLikeLinker): # lgtm [py/missing-call-to-init] +class ArmarLinker(ArLikeLinker): id = 'armar' @@ -214,7 +225,7 @@ class DLinker(StaticLinker): self.arch = arch self.__rsp_syntax = rsp_syntax - def get_std_link_args(self) -> T.List[str]: + def get_std_link_args(self, is_thin: bool) -> T.List[str]: return ['-lib'] def get_output_args(self, target: str) -> T.List[str]: @@ -1114,7 +1125,7 @@ class PGIStaticLinker(StaticLinker): self.id = 'ar' self.std_args = ['-r'] - def get_std_link_args(self) -> T.List[str]: + def get_std_link_args(self, is_thin: bool) -> T.List[str]: return self.std_args def get_output_args(self, target: str) -> T.List[str]: |