Add `RustcPerf` bootstrap tool · rust-lang/rust@9e0b762
@@ -358,6 +358,50 @@ impl Step for OptimizedDist {
358358}
359359}
360360361+/// The [rustc-perf](https://github.com/rust-lang/rustc-perf) benchmark suite, which is added
362+/// as a submodule at `src/tools/rustc-perf`.
363+#[derive(Debug, Clone, Hash, PartialEq, Eq)]
364+pub struct RustcPerf {
365+pub compiler: Compiler,
366+pub target: TargetSelection,
367+}
368+369+impl Step for RustcPerf {
370+/// Path to the built `collector` binary.
371+ type Output = PathBuf;
372+373+fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
374+ run.path("src/tools/rustc-perf")
375+}
376+377+fn make_run(run: RunConfig<'_>) {
378+ run.builder.ensure(RustcPerf {
379+compiler: run.builder.compiler(0, run.builder.config.build),
380+target: run.target,
381+});
382+}
383+384+fn run(self, builder: &Builder<'_>) -> PathBuf {
385+// We need to ensure the rustc-perf submodule is initialized.
386+ builder.update_submodule(Path::new("src/tools/rustc-perf"));
387+388+let target = builder.ensure(ToolBuild {
389+compiler: self.compiler,
390+target: self.target,
391+tool: "collector",
392+mode: Mode::ToolBootstrap,
393+path: "src/tools/rustc-perf",
394+source_type: SourceType::Submodule,
395+extra_features: Vec::new(),
396+allow_features: "",
397+// Only build the collector package, which is used for benchmarking through
398+// a CLI.
399+cargo_args: vec!["-p".to_string(), "collector".to_string()],
400+});
401+ target
402+}
403+}
404+361405#[derive(Debug, Clone, Hash, PartialEq, Eq, Ord, PartialOrd)]
362406pub struct ErrorIndex {
363407pub compiler: Compiler,