diff --git a/compilers.py b/compilers.py index ec618e983..72e9f30e9 100644 --- a/compilers.py +++ b/compilers.py @@ -263,7 +263,16 @@ class CCompiler(Compiler): ofile = open(source_name, 'w') ofile.write('int main(int argc, char **argv) { int class=0; return class; }\n') ofile.close() - pc = subprocess.Popen(self.exelist + [source_name, '-o', binary_name]) + if self.is_cross and self.exe_wrapper is None: + # Linking cross built apps is painful. You can't really + # tell if you should use -nostdlib or not and for example + # on OSX the compiler binary is the same but you need + # a ton of compiler flags to differentiate between + # arm and x86_64. So just compile. + extra_flags = ['-c'] + else: + extra_flags = [] + pc = subprocess.Popen(self.exelist + extra_flags + [source_name, '-o', binary_name]) pc.wait() if pc.returncode != 0: raise EnvironmentException('Compiler %s can not compile programs.' % self.name_string()) diff --git a/interpreter.py b/interpreter.py index 9e494f09c..70ce271c7 100644 --- a/interpreter.py +++ b/interpreter.py @@ -1526,7 +1526,7 @@ class Interpreter(): i = i.held_object except AttributeError: pass - if not isinstance(i, (str, build.BuildTarget)): + if not isinstance(i, (str, build.BuildTarget, build.CustomTarget)): mlog.debug('Wrong type:', str(i)) raise InterpreterException('Invalid argument to run_target.') cleaned_args.append(i) diff --git a/ninjabackend.py b/ninjabackend.py index bd074bfe3..f948328ae 100644 --- a/ninjabackend.py +++ b/ninjabackend.py @@ -354,13 +354,13 @@ class NinjaBackend(backends.Backend): for i in target.args: if isinstance(i, str): arg_strings.append(i) - elif isinstance(i, build.BuildTarget): + elif isinstance(i, (build.BuildTarget, build.CustomTarget)): relfname = self.get_target_filename(i) deps.append(relfname) arg_strings.append(os.path.join(self.environment.get_build_dir(), relfname)) else: mlog.debug(str(i)) - raise MesonException('Unreachable code.') + raise MesonException('Unreachable code in generate_run_target.') elem = NinjaBuildElement(target.name, 'CUSTOM_COMMAND', deps) cmd = [sys.executable, runnerscript, self.environment.get_source_dir(), self.environment.get_build_dir(), target.subdir] texe = target.command