Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Store global and project arguments separately for cross and native co… #3220

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions mesonbuild/backend/backends.py
Original file line number Diff line number Diff line change
Expand Up @@ -532,10 +532,10 @@ def generate_basic_compiler_args(self, target, compiler, no_warn_args=False):
# Add buildtype args: optimization level, debugging, etc.
commands += compiler.get_buildtype_args(self.get_option_for_target('buildtype', 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.
Expand Down
20 changes: 10 additions & 10 deletions mesonbuild/backend/ninjabackend.py
Original file line number Diff line number Diff line change
Expand Up @@ -853,8 +853,8 @@ def generate_cs_target(self, target, outfile):

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)
Expand All @@ -867,8 +867,8 @@ def generate_single_java_compile(self, src, target, compiler, outfile):
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()
Expand Down Expand Up @@ -1242,8 +1242,8 @@ def generate_swift_target(self, target, outfile):
os.makedirs(self.get_target_private_dir_abs(target), exist_ok=True)
compile_args = swiftc.get_compile_only_args()
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():
Expand All @@ -1255,8 +1255,8 @@ def generate_swift_target(self, target, outfile):
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)
Expand Down Expand Up @@ -2389,10 +2389,10 @@ def generate_link(self, target, outfile, outname, obj_list, linker, extra_args=[

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.
Expand Down
26 changes: 20 additions & 6 deletions mesonbuild/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,13 @@ def __init__(self, environment):
self.compilers = OrderedDict()
self.cross_compilers = OrderedDict()
self.global_args = {}
self.global_cross_args = {}
self.projects_args = {}
self.projects_cross_args = {}
self.global_link_args = {}
self.global_cross_link_args = {}
self.projects_link_args = {}
self.projects_cross_link_args = {}
self.tests = []
self.benchmarks = []
self.headers = []
Expand Down Expand Up @@ -167,20 +171,30 @@ def get_data(self):
def get_install_subdirs(self):
return self.install_dirs

def get_global_args(self, compiler):
def get_global_args(self, compiler, is_cross):
if is_cross:
return self.global_cross_args.get(compiler.get_language(), [])
return self.global_args.get(compiler.get_language(), [])

def get_project_args(self, compiler, project):
args = self.projects_args.get(project)
def get_project_args(self, compiler, project, is_cross):
if is_cross:
args = self.projects_cross_args.get(project)
else:
args = self.projects_args.get(project)
if not args:
return []
return args.get(compiler.get_language(), [])

def get_global_link_args(self, compiler):
def get_global_link_args(self, compiler, is_cross):
if is_cross:
return self.global_cross_link_args.get(compiler.get_language(), [])
return self.global_link_args.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, is_cross):
if is_cross:
link_args = self.projects_cross_link_args.get(project)
else:
link_args = self.projects_link_args.get(project)
if not link_args:
return []

Expand Down
21 changes: 17 additions & 4 deletions mesonbuild/interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -3630,25 +3630,38 @@ def func_add_test_setup(self, node, args, kwargs):
timeout_multiplier=timeout_multiplier,
env=env)

def use_cross_list(self, kwargs):
if 'native' in kwargs:
b = kwargs['native']
if not isinstance(b, bool):
raise InterpreterException('Native keyword must be boolean.')
return not b
else:
return self.environment.is_cross_build()

@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)
arg_obj = self.build.global_cross_args if self.use_cross_list(kwargs) else self.build.global_args
self.add_global_arguments(node, arg_obj, 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)
arg_obj = self.build.global_cross_link_args if self.use_cross_list(kwargs) else self.build.global_link_args
self.add_global_arguments(node, arg_obj, 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)
arg_obj = self.build.projects_cross_args if self.use_cross_list(kwargs) else self.build.projects_args
self.add_project_arguments(node, arg_obj, 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)
arg_obj = self.build.projects_cross_link_args if self.use_cross_list(kwargs) else self.build.projects_link_args
self.add_project_arguments(node, arg_obj, args, kwargs)

def add_global_arguments(self, node, argsdict, args, kwargs):
if self.is_subproject():
Expand Down