diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2016-05-28 21:31:59 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2016-05-28 21:31:59 +0300 |
commit | 4377f773e0c573ba132a1abd93fc430f4ebaa489 (patch) | |
tree | 266a73b1b3bc57b237eb0c45dcd0dff69e49b8e7 | |
parent | 1b78e354a60af228ab0ab9497f3d890064e09caf (diff) | |
download | meson-4377f773e0c573ba132a1abd93fc430f4ebaa489.zip meson-4377f773e0c573ba132a1abd93fc430f4ebaa489.tar.gz meson-4377f773e0c573ba132a1abd93fc430f4ebaa489.tar.bz2 |
Can set global linker arguments. Closes #536.
-rw-r--r-- | mesonbuild/backend/ninjabackend.py | 2 | ||||
-rw-r--r-- | mesonbuild/build.py | 4 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 15 |
3 files changed, 21 insertions, 0 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index d4c2e92..05702fd 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -1626,6 +1626,8 @@ rule FORTRAN_DEP_HACK linker_rule = linker_base + crstr + '_LINKER' abspath = os.path.join(self.environment.get_build_dir(), target.subdir) commands = [] + if not isinstance(target, build.StaticLibrary): + commands += self.build.get_global_link_args(linker) commands += self.get_cross_stdlib_link_args(target, linker) commands += linker.get_linker_always_args() if not isinstance(target, build.StaticLibrary): diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 9de556c..fcf1ac6 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -88,6 +88,7 @@ class Build: self.compilers = [] self.cross_compilers = [] self.global_args = {} + self.global_link_args = {} self.tests = [] self.benchmarks = [] self.headers = [] @@ -151,6 +152,9 @@ class Build: def get_global_args(self, compiler): return self.global_args.get(compiler.get_language(), []) + def get_global_link_args(self, compiler): + return self.global_link_args.get(compiler.get_language(), []) + class IncludeDirs(): def __init__(self, curdir, dirs, is_system, extra_build_dirs=None): self.curdir = curdir diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 71e9c8d..dc03915 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -1003,6 +1003,7 @@ class Interpreter(): 'configure_file' : self.func_configure_file, 'include_directories' : self.func_include_directories, 'add_global_arguments' : self.func_add_global_arguments, + 'add_global_link_arguments' : self.func_add_global_link_arguments, 'add_languages' : self.func_add_languages, 'find_program' : self.func_find_program, 'find_library' : self.func_find_library, @@ -1919,6 +1920,20 @@ class Interpreter(): else: self.build.global_args[lang] = args + @stringArgs + def func_add_global_link_arguments(self, node, args, kwargs): + if self.subproject != '': + raise InvalidCode('Global arguments can not be set in subprojects because there is no way to make that reliable.') + if self.global_args_frozen: + raise InvalidCode('Tried to set global arguments after a build target has been declared.\nThis is not permitted. Please declare all global arguments before your targets.') + if not 'language' in kwargs: + raise InvalidCode('Missing language definition in add_global_arguments') + lang = kwargs['language'].lower() + if lang in self.build.global_link_args: + self.build.global_link_args[lang] += args + else: + self.build.global_link_args[lang] = args + def flatten(self, args): if isinstance(args, mparser.StringNode): return args.value |