aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-05-28 21:31:59 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2016-05-28 21:31:59 +0300
commit4377f773e0c573ba132a1abd93fc430f4ebaa489 (patch)
tree266a73b1b3bc57b237eb0c45dcd0dff69e49b8e7
parent1b78e354a60af228ab0ab9497f3d890064e09caf (diff)
downloadmeson-4377f773e0c573ba132a1abd93fc430f4ebaa489.zip
meson-4377f773e0c573ba132a1abd93fc430f4ebaa489.tar.gz
meson-4377f773e0c573ba132a1abd93fc430f4ebaa489.tar.bz2
Can set global linker arguments. Closes #536.
-rw-r--r--mesonbuild/backend/ninjabackend.py2
-rw-r--r--mesonbuild/build.py4
-rw-r--r--mesonbuild/interpreter.py15
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