}
}
+#[derive(Debug, PartialOrd, Ord, Copy, Clone, Hash, PartialEq, Eq)]
+pub struct RustDemangler {
+ pub compiler: Compiler,
+ pub target: TargetSelection,
+}
+
+impl Step for RustDemangler {
+ type Output = Option<GeneratedTarball>;
+ const ONLY_HOSTS: bool = true;
+
+ fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
+ run.path("rust-demangler")
+ }
+
+ fn make_run(run: RunConfig<'_>) {
+ run.builder.ensure(RustDemangler {
+ compiler: run.builder.compiler_for(
+ run.builder.top_stage,
+ run.builder.config.build,
+ run.target,
+ ),
+ target: run.target,
+ });
+ }
+
+ fn run(self, builder: &Builder<'_>) -> Option<GeneratedTarball> {
+ let compiler = self.compiler;
+ let target = self.target;
+ assert!(builder.config.extended);
+
+ // Only build this extended tool if explicitly included in `tools`, or if `profiler = true`
+ let profiler = builder.config.profiler_enabled(target);
+ if !builder.config.tools.as_ref().map_or(profiler, |t| t.contains("rust-demangler")) {
+ return None;
+ }
+
+ let rust_demangler = builder
+ .ensure(tool::RustDemangler { compiler, target, extra_features: Vec::new() })
+ .expect("rust-demangler expected to build - in-tree tool");
+
+ // Prepare the image directory
+ let mut tarball = Tarball::new(builder, "rust-demangler", &target.triple);
+ tarball.set_overlay(OverlayKind::RustDemangler);
+ tarball.is_preview(true);
+ tarball.add_file(&rust_demangler, "bin", 0o755);
+ tarball.add_legal_and_readme_to("share/doc/rust-demangler");
+ Some(tarball.generate())
+ }
+}
+
#[derive(Debug, PartialOrd, Ord, Copy, Clone, Hash, PartialEq, Eq)]
pub struct Extended {
stage: u32,
let rustc_installer = builder.ensure(Rustc { compiler: builder.compiler(stage, target) });
let cargo_installer = builder.ensure(Cargo { compiler, target });
let rustfmt_installer = builder.ensure(Rustfmt { compiler, target });
+ let rust_demangler_installer = builder.ensure(RustDemangler { compiler, target });
let rls_installer = builder.ensure(Rls { compiler, target });
let rust_analyzer_installer = builder.ensure(RustAnalyzer { compiler, target });
let llvm_tools_installer = builder.ensure(LlvmTools { target });
let mut tarballs = Vec::new();
tarballs.push(rustc_installer);
tarballs.push(cargo_installer);
+ tarballs.push(clippy_installer);
+ tarballs.extend(rust_demangler_installer.clone());
tarballs.extend(rls_installer.clone());
tarballs.extend(rust_analyzer_installer.clone());
- tarballs.push(clippy_installer);
tarballs.extend(miri_installer.clone());
tarballs.extend(rustfmt_installer.clone());
tarballs.extend(llvm_tools_installer);
let xform = |p: &Path| {
let mut contents = t!(fs::read_to_string(p));
+ if rust_demangler_installer.is_none() {
+ contents = filter(&contents, "rust-demangler");
+ }
if rls_installer.is_none() {
contents = filter(&contents, "rls");
}
prepare("rust-std");
prepare("rust-analysis");
prepare("clippy");
-
+ if rust_demangler_installer.is_some() {
+ prepare("rust-demangler");
+ }
if rls_installer.is_some() {
prepare("rls");
}
"rust-analyzer-preview".to_string()
} else if name == "clippy" {
"clippy-preview".to_string()
+ } else if name == "rust-demangler" {
+ "rust-demangler-preview".to_string()
} else if name == "miri" {
"miri-preview".to_string()
} else {
prepare("rust-docs");
prepare("rust-std");
prepare("clippy");
+ if rust_demangler_installer.is_some() {
+ prepare("rust-demangler");
+ }
if rls_installer.is_some() {
prepare("rls");
}
.arg("-t")
.arg(etc.join("msi/remove-duplicates.xsl")),
);
+ if rust_demangler_installer.is_some() {
+ builder.run(
+ Command::new(&heat)
+ .current_dir(&exe)
+ .arg("dir")
+ .arg("rust-demangler")
+ .args(&heat_flags)
+ .arg("-cg")
+ .arg("RustDemanglerGroup")
+ .arg("-dr")
+ .arg("RustDemangler")
+ .arg("-var")
+ .arg("var.RustDemanglerDir")
+ .arg("-out")
+ .arg(exe.join("RustDemanglerGroup.wxs"))
+ .arg("-t")
+ .arg(etc.join("msi/remove-duplicates.xsl")),
+ );
+ }
if miri_installer.is_some() {
builder.run(
Command::new(&heat)
.arg(&input);
add_env(builder, &mut cmd, target);
+ if rust_demangler_installer.is_some() {
+ cmd.arg("-dRustDemanglerDir=rust-demangler");
+ }
if rls_installer.is_some() {
cmd.arg("-dRlsDir=rls");
}
candle("CargoGroup.wxs".as_ref());
candle("StdGroup.wxs".as_ref());
candle("ClippyGroup.wxs".as_ref());
+ if rust_demangler_installer.is_some() {
+ candle("RustDemanglerGroup.wxs".as_ref());
+ }
if rls_installer.is_some() {
candle("RlsGroup.wxs".as_ref());
}
if rust_analyzer_installer.is_some() {
cmd.arg("RustAnalyzerGroup.wixobj");
}
+ if rust_demangler_installer.is_some() {
+ cmd.arg("RustDemanglerGroup.wixobj");
+ }
if miri_installer.is_some() {
cmd.arg("MiriGroup.wixobj");
}