From 7d99c972441270b004c97ee82607b10f235ed85b Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Tue, 13 Jan 2026 13:48:40 +0000 Subject: [PATCH 1/2] Build rustc and codegen backends with -Zno-embed-metadata While this won't change much for rustc and rustc-dev, it should make codegen backends a bit smaller by omitting their crate metadata. In addition it should reduce disk usage while compiling. --- src/bootstrap/src/core/build_steps/compile.rs | 21 ++++++++++++------- src/bootstrap/src/core/builder/cargo.rs | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/core/build_steps/compile.rs index 651ff03a8690a..aee159f46279f 100644 --- a/src/bootstrap/src/core/build_steps/compile.rs +++ b/src/bootstrap/src/core/build_steps/compile.rs @@ -1185,13 +1185,15 @@ impl Step for Rustc { { // jemalloc_sys and rustc_public_bridge are not linked into librustc_driver.so, // so we need to distribute them as rlib to be able to use them. - filename.ends_with(".rlib") - } else { - // Distribute the rest of the rustc crates as rmeta files only to reduce - // the tarball sizes by about 50%. The object files are linked into - // librustc_driver.so, so it is still possible to link against them. - filename.ends_with(".rmeta") + if filename.ends_with(".rlib") { + return true; + } } + + // Distribute the rest of the rustc crates as rmeta files only to reduce + // the tarball sizes by about 50%. The object files are linked into + // librustc_driver.so, so it is still possible to link against them. + filename.ends_with(".rmeta") })), ); @@ -1741,7 +1743,7 @@ impl Step for GccCodegenBackend { let _guard = builder.msg(Kind::Build, "codegen backend gcc", Mode::Codegen, build_compiler, host); - let files = run_cargo(builder, cargo, vec![], &stamp, vec![], ArtifactKeepMode::OnlyRlib); + let files = run_cargo(builder, cargo, vec![], &stamp, vec![], ArtifactKeepMode::OnlyDylib); GccCodegenBackendOutput { stamp: write_codegen_backend_stamp(stamp, files, builder.config.dry_run()), @@ -1817,7 +1819,7 @@ impl Step for CraneliftCodegenBackend { build_compiler, target, ); - let files = run_cargo(builder, cargo, vec![], &stamp, vec![], ArtifactKeepMode::OnlyRlib); + let files = run_cargo(builder, cargo, vec![], &stamp, vec![], ArtifactKeepMode::OnlyDylib); write_codegen_backend_stamp(stamp, files, builder.config.dry_run()) } @@ -2641,6 +2643,8 @@ pub fn add_to_sysroot( /// build stamp, and thus be included in dist archives and copied into sysroots by default. /// Note that some kinds of artifacts are copied automatically (e.g. native libraries). pub enum ArtifactKeepMode { + /// Only keep .so files, ignore .rlib and .rmeta files + OnlyDylib, /// Only keep .rlib files, ignore .rmeta files OnlyRlib, /// Only keep .rmeta files, ignore .rlib files @@ -2703,6 +2707,7 @@ pub fn run_cargo( true } else { match &artifact_keep_mode { + ArtifactKeepMode::OnlyDylib => false, ArtifactKeepMode::OnlyRlib => filename.ends_with(".rlib"), ArtifactKeepMode::OnlyRmeta => filename.ends_with(".rmeta"), ArtifactKeepMode::BothRlibAndRmeta => { diff --git a/src/bootstrap/src/core/builder/cargo.rs b/src/bootstrap/src/core/builder/cargo.rs index dda0b40cb69eb..3b77ca0398485 100644 --- a/src/bootstrap/src/core/builder/cargo.rs +++ b/src/bootstrap/src/core/builder/cargo.rs @@ -1095,7 +1095,7 @@ impl Builder<'_> { // Enable usage of unstable features cargo.env("RUSTC_BOOTSTRAP", "1"); - if matches!(mode, Mode::Std) { + if matches!(mode, Mode::Std | Mode::Rustc | Mode::Codegen) { cargo.arg("-Zno-embed-metadata"); } From 158bff041b06800c714b1a46cb62fe912cd3b107 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Wed, 14 Jan 2026 10:33:12 +0000 Subject: [PATCH 2/2] Pass -Zno-embed-metadata in run_cargo --- src/bootstrap/src/core/build_steps/compile.rs | 12 +++++++++++- src/bootstrap/src/core/builder/cargo.rs | 4 ---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/core/build_steps/compile.rs index aee159f46279f..5bf8583f44c02 100644 --- a/src/bootstrap/src/core/build_steps/compile.rs +++ b/src/bootstrap/src/core/build_steps/compile.rs @@ -2660,7 +2660,7 @@ pub enum ArtifactKeepMode { pub fn run_cargo( builder: &Builder<'_>, - cargo: Cargo, + mut cargo: Cargo, tail_args: Vec, stamp: &BuildStamp, additional_target_deps: Vec<(PathBuf, DependencyType)>, @@ -2678,6 +2678,16 @@ pub fn run_cargo( .unwrap() // chop off `$target` .join(target_root_dir.file_name().unwrap()); + match artifact_keep_mode { + ArtifactKeepMode::OnlyDylib + | ArtifactKeepMode::OnlyRmeta + | ArtifactKeepMode::BothRlibAndRmeta + | ArtifactKeepMode::Custom(_) => { + cargo.arg("-Zno-embed-metadata"); + } + ArtifactKeepMode::OnlyRlib => {} + } + // Spawn Cargo slurping up its JSON output. We'll start building up the // `deps` array of all files it generated along with a `toplevel` array of // files we need to probe for later. diff --git a/src/bootstrap/src/core/builder/cargo.rs b/src/bootstrap/src/core/builder/cargo.rs index 3b77ca0398485..b95533e112029 100644 --- a/src/bootstrap/src/core/builder/cargo.rs +++ b/src/bootstrap/src/core/builder/cargo.rs @@ -1095,10 +1095,6 @@ impl Builder<'_> { // Enable usage of unstable features cargo.env("RUSTC_BOOTSTRAP", "1"); - if matches!(mode, Mode::Std | Mode::Rustc | Mode::Codegen) { - cargo.arg("-Zno-embed-metadata"); - } - if self.config.dump_bootstrap_shims { prepare_behaviour_dump_dir(self.build);