aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/backend/backends.py4
-rw-r--r--mesonbuild/backend/ninjabackend.py20
-rw-r--r--mesonbuild/backend/vs2010backend.py4
-rw-r--r--mesonbuild/build.py25
-rw-r--r--mesonbuild/interpreter.py36
5 files changed, 59 insertions, 30 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index df72eff..bdc3fad 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -535,10 +535,10 @@ class Backend:
commands += compiler.get_optimization_args(self.get_option_for_target('optimization', target))
commands += compiler.get_debug_args(self.get_option_for_target('debug', target))
# Add compile args added using add_project_arguments()
- commands += self.build.get_project_args(compiler, target.subproject)
+ commands += self.build.get_project_args(compiler, target.subproject, target.is_cross)
# Add compile args added using add_global_arguments()
# These override per-project arguments
- commands += self.build.get_global_args(compiler)
+ commands += self.build.get_global_args(compiler, target.is_cross)
if not target.is_cross:
# Compile args added from the env: CFLAGS/CXXFLAGS, etc. We want these
# to override all the defaults, but not the per-target compile args.
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 824145a..83bff8a 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -855,8 +855,8 @@ int dummy;
for dep in target.get_external_deps():
commands.extend_direct(dep.get_link_args())
- commands += self.build.get_project_args(compiler, target.subproject)
- commands += self.build.get_global_args(compiler)
+ commands += self.build.get_project_args(compiler, target.subproject, target.is_cross)
+ commands += self.build.get_global_args(compiler, target.is_cross)
elem = NinjaBuildElement(self.all_outputs, outputs, 'cs_COMPILER', rel_srcs)
elem.add_dep(deps)
@@ -869,8 +869,8 @@ int dummy;
deps = [os.path.join(self.get_target_dir(l), l.get_filename()) for l in target.link_targets]
args = []
args += compiler.get_buildtype_args(self.get_option_for_target('buildtype', target))
- args += self.build.get_global_args(compiler)
- args += self.build.get_project_args(compiler, target.subproject)
+ args += self.build.get_global_args(compiler, target.is_cross)
+ args += self.build.get_project_args(compiler, target.subproject, target.is_cross)
args += target.get_java_args()
args += compiler.get_output_args(self.get_target_private_dir(target))
args += target.get_classpath_args()
@@ -1247,8 +1247,8 @@ int dummy;
compile_args += swiftc.get_optimization_args(self.get_option_for_target('optimization', target))
compile_args += swiftc.get_debug_args(self.get_option_for_target('debug', target))
compile_args += swiftc.get_module_args(module_name)
- compile_args += self.build.get_project_args(swiftc, target.subproject)
- compile_args += self.build.get_global_args(swiftc)
+ compile_args += self.build.get_project_args(swiftc, target.subproject, target.is_cross)
+ compile_args += self.build.get_global_args(swiftc, target.is_cross)
for i in reversed(target.get_include_dirs()):
basedir = i.get_curdir()
for d in i.get_incdirs():
@@ -1260,8 +1260,8 @@ int dummy;
sargs = swiftc.get_include_args(srctreedir)
compile_args += sargs
link_args = swiftc.get_output_args(os.path.join(self.environment.get_build_dir(), self.get_target_filename(target)))
- link_args += self.build.get_project_link_args(swiftc, target.subproject)
- link_args += self.build.get_global_link_args(swiftc)
+ link_args += self.build.get_project_link_args(swiftc, target.subproject, target.is_cross)
+ link_args += self.build.get_global_link_args(swiftc, target.is_cross)
rundir = self.get_target_private_dir(target)
out_module_name = self.swift_module_file_name(target)
in_module_files = self.determine_swift_dep_modules(target)
@@ -2395,10 +2395,10 @@ rule FORTRAN_DEP_HACK%s
if not isinstance(target, build.StaticLibrary):
# Add link args added using add_project_link_arguments()
- commands += self.build.get_project_link_args(linker, target.subproject)
+ commands += self.build.get_project_link_args(linker, target.subproject, target.is_cross)
# Add link args added using add_global_link_arguments()
# These override per-project link arguments
- commands += self.build.get_global_link_args(linker)
+ commands += self.build.get_global_link_args(linker, target.is_cross)
if not target.is_cross:
# Link args added from the env: LDFLAGS. We want these to
# override all the defaults but not the per-target link args.
diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py
index 4c799d0..2e86ca9 100644
--- a/mesonbuild/backend/vs2010backend.py
+++ b/mesonbuild/backend/vs2010backend.py
@@ -998,10 +998,10 @@ class Vs2010Backend(backends.Backend):
options = self.environment.coredata.base_options
extra_link_args += compiler.get_std_shared_module_link_args(options)
# Add link args added using add_project_link_arguments()
- extra_link_args += self.build.get_project_link_args(compiler, target.subproject)
+ extra_link_args += self.build.get_project_link_args(compiler, target.subproject, target.is_cross)
# Add link args added using add_global_link_arguments()
# These override per-project link arguments
- extra_link_args += self.build.get_global_link_args(compiler)
+ extra_link_args += self.build.get_global_link_args(compiler, target.is_cross)
if not target.is_cross:
# Link args added from the env: LDFLAGS. We want these to
# override all the defaults but not the per-target link args.
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index c1cb8a8..caaadd8 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -108,6 +108,10 @@ class Build:
self.projects_args = {}
self.global_link_args = {}
self.projects_link_args = {}
+ self.cross_global_args = {}
+ self.cross_projects_args = {}
+ self.cross_global_link_args = {}
+ self.cross_projects_link_args = {}
self.tests = []
self.benchmarks = []
self.headers = []
@@ -168,20 +172,25 @@ class Build:
def get_install_subdirs(self):
return self.install_dirs
- def get_global_args(self, compiler):
- return self.global_args.get(compiler.get_language(), [])
+ def get_global_args(self, compiler, for_cross):
+ d = self.cross_global_args if for_cross else self.global_args
+ return d.get(compiler.get_language(), [])
- def get_project_args(self, compiler, project):
- args = self.projects_args.get(project)
+ def get_project_args(self, compiler, project, for_cross):
+ d = self.cross_projects_args if for_cross else self.projects_args
+ args = d.get(project)
if not args:
return []
return args.get(compiler.get_language(), [])
- def get_global_link_args(self, compiler):
- return self.global_link_args.get(compiler.get_language(), [])
+ def get_global_link_args(self, compiler, for_cross):
+ d = self.cross_global_link_args if for_cross else self.global_link_args
+ return d.get(compiler.get_language(), [])
- def get_project_link_args(self, compiler, project):
- link_args = self.projects_link_args.get(project)
+ def get_project_link_args(self, compiler, project, for_cross):
+ d = self.cross_projects_link_args if for_cross else self.projects_link_args
+
+ link_args = d.get(project)
if not link_args:
return []
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 707cf9e..0b4cbce 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -1808,11 +1808,11 @@ known_build_target_kwargs = (
{'target_type'}
)
-permitted_kwargs = {'add_global_arguments': {'language'},
- 'add_global_link_arguments': {'language'},
- 'add_project_link_arguments': {'language'},
+permitted_kwargs = {'add_global_arguments': {'language', 'native'},
+ 'add_global_link_arguments': {'language', 'native'},
'add_languages': {'required'},
- 'add_project_arguments': {'language'},
+ 'add_project_link_arguments': {'language', 'native'},
+ 'add_project_arguments': {'language', 'native'},
'add_test_setup': {'exe_wrapper', 'gdb', 'timeout_multiplier', 'env'},
'benchmark': {'args', 'env', 'should_fail', 'timeout', 'workdir', 'suite'},
'build_target': known_build_target_kwargs,
@@ -3653,25 +3653,45 @@ different subdirectory.
timeout_multiplier=timeout_multiplier,
env=env)
+ def get_argdict_on_crossness(self, native_dict, cross_dict, kwargs):
+ for_native = kwargs.get('native', not self.environment.is_cross_build())
+ if not isinstance(for_native, bool):
+ raise InterpreterException('Keyword native must be a boolean.')
+ if for_native:
+ return native_dict
+ else:
+ return cross_dict
+
@permittedKwargs(permitted_kwargs['add_global_arguments'])
@stringArgs
def func_add_global_arguments(self, node, args, kwargs):
- self.add_global_arguments(node, self.build.global_args, args, kwargs)
+ argdict = self.get_argdict_on_crossness(self.build.global_args,
+ self.build.cross_global_args,
+ kwargs)
+ self.add_global_arguments(node, argdict, args, kwargs)
@permittedKwargs(permitted_kwargs['add_global_link_arguments'])
@stringArgs
def func_add_global_link_arguments(self, node, args, kwargs):
- self.add_global_arguments(node, self.build.global_link_args, args, kwargs)
+ argdict = self.get_argdict_on_crossness(self.build.global_link_args,
+ self.build.cross_global_link_args,
+ kwargs)
+ self.add_global_arguments(node, argdict, args, kwargs)
@permittedKwargs(permitted_kwargs['add_project_arguments'])
@stringArgs
def func_add_project_arguments(self, node, args, kwargs):
- self.add_project_arguments(node, self.build.projects_args, args, kwargs)
+ argdict = self.get_argdict_on_crossness(self.build.projects_args,
+ self.build.cross_projects_args,
+ kwargs)
+ self.add_project_arguments(node, argdict, args, kwargs)
@permittedKwargs(permitted_kwargs['add_project_link_arguments'])
@stringArgs
def func_add_project_link_arguments(self, node, args, kwargs):
- self.add_project_arguments(node, self.build.projects_link_args, args, kwargs)
+ argdict = self.get_argdict_on_crossness(self.build.projects_link_args,
+ self.build.cross_projects_link_args, kwargs)
+ self.add_project_arguments(node, argdict, args, kwargs)
def add_global_arguments(self, node, argsdict, args, kwargs):
if self.is_subproject():