aboutsummaryrefslogtreecommitdiff
path: root/ninjabackend.py
diff options
context:
space:
mode:
Diffstat (limited to 'ninjabackend.py')
-rw-r--r--ninjabackend.py26
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: