aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/backend/ninjabackend.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-04-02 19:06:16 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2017-04-08 22:14:09 +0300
commitd152c1b5d549769c7977688fbb8c4cde037192e7 (patch)
tree0503da8250ec18a3e3f7787fc8bc2c9e038c2d58 /mesonbuild/backend/ninjabackend.py
parent79208fd9c4e6c865f4ef12ce992d5e3d8c7f4ad4 (diff)
downloadmeson-d152c1b5d549769c7977688fbb8c4cde037192e7.zip
meson-d152c1b5d549769c7977688fbb8c4cde037192e7.tar.gz
meson-d152c1b5d549769c7977688fbb8c4cde037192e7.tar.bz2
Add option to link the entire contents of a static library to a target.
Diffstat (limited to 'mesonbuild/backend/ninjabackend.py')
-rw-r--r--mesonbuild/backend/ninjabackend.py9
1 files changed, 9 insertions, 0 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 5a9462f..4bfddc2 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -2126,6 +2126,10 @@ rule FORTRAN_DEP_HACK
raise RuntimeError('Unknown build target type.')
return commands
+ def get_link_whole_args(self, linker, target):
+ target_args = self.build_target_link_arguments(linker, target.link_whole_targets)
+ return linker.get_link_whole_for(target_args)
+
def generate_link(self, target, outfile, outname, obj_list, linker, extra_args=[]):
if isinstance(target, build.StaticLibrary):
linker_base = 'STATIC'
@@ -2165,6 +2169,11 @@ rule FORTRAN_DEP_HACK
# Add link args specific to this BuildTarget type, such as soname args,
# PIC, import library generation, etc.
commands += self.get_target_type_link_args(target, linker)
+ # Archives that are copied wholesale in the result. Must be before any
+ # other link targets so missing symbols from whole archives are found in those.
+ if not isinstance(target, build.StaticLibrary):
+ commands += self.get_link_whole_args(linker, target)
+
if not isinstance(target, build.StaticLibrary):
# Add link args added using add_project_link_arguments()
commands += self.build.get_project_link_args(linker, target.subproject)