diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2020-11-14 16:43:00 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2020-12-03 22:58:07 +0200 |
commit | c21b04ba087189472c60ce6e84987b74e9b7fccd (patch) | |
tree | 71a5c7a660cf638e344c26f63b929902689a195e /mesonbuild/backend/ninjabackend.py | |
parent | 6e39dcad2fbd8d1c739e262b0e7b7d901cf1ce08 (diff) | |
download | meson-c21b04ba087189472c60ce6e84987b74e9b7fccd.zip meson-c21b04ba087189472c60ce6e84987b74e9b7fccd.tar.gz meson-c21b04ba087189472c60ce6e84987b74e9b7fccd.tar.bz2 |
Add prelinking support for static libraries.
Diffstat (limited to 'mesonbuild/backend/ninjabackend.py')
-rw-r--r-- | mesonbuild/backend/ninjabackend.py | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index b03954a..0fe8a2f 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -840,7 +840,11 @@ int dummy; for src in self.generate_unity_files(target, unity_src): obj_list.append(self.generate_single_compile(target, src, True, unity_deps + header_deps)) linker, stdlib_args = self.determine_linker_and_stdlib_args(target) - elem = self.generate_link(target, outname, obj_list, linker, pch_objects, stdlib_args=stdlib_args) + if isinstance(target, build.StaticLibrary) and target.prelink: + final_obj_list = self.generate_prelink(target, obj_list) + else: + final_obj_list = obj_list + elem = self.generate_link(target, outname, final_obj_list, linker, pch_objects, stdlib_args=stdlib_args) self.generate_shlib_aliases(target, self.get_target_dir(target)) self.add_build(elem) @@ -2683,6 +2687,21 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) return guessed_dependencies + absolute_libs + def generate_prelink(self, target, obj_list): + assert(isinstance(target, build.StaticLibrary)) + prelink_name = os.path.join(self.get_target_private_dir(target), target.name + '-prelink.o') + elem = NinjaBuildElement(self.all_outputs, [prelink_name], 'CUSTOM_COMMAND', obj_list) + + prelinker = target.get_prelinker() + cmd = prelinker.exelist[:] + cmd += prelinker.get_prelink_args(prelink_name, obj_list) + + cmd = self.replace_paths(target, cmd) + elem.add_item('COMMAND', cmd) + elem.add_item('description', 'Prelinking {}.'.format(prelink_name)) + self.add_build(elem) + return [prelink_name] + def generate_link(self, target, outname, obj_list, linker, extra_args=None, stdlib_args=None): extra_args = extra_args if extra_args is not None else [] stdlib_args = stdlib_args if stdlib_args is not None else [] |