-//! Implementation of compiling the compiler and standard library, in "check" mode.
+//! Implementation of compiling the compiler and standard library, in "check"-based modes.
use crate::compile::{run_cargo, std_cargo, test_cargo, rustc_cargo, rustc_cargo_env,
add_to_sysroot};
-use crate::builder::{RunConfig, Builder, ShouldRun, Step};
+use crate::builder::{RunConfig, Builder, Kind, ShouldRun, Step};
use crate::tool::{prepare_tool_cargo, SourceType};
use crate::{Compiler, Mode};
use crate::cache::{INTERNER, Interned};
pub target: Interned<String>,
}
+fn args(kind: Kind) -> Vec<String> {
+ match kind {
+ Kind::Clippy => vec!["--".to_owned(), "--cap-lints".to_owned(), "warn".to_owned()],
+ _ => Vec::new()
+ }
+}
+
+fn cargo_subcommand(kind: Kind) -> &'static str {
+ match kind {
+ Kind::Check => "check",
+ Kind::Clippy => "clippy",
+ Kind::Fix => "fix",
+ _ => unreachable!()
+ }
+}
+
impl Step for Std {
type Output = ();
const DEFAULT: bool = true;
let target = self.target;
let compiler = builder.compiler(0, builder.config.build);
- let mut cargo = builder.cargo(compiler, Mode::Std, target, "check");
+ let mut cargo = builder.cargo(compiler, Mode::Std, target, cargo_subcommand(builder.kind));
std_cargo(builder, &compiler, target, &mut cargo);
let _folder = builder.fold_output(|| format!("stage{}-std", compiler.stage));
builder.info(&format!("Checking std artifacts ({} -> {})", &compiler.host, target));
run_cargo(builder,
&mut cargo,
+ args(builder.kind),
&libstd_stamp(builder, compiler, target),
true);
builder.ensure(Test { target });
- let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "check");
+ let mut cargo = builder.cargo(compiler, Mode::Rustc, target,
+ cargo_subcommand(builder.kind));
rustc_cargo(builder, &mut cargo);
let _folder = builder.fold_output(|| format!("stage{}-rustc", compiler.stage));
builder.info(&format!("Checking compiler artifacts ({} -> {})", &compiler.host, target));
run_cargo(builder,
&mut cargo,
+ args(builder.kind),
&librustc_stamp(builder, compiler, target),
true);
builder.ensure(Rustc { target });
- let mut cargo = builder.cargo(compiler, Mode::Codegen, target, "check");
+ let mut cargo = builder.cargo(compiler, Mode::Codegen, target,
+ cargo_subcommand(builder.kind));
cargo.arg("--manifest-path").arg(builder.src.join("src/librustc_codegen_llvm/Cargo.toml"));
rustc_cargo_env(builder, &mut cargo);
let _folder = builder.fold_output(|| format!("stage{}-rustc_codegen_llvm", compiler.stage));
run_cargo(builder,
&mut cargo,
+ args(builder.kind),
&codegen_backend_stamp(builder, compiler, target, backend),
true);
}
builder.ensure(Std { target });
- let mut cargo = builder.cargo(compiler, Mode::Test, target, "check");
+ let mut cargo = builder.cargo(compiler, Mode::Test, target, cargo_subcommand(builder.kind));
test_cargo(builder, &compiler, target, &mut cargo);
let _folder = builder.fold_output(|| format!("stage{}-test", compiler.stage));
builder.info(&format!("Checking test artifacts ({} -> {})", &compiler.host, target));
run_cargo(builder,
&mut cargo,
+ args(builder.kind),
&libtest_stamp(builder, compiler, target),
true);
compiler,
Mode::ToolRustc,
target,
- "check",
+ cargo_subcommand(builder.kind),
"src/tools/rustdoc",
SourceType::InTree,
&[]);
println!("Checking rustdoc artifacts ({} -> {})", &compiler.host, target);
run_cargo(builder,
&mut cargo,
+ args(builder.kind),
&rustdoc_stamp(builder, compiler, target),
true);