diff options
Diffstat (limited to 'ninjabackend.py')
-rw-r--r-- | ninjabackend.py | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/ninjabackend.py b/ninjabackend.py index e6cb6a5..bd074bf 100644 --- a/ninjabackend.py +++ b/ninjabackend.py @@ -169,7 +169,10 @@ class NinjaBackend(backends.Backend): continue for src in gensource.get_outfilelist(): if self.environment.is_header(src): - header_deps.append(src) + header_deps.append(os.path.join(self.get_target_private_dir(target), src)) + for dep in target.link_targets: + if isinstance(dep, (build.StaticLibrary, build.SharedLibrary)): + header_deps += self.get_generated_headers(dep) return header_deps def generate_target(self, target, outfile): @@ -815,22 +818,22 @@ class NinjaBackend(backends.Backend): for i in target.get_sources(): if not rustc.can_compile(i): raise InvalidArguments('Rust target %s contains a non-rust source file.' % target.get_basename()) - relsrc.append(os.path.join(self.build_to_src, i)) + relsrc.append(i.rel_to_builddir(self.build_to_src)) target_name = os.path.join(target.subdir, target.get_filename()) args = ['--crate-type'] if isinstance(target, build.Executable): cratetype = 'bin' elif isinstance(target, build.SharedLibrary): - cratetype = 'dylib' + cratetype = 'rlib' elif isinstance(target, build.StaticLibrary): - cratetype = 'lib' + cratetype = 'rlib' else: raise InvalidArguments('Unknown target type for rustc.') args.append(cratetype) args += rustc.get_buildtype_args(self.environment.coredata.buildtype) - depfile = target_name + '.d' + depfile = target.name + '.d' args += ['--out-dir', target.subdir] - args += ['--dep-info', depfile] + args += ['--emit', 'dep-info', '--emit', 'link'] orderdeps = [os.path.join(t.subdir, t.get_filename()) for t in target.link_targets] linkdirs = {} for d in target.link_targets: @@ -973,12 +976,9 @@ class NinjaBackend(backends.Backend): def generate_rust_compile_rules(self, compiler, outfile): rule = 'rule %s_COMPILER\n' % compiler.get_language() invoc = ' '.join([ninja_quote(i) for i in compiler.get_exelist()]) - command = ' command = %s %s $out $cratetype %s $ARGS $in\n' % \ - (ninja_quote(sys.executable), - ninja_quote(os.path.join(os.path.split(__file__)[0], "rustrunner.py")), - invoc) + command = ' command = %s $ARGS $in\n' % invoc description = ' description = Compiling Rust source $in.\n' - depfile = ' depfile = $out.d\n' + depfile = ' depfile = $targetdep\n' depstyle = ' deps = gcc\n' outfile.write(rule) @@ -1308,6 +1308,8 @@ rule FORTRAN_DEP_HACK sargs = compiler.get_include_args(srctreedir) commands += bargs commands += sargs + for d in i.get_extra_build_dirs(): + commands += compiler.get_include_args(d) custom_target_include_dirs = [] for i in target.generated: if isinstance(i, build.CustomTarget): @@ -1370,7 +1372,7 @@ rule FORTRAN_DEP_HACK def get_fortran_orderdeps(self, target, compiler): if compiler.language != 'fortran': return [] - return [os.path.join(self.get_target_dir(lt), lt.filename) for lt in target.link_targets] + return [os.path.join(self.get_target_dir(lt), lt.get_filename()) for lt in target.link_targets] def generate_msvc_pch_command(self, target, compiler, pch): if len(pch) != 2: |