Skip to content

Commit 5d1535c

Browse files
committed
Implement clippy::CodegenGcc as a separate step
To correctly pass `RustcPrivateCompilers` to it and to avoid running it on `x clippy compiler`.
1 parent 6e7e243 commit 5d1535c

File tree

2 files changed

+81
-7
lines changed

2 files changed

+81
-7
lines changed

src/bootstrap/src/core/build_steps/clippy.rs

Lines changed: 77 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
33
use super::check;
44
use super::compile::{run_cargo, rustc_cargo, std_cargo};
5-
use super::tool::{SourceType, prepare_tool_cargo};
5+
use super::tool::{RustcPrivateCompilers, SourceType, prepare_tool_cargo};
66
use crate::builder::{Builder, ShouldRun};
77
use crate::core::build_steps::compile::std_crates_for_run_make;
88
use crate::core::builder;
9-
use crate::core::builder::{Alias, Kind, RunConfig, Step, crate_description};
9+
use crate::core::builder::{Alias, Kind, RunConfig, Step, StepMetadata, crate_description};
1010
use crate::utils::build_stamp::{self, BuildStamp};
1111
use crate::{Mode, Subcommand, TargetSelection};
1212

@@ -263,6 +263,76 @@ impl Step for Rustc {
263263
}
264264
}
265265

266+
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
267+
pub struct CodegenGcc {
268+
compilers: RustcPrivateCompilers,
269+
target: TargetSelection,
270+
config: LintConfig,
271+
}
272+
273+
impl CodegenGcc {
274+
fn new(builder: &Builder<'_>, target: TargetSelection, config: LintConfig) -> Self {
275+
Self {
276+
compilers: RustcPrivateCompilers::new(builder, builder.top_stage, target),
277+
target,
278+
config,
279+
}
280+
}
281+
}
282+
283+
impl Step for CodegenGcc {
284+
type Output = ();
285+
286+
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
287+
run.alias("rustc_codegen_gcc")
288+
}
289+
290+
fn make_run(run: RunConfig<'_>) {
291+
let builder = run.builder;
292+
let config = LintConfig::new(builder);
293+
builder.ensure(CodegenGcc::new(builder, run.target, config));
294+
}
295+
296+
fn run(self, builder: &Builder<'_>) -> Self::Output {
297+
let build_compiler = self.compilers.build_compiler();
298+
let target = self.target;
299+
300+
let cargo = prepare_tool_cargo(
301+
builder,
302+
build_compiler,
303+
Mode::Codegen,
304+
target,
305+
Kind::Clippy,
306+
"compiler/rustc_codegen_gcc",
307+
SourceType::InTree,
308+
&[],
309+
);
310+
311+
let _guard =
312+
builder.msg(Kind::Clippy, "rustc_codegen_gcc", Mode::ToolRustc, build_compiler, target);
313+
314+
let stamp = BuildStamp::new(&builder.cargo_out(build_compiler, Mode::Codegen, target))
315+
.with_prefix("rustc_codegen_gcc-check");
316+
317+
run_cargo(
318+
builder,
319+
cargo,
320+
lint_args(builder, &self.config, &[]),
321+
&stamp,
322+
vec![],
323+
true,
324+
false,
325+
);
326+
}
327+
328+
fn metadata(&self) -> Option<StepMetadata> {
329+
Some(
330+
StepMetadata::clippy("rustc_codegen_gcc", self.target)
331+
.built_by(self.compilers.build_compiler()),
332+
)
333+
}
334+
}
335+
266336
macro_rules! lint_any {
267337
($(
268338
$name:ident, $path:expr, $readable_name:expr
@@ -346,7 +416,6 @@ lint_any!(
346416
CargoMiri, "src/tools/miri/cargo-miri", "cargo-miri";
347417
Clippy, "src/tools/clippy", "clippy";
348418
CollectLicenseMetadata, "src/tools/collect-license-metadata", "collect-license-metadata";
349-
CodegenGcc, "compiler/rustc_codegen_gcc", "rustc-codegen-gcc";
350419
Compiletest, "src/tools/compiletest", "compiletest";
351420
CoverageDump, "src/tools/coverage-dump", "coverage-dump";
352421
Jsondocck, "src/tools/jsondocck", "jsondocck";
@@ -449,9 +518,10 @@ impl Step for CI {
449518
deny: vec!["warnings".into()],
450519
forbid: vec![],
451520
};
452-
builder.ensure(CodegenGcc {
453-
target: self.target,
454-
config: self.config.merge(&rustc_codegen_gcc),
455-
});
521+
builder.ensure(CodegenGcc::new(
522+
builder,
523+
self.target,
524+
self.config.merge(&rustc_codegen_gcc),
525+
));
456526
}
457527
}

src/bootstrap/src/core/builder/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,10 @@ impl StepMetadata {
160160
Self::new(name, target, Kind::Check)
161161
}
162162

163+
pub fn clippy(name: &str, target: TargetSelection) -> Self {
164+
Self::new(name, target, Kind::Clippy)
165+
}
166+
163167
pub fn doc(name: &str, target: TargetSelection) -> Self {
164168
Self::new(name, target, Kind::Doc)
165169
}

0 commit comments

Comments
 (0)