Can set global linker arguments. Closes #536.

pull/569/head
Jussi Pakkanen 9 years ago
parent 1b78e354a6
commit 4377f773e0
  1. 2
      mesonbuild/backend/ninjabackend.py
  2. 4
      mesonbuild/build.py
  3. 15
      mesonbuild/interpreter.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):

@ -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

@ -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

Loading…
Cancel
Save