diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2022-07-25 10:11:31 -0700 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2023-09-06 10:01:52 -0400 |
commit | 15811e362e0d38981bdb62c0fbc50356b660b6fd (patch) | |
tree | f0b397f424da15edd57ca15d1383f043314cb864 | |
parent | 84466b735986c9f548899f7e7669be782de091e8 (diff) | |
download | meson-15811e362e0d38981bdb62c0fbc50356b660b6fd.zip meson-15811e362e0d38981bdb62c0fbc50356b660b6fd.tar.gz meson-15811e362e0d38981bdb62c0fbc50356b660b6fd.tar.bz2 |
backends/ninja: run `ranlib -c $out` when using the apple ar
Apple's AR is old, and doesn't add externed symbols to the symbol table,
instead relying on the user calling ranlib with -c. We need to do that
for the user
-rw-r--r-- | mesonbuild/backend/ninjabackend.py | 13 | ||||
-rw-r--r-- | mesonbuild/linkers/linkers.py | 4 |
2 files changed, 16 insertions, 1 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 03f33d6..6c739ed 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -2350,7 +2350,7 @@ class NinjaBackend(backends.Backend): if static_linker is None: continue rule = 'STATIC_LINKER{}'.format(self.get_rule_suffix(for_machine)) - cmdlist = [] + cmdlist: T.List[T.Union[str, NinjaCommandArg]] = [] args = ['$in'] # FIXME: Must normalize file names with pathlib.Path before writing # them out to fix this properly on Windows. See: @@ -2364,6 +2364,17 @@ class NinjaBackend(backends.Backend): cmdlist += static_linker.get_exelist() cmdlist += ['$LINK_ARGS'] cmdlist += NinjaCommandArg.list(static_linker.get_output_args('$out'), Quoting.none) + # The default ar on MacOS (at least through version 12), does not + # add extern'd variables to the symbol table by default, and + # requires that apple's ranlib be called with a special flag + # instead after linking + if static_linker.id == 'applear': + # This is a bit of a hack, but we assume that that we won't need + # an rspfile on MacOS, otherwise the arguments are passed to + # ranlib, not to ar + cmdlist.extend(args) + args = [] + cmdlist.extend(['&&', 'ranlib', '-c', '$out']) description = 'Linking static target $out' if num_pools > 0: pool = 'pool = link_pool' diff --git a/mesonbuild/linkers/linkers.py b/mesonbuild/linkers/linkers.py index 9176090..0c2bf73 100644 --- a/mesonbuild/linkers/linkers.py +++ b/mesonbuild/linkers/linkers.py @@ -349,6 +349,8 @@ class VisualStudioLinker(VisualStudioLikeLinker, StaticLinker): """Microsoft's lib static linker.""" + id = 'lib' + def __init__(self, exelist: T.List[str], machine: str): StaticLinker.__init__(self, exelist) VisualStudioLikeLinker.__init__(self, machine) @@ -358,6 +360,8 @@ class IntelVisualStudioLinker(VisualStudioLikeLinker, StaticLinker): """Intel's xilib static linker.""" + id = 'xilib' + def __init__(self, exelist: T.List[str], machine: str): StaticLinker.__init__(self, exelist) VisualStudioLikeLinker.__init__(self, machine) |