aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/build.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2020-11-14 16:43:00 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2020-11-14 21:57:12 +0200
commit1bb5c8a4fb625d5ff296d0f31fc3b3cc92580d62 (patch)
treec5b1521d43a8ab02725e5626d2e51ba330fb7b55 /mesonbuild/build.py
parent59cacbbfc17dffe4aede1dfaa93bd5e1a3e994b2 (diff)
downloadmeson-prelink.zip
meson-prelink.tar.gz
meson-prelink.tar.bz2
Add prelinking support for static libraries.prelink
Diffstat (limited to 'mesonbuild/build.py')
-rw-r--r--mesonbuild/build.py22
1 files changed, 21 insertions, 1 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 36d4e19..5b7a679 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -102,7 +102,7 @@ known_build_target_kwargs = (
known_exe_kwargs = known_build_target_kwargs | {'implib', 'export_dynamic', 'pie'}
known_shlib_kwargs = known_build_target_kwargs | {'version', 'soversion', 'vs_module_defs', 'darwin_versions'}
known_shmod_kwargs = known_build_target_kwargs | {'vs_module_defs'}
-known_stlib_kwargs = known_build_target_kwargs | {'pic'}
+known_stlib_kwargs = known_build_target_kwargs | {'pic', 'prelink'}
known_jar_kwargs = known_exe_kwargs | {'main_class'}
@lru_cache(maxsize=None)
@@ -1280,6 +1280,23 @@ You probably should put it in link_with instead.''')
return langs
+ def get_prelinker(self):
+ all_compilers = self.environment.coredata.compilers[self.for_machine]
+ if self.link_language:
+ comp = all_compilers[self.link_language]
+ return comp
+ for l in clink_langs:
+ if l in self.compilers:
+ try:
+ prelinker = all_compilers[l]
+ except KeyError:
+ raise MesonException(
+ 'Could not get a prelinker linker for build target {!r}. '
+ 'Requires a compiler for language "{}", but that is not '
+ 'a project language.'.format(self.name, l))
+ return prelinker
+ raise MesonException('Could not determine prelinker for {!r}.'.format(self.name))
+
def get_clink_dynamic_linker_and_stdlibs(self):
'''
We use the order of languages in `clink_langs` to determine which
@@ -1674,6 +1691,9 @@ class StaticLibrary(BuildTarget):
self.suffix = 'a'
self.filename = self.prefix + self.name + '.' + self.suffix
self.outputs = [self.filename]
+ self.prelink = kwargs.get('prelink', False)
+ if not isinstance(self.prelink, bool):
+ raise InvalidArguments('Prelink keyword argument must be a boolean.')
def get_link_deps_mapping(self, prefix, environment):
return {}