Auto merge of #28768 - alexcrichton:dep-info++, r=brson
This PR closes out #28716 and #28735 by making two changes to the compiler: 1. The `--emit` flag to the compiler now supports the ability to specify the output file name of a partuclar emit type. For example `--emit dep-info=bar.d,asm=foo.s,link` is now accepted. 2. The dep-info emission now emits a dummy target for all input file names to protect against deleted files.
This commit is contained in:
commit
e650491f20
11 changed files with 194 additions and 145 deletions
|
|
@ -7,9 +7,10 @@
|
|||
ifneq ($(shell uname),FreeBSD)
|
||||
ifndef IS_WINDOWS
|
||||
all:
|
||||
$(RUSTC) --emit dep-info,link --crate-type=lib lib.rs
|
||||
cp *.rs $(TMPDIR)
|
||||
$(RUSTC) --emit dep-info,link --crate-type=lib $(TMPDIR)/lib.rs
|
||||
sleep 2
|
||||
touch foo.rs
|
||||
touch $(TMPDIR)/foo.rs
|
||||
-rm -f $(TMPDIR)/done
|
||||
$(MAKE) -drf Makefile.foo
|
||||
sleep 2
|
||||
|
|
@ -17,6 +18,11 @@ all:
|
|||
pwd
|
||||
$(MAKE) -drf Makefile.foo
|
||||
rm $(TMPDIR)/done && exit 1 || exit 0
|
||||
|
||||
# When a source file is deleted `make` should still work
|
||||
rm $(TMPDIR)/bar.rs
|
||||
cp $(TMPDIR)/lib2.rs $(TMPDIR)/lib.rs
|
||||
$(MAKE) -drf Makefile.foo
|
||||
else
|
||||
all:
|
||||
|
||||
|
|
|
|||
13
src/test/run-make/dep-info/lib2.rs
Normal file
13
src/test/run-make/dep-info/lib2.rs
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![crate_name = "foo"]
|
||||
|
||||
pub mod foo;
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(rustc_private, path, convert)]
|
||||
#![feature(rustc_private)]
|
||||
|
||||
extern crate rustc;
|
||||
extern crate rustc_driver;
|
||||
|
|
@ -16,7 +16,7 @@ extern crate rustc_lint;
|
|||
extern crate syntax;
|
||||
|
||||
use rustc::session::{build_session, Session};
|
||||
use rustc::session::config::{basic_options, build_configuration, Input, OutputTypeExe};
|
||||
use rustc::session::config::{basic_options, build_configuration, Input, OutputType};
|
||||
use rustc_driver::driver::{compile_input, CompileController};
|
||||
use syntax::diagnostics::registry::Registry;
|
||||
|
||||
|
|
@ -46,7 +46,7 @@ fn main() {
|
|||
|
||||
fn basic_sess(sysroot: PathBuf) -> Session {
|
||||
let mut opts = basic_options();
|
||||
opts.output_types = vec![OutputTypeExe];
|
||||
opts.output_types.insert(OutputType::Exe, None);
|
||||
opts.maybe_sysroot = Some(sysroot);
|
||||
|
||||
let descriptions = Registry::new(&rustc::DIAGNOSTICS);
|
||||
|
|
|
|||
|
|
@ -23,45 +23,83 @@ all:
|
|||
rm -f $(TMPDIR)/bar.pdb
|
||||
[ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
|
||||
|
||||
$(RUSTC) foo.rs --emit=asm -o $(TMPDIR)/foo
|
||||
$(RUSTC) foo.rs --emit asm -o $(TMPDIR)/foo
|
||||
rm $(TMPDIR)/foo
|
||||
$(RUSTC) foo.rs --emit asm=$(TMPDIR)/foo
|
||||
rm $(TMPDIR)/foo
|
||||
[ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
|
||||
|
||||
$(RUSTC) foo.rs --emit=llvm-bc -o $(TMPDIR)/foo
|
||||
$(RUSTC) foo.rs --emit llvm-bc -o $(TMPDIR)/foo
|
||||
rm $(TMPDIR)/foo
|
||||
$(RUSTC) foo.rs --emit llvm-bc=$(TMPDIR)/foo
|
||||
rm $(TMPDIR)/foo
|
||||
[ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
|
||||
|
||||
$(RUSTC) foo.rs --emit=llvm-ir -o $(TMPDIR)/foo
|
||||
$(RUSTC) foo.rs --emit llvm-ir -o $(TMPDIR)/foo
|
||||
rm $(TMPDIR)/foo
|
||||
$(RUSTC) foo.rs --emit llvm-ir=$(TMPDIR)/foo
|
||||
rm $(TMPDIR)/foo
|
||||
[ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
|
||||
|
||||
$(RUSTC) foo.rs --emit=obj -o $(TMPDIR)/foo
|
||||
$(RUSTC) foo.rs --emit obj -o $(TMPDIR)/foo
|
||||
rm $(TMPDIR)/foo
|
||||
$(RUSTC) foo.rs --emit obj=$(TMPDIR)/foo
|
||||
rm $(TMPDIR)/foo
|
||||
[ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
|
||||
|
||||
$(RUSTC) foo.rs --emit=link -o $(TMPDIR)/$(call BIN,foo)
|
||||
$(RUSTC) foo.rs --emit link -o $(TMPDIR)/$(call BIN,foo)
|
||||
rm $(TMPDIR)/$(call BIN,foo)
|
||||
$(RUSTC) foo.rs --emit link=$(TMPDIR)/$(call BIN,foo)
|
||||
rm $(TMPDIR)/$(call BIN,foo)
|
||||
rm -f $(TMPDIR)/foo.pdb
|
||||
[ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
|
||||
|
||||
$(RUSTC) foo.rs --crate-type=rlib -o $(TMPDIR)/foo
|
||||
rm $(TMPDIR)/foo
|
||||
$(RUSTC) foo.rs --crate-type=rlib --emit link=$(TMPDIR)/foo
|
||||
rm $(TMPDIR)/foo
|
||||
[ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
|
||||
|
||||
$(RUSTC) foo.rs --crate-type=dylib -o $(TMPDIR)/$(call BIN,foo)
|
||||
rm $(TMPDIR)/$(call BIN,foo)
|
||||
$(RUSTC) foo.rs --crate-type=dylib --emit link=$(TMPDIR)/$(call BIN,foo)
|
||||
rm $(TMPDIR)/$(call BIN,foo)
|
||||
rm -f $(TMPDIR)/foo.{exp,lib,pdb}
|
||||
[ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
|
||||
|
||||
$(RUSTC) foo.rs --crate-type=staticlib -o $(TMPDIR)/foo
|
||||
rm $(TMPDIR)/foo
|
||||
$(RUSTC) foo.rs --crate-type=staticlib --emit link=$(TMPDIR)/foo
|
||||
rm $(TMPDIR)/foo
|
||||
[ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
|
||||
|
||||
$(RUSTC) foo.rs --crate-type=bin -o $(TMPDIR)/$(call BIN,foo)
|
||||
rm $(TMPDIR)/$(call BIN,foo)
|
||||
$(RUSTC) foo.rs --crate-type=bin --emit link=$(TMPDIR)/$(call BIN,foo)
|
||||
rm $(TMPDIR)/$(call BIN,foo)
|
||||
rm -f $(TMPDIR)/foo.pdb
|
||||
[ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
|
||||
|
||||
$(RUSTC) foo.rs --emit llvm-ir=$(TMPDIR)/ir \
|
||||
--emit link \
|
||||
--crate-type=rlib
|
||||
rm $(TMPDIR)/ir
|
||||
rm $(TMPDIR)/libbar.rlib
|
||||
[ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
|
||||
|
||||
$(RUSTC) foo.rs --emit asm=$(TMPDIR)/asm \
|
||||
--emit llvm-ir=$(TMPDIR)/ir \
|
||||
--emit llvm-bc=$(TMPDIR)/bc \
|
||||
--emit obj=$(TMPDIR)/obj \
|
||||
--emit link=$(TMPDIR)/link \
|
||||
--crate-type=staticlib
|
||||
rm $(TMPDIR)/asm
|
||||
rm $(TMPDIR)/ir
|
||||
rm $(TMPDIR)/bc
|
||||
rm $(TMPDIR)/obj
|
||||
rm $(TMPDIR)/link
|
||||
[ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
|
||||
|
||||
$(RUSTC) foo.rs --emit=asm,llvm-ir,llvm-bc,obj,link --crate-type=staticlib
|
||||
rm $(TMPDIR)/bar.ll
|
||||
rm $(TMPDIR)/bar.s
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue