diff --git a/src/bootstrap/src/core/build_steps/dist.rs b/src/bootstrap/src/core/build_steps/dist.rs
index 2354fe1ebafbe..a4a9cb7ef3155 100644
--- a/src/bootstrap/src/core/build_steps/dist.rs
+++ b/src/bootstrap/src/core/build_steps/dist.rs
@@ -1585,9 +1585,15 @@ impl Step for Extended {
prepare("cargo");
prepare("rust-std");
prepare("rust-analysis");
- prepare("clippy");
- prepare("rust-analyzer");
- for tool in &["rust-docs", "miri", "rustc-codegen-cranelift"] {
+
+ for tool in &[
+ "clippy",
+ "rustfmt",
+ "rust-analyzer",
+ "rust-docs",
+ "miri",
+ "rustc-codegen-cranelift",
+ ] {
if built_tools.contains(tool) {
prepare(tool);
}
@@ -1627,6 +1633,8 @@ impl Step for Extended {
"rust-analyzer-preview".to_string()
} else if name == "clippy" {
"clippy-preview".to_string()
+ } else if name == "rustfmt" {
+ "rustfmt-preview".to_string()
} else if name == "miri" {
"miri-preview".to_string()
} else if name == "rustc-codegen-cranelift" {
@@ -1646,7 +1654,7 @@ impl Step for Extended {
prepare("cargo");
prepare("rust-analysis");
prepare("rust-std");
- for tool in &["clippy", "rust-analyzer", "rust-docs", "miri"] {
+ for tool in &["clippy", "rustfmt", "rust-analyzer", "rust-docs", "miri"] {
if built_tools.contains(tool) {
prepare(tool);
}
@@ -1764,6 +1772,24 @@ impl Step for Extended {
.arg(etc.join("msi/remove-duplicates.xsl"))
.run(builder);
}
+ if built_tools.contains("rustfmt") {
+ command(&heat)
+ .current_dir(&exe)
+ .arg("dir")
+ .arg("rustfmt")
+ .args(heat_flags)
+ .arg("-cg")
+ .arg("RustFmtGroup")
+ .arg("-dr")
+ .arg("RustFmt")
+ .arg("-var")
+ .arg("var.RustFmtDir")
+ .arg("-out")
+ .arg(exe.join("RustFmtGroup.wxs"))
+ .arg("-t")
+ .arg(etc.join("msi/remove-duplicates.xsl"))
+ .run(builder);
+ }
if built_tools.contains("miri") {
command(&heat)
.current_dir(&exe)
@@ -1830,11 +1856,14 @@ impl Step for Extended {
.arg("-out")
.arg(&output)
.arg(input);
- add_env(builder, &mut cmd, target);
+ add_env(builder, &mut cmd, target, &built_tools);
if built_tools.contains("clippy") {
cmd.arg("-dClippyDir=clippy");
}
+ if built_tools.contains("rustfmt") {
+ cmd.arg("-dRustFmtDir=rustfmt");
+ }
if built_tools.contains("rust-docs") {
cmd.arg("-dDocsDir=rust-docs");
}
@@ -1861,6 +1890,9 @@ impl Step for Extended {
if built_tools.contains("clippy") {
candle("ClippyGroup.wxs".as_ref());
}
+ if built_tools.contains("rustfmt") {
+ candle("RustFmtGroup.wxs".as_ref());
+ }
if built_tools.contains("miri") {
candle("MiriGroup.wxs".as_ref());
}
@@ -1899,6 +1931,9 @@ impl Step for Extended {
if built_tools.contains("clippy") {
cmd.arg("ClippyGroup.wixobj");
}
+ if built_tools.contains("rustfmt") {
+ cmd.arg("RustFmtGroup.wixobj");
+ }
if built_tools.contains("miri") {
cmd.arg("MiriGroup.wixobj");
}
@@ -1925,7 +1960,12 @@ impl Step for Extended {
}
}
-fn add_env(builder: &Builder<'_>, cmd: &mut BootstrapCommand, target: TargetSelection) {
+fn add_env(
+ builder: &Builder<'_>,
+ cmd: &mut BootstrapCommand,
+ target: TargetSelection,
+ built_tools: &HashSet<&'static str>,
+) {
let mut parts = builder.version.split('.');
cmd.env("CFG_RELEASE_INFO", builder.rust_version())
.env("CFG_RELEASE_NUM", &builder.version)
@@ -1946,6 +1986,15 @@ fn add_env(builder: &Builder<'_>, cmd: &mut BootstrapCommand, target: TargetSele
} else {
cmd.env("CFG_MINGW", "0").env("CFG_ABI", "MSVC");
}
+
+ // ensure these variables are defined
+ let mut define_optional_tool = |tool_name: &str, env_name: &str| {
+ cmd.env(env_name, if built_tools.contains(tool_name) { "1" } else { "0" });
+ };
+ define_optional_tool("rustfmt", "CFG_RUSTFMT");
+ define_optional_tool("clippy", "CFG_CLIPPY");
+ define_optional_tool("miri", "CFG_MIRI");
+ define_optional_tool("rust-analyzer", "CFG_RA");
}
fn install_llvm_file(
diff --git a/src/etc/installer/msi/rust.wxs b/src/etc/installer/msi/rust.wxs
index f29e1e4d27a27..64cceccc97582 100644
--- a/src/etc/installer/msi/rust.wxs
+++ b/src/etc/installer/msi/rust.wxs
@@ -172,6 +172,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -279,7 +292,49 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+