Implement clippy::CodegenGcc as a separate step
To correctly pass `RustcPrivateCompilers` to it and to avoid running it on `x clippy compiler`.
This commit is contained in:
parent
6e7e243ef2
commit
5d1535ca29
2 changed files with 81 additions and 7 deletions
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
use super::check;
|
||||
use super::compile::{run_cargo, rustc_cargo, std_cargo};
|
||||
use super::tool::{SourceType, prepare_tool_cargo};
|
||||
use super::tool::{RustcPrivateCompilers, SourceType, prepare_tool_cargo};
|
||||
use crate::builder::{Builder, ShouldRun};
|
||||
use crate::core::build_steps::compile::std_crates_for_run_make;
|
||||
use crate::core::builder;
|
||||
use crate::core::builder::{Alias, Kind, RunConfig, Step, crate_description};
|
||||
use crate::core::builder::{Alias, Kind, RunConfig, Step, StepMetadata, crate_description};
|
||||
use crate::utils::build_stamp::{self, BuildStamp};
|
||||
use crate::{Mode, Subcommand, TargetSelection};
|
||||
|
||||
|
|
@ -263,6 +263,76 @@ impl Step for Rustc {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
|
||||
pub struct CodegenGcc {
|
||||
compilers: RustcPrivateCompilers,
|
||||
target: TargetSelection,
|
||||
config: LintConfig,
|
||||
}
|
||||
|
||||
impl CodegenGcc {
|
||||
fn new(builder: &Builder<'_>, target: TargetSelection, config: LintConfig) -> Self {
|
||||
Self {
|
||||
compilers: RustcPrivateCompilers::new(builder, builder.top_stage, target),
|
||||
target,
|
||||
config,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Step for CodegenGcc {
|
||||
type Output = ();
|
||||
|
||||
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
|
||||
run.alias("rustc_codegen_gcc")
|
||||
}
|
||||
|
||||
fn make_run(run: RunConfig<'_>) {
|
||||
let builder = run.builder;
|
||||
let config = LintConfig::new(builder);
|
||||
builder.ensure(CodegenGcc::new(builder, run.target, config));
|
||||
}
|
||||
|
||||
fn run(self, builder: &Builder<'_>) -> Self::Output {
|
||||
let build_compiler = self.compilers.build_compiler();
|
||||
let target = self.target;
|
||||
|
||||
let cargo = prepare_tool_cargo(
|
||||
builder,
|
||||
build_compiler,
|
||||
Mode::Codegen,
|
||||
target,
|
||||
Kind::Clippy,
|
||||
"compiler/rustc_codegen_gcc",
|
||||
SourceType::InTree,
|
||||
&[],
|
||||
);
|
||||
|
||||
let _guard =
|
||||
builder.msg(Kind::Clippy, "rustc_codegen_gcc", Mode::ToolRustc, build_compiler, target);
|
||||
|
||||
let stamp = BuildStamp::new(&builder.cargo_out(build_compiler, Mode::Codegen, target))
|
||||
.with_prefix("rustc_codegen_gcc-check");
|
||||
|
||||
run_cargo(
|
||||
builder,
|
||||
cargo,
|
||||
lint_args(builder, &self.config, &[]),
|
||||
&stamp,
|
||||
vec![],
|
||||
true,
|
||||
false,
|
||||
);
|
||||
}
|
||||
|
||||
fn metadata(&self) -> Option<StepMetadata> {
|
||||
Some(
|
||||
StepMetadata::clippy("rustc_codegen_gcc", self.target)
|
||||
.built_by(self.compilers.build_compiler()),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! lint_any {
|
||||
($(
|
||||
$name:ident, $path:expr, $readable_name:expr
|
||||
|
|
@ -346,7 +416,6 @@ lint_any!(
|
|||
CargoMiri, "src/tools/miri/cargo-miri", "cargo-miri";
|
||||
Clippy, "src/tools/clippy", "clippy";
|
||||
CollectLicenseMetadata, "src/tools/collect-license-metadata", "collect-license-metadata";
|
||||
CodegenGcc, "compiler/rustc_codegen_gcc", "rustc-codegen-gcc";
|
||||
Compiletest, "src/tools/compiletest", "compiletest";
|
||||
CoverageDump, "src/tools/coverage-dump", "coverage-dump";
|
||||
Jsondocck, "src/tools/jsondocck", "jsondocck";
|
||||
|
|
@ -449,9 +518,10 @@ impl Step for CI {
|
|||
deny: vec!["warnings".into()],
|
||||
forbid: vec![],
|
||||
};
|
||||
builder.ensure(CodegenGcc {
|
||||
target: self.target,
|
||||
config: self.config.merge(&rustc_codegen_gcc),
|
||||
});
|
||||
builder.ensure(CodegenGcc::new(
|
||||
builder,
|
||||
self.target,
|
||||
self.config.merge(&rustc_codegen_gcc),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -160,6 +160,10 @@ impl StepMetadata {
|
|||
Self::new(name, target, Kind::Check)
|
||||
}
|
||||
|
||||
pub fn clippy(name: &str, target: TargetSelection) -> Self {
|
||||
Self::new(name, target, Kind::Clippy)
|
||||
}
|
||||
|
||||
pub fn doc(name: &str, target: TargetSelection) -> Self {
|
||||
Self::new(name, target, Kind::Doc)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue