From a89a93bdd990f70bfd1dcc40c6fbe0615d099ebe Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Fri, 17 Apr 2026 15:38:33 +0200 Subject: [PATCH 1/8] Update the cc crate for rustc_llvm Latest stacker needs a newer cc than 1.2.16 as older versions don't have windows arm64ec support. --- Cargo.lock | 5 +++-- compiler/rustc_llvm/Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6c9ac52d1c40c..6a60e5daa29f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -544,10 +544,11 @@ version = "0.1.0" [[package]] name = "cc" -version = "1.2.16" +version = "1.2.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" +checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", diff --git a/compiler/rustc_llvm/Cargo.toml b/compiler/rustc_llvm/Cargo.toml index c9f8cd9495834..3bffd75ef2896 100644 --- a/compiler/rustc_llvm/Cargo.toml +++ b/compiler/rustc_llvm/Cargo.toml @@ -11,7 +11,7 @@ libc = "0.2.73" [build-dependencies] # tidy-alphabetical-start # `cc` updates often break things, so we pin it here. -cc = "=1.2.16" +cc = "=1.2.50" shlex = "1.3.0" # tidy-alphabetical-end From c9f6738abdf6dbb8673ac80cd4135bd7bf37f950 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Thu, 23 Apr 2026 11:36:19 +0200 Subject: [PATCH 2/8] [PERF] Downgrade to 1.2.21 --- Cargo.lock | 5 ++--- compiler/rustc_llvm/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6a60e5daa29f2..bfa3cf6ed75ec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -544,11 +544,10 @@ version = "0.1.0" [[package]] name = "cc" -version = "1.2.50" +version = "1.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c" +checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" dependencies = [ - "find-msvc-tools", "jobserver", "libc", "shlex", diff --git a/compiler/rustc_llvm/Cargo.toml b/compiler/rustc_llvm/Cargo.toml index 3bffd75ef2896..0d74d736cbc37 100644 --- a/compiler/rustc_llvm/Cargo.toml +++ b/compiler/rustc_llvm/Cargo.toml @@ -11,7 +11,7 @@ libc = "0.2.73" [build-dependencies] # tidy-alphabetical-start # `cc` updates often break things, so we pin it here. -cc = "=1.2.50" +cc = "=1.2.21" shlex = "1.3.0" # tidy-alphabetical-end From e3b31f2cc7cf0a1e6efea44ee358d07af3b90686 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Thu, 23 Apr 2026 14:28:57 +0200 Subject: [PATCH 3/8] [PERF] Update to cc 1.2.30 --- Cargo.lock | 4 ++-- compiler/rustc_llvm/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bfa3cf6ed75ec..c7ac76fddccc0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -544,9 +544,9 @@ version = "0.1.0" [[package]] name = "cc" -version = "1.2.21" +version = "1.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" +checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" dependencies = [ "jobserver", "libc", diff --git a/compiler/rustc_llvm/Cargo.toml b/compiler/rustc_llvm/Cargo.toml index 0d74d736cbc37..98832627400e8 100644 --- a/compiler/rustc_llvm/Cargo.toml +++ b/compiler/rustc_llvm/Cargo.toml @@ -11,7 +11,7 @@ libc = "0.2.73" [build-dependencies] # tidy-alphabetical-start # `cc` updates often break things, so we pin it here. -cc = "=1.2.21" +cc = "=1.2.30" shlex = "1.3.0" # tidy-alphabetical-end From 5d0b9fbc603675259d60f4d8060aecaeb134ae60 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Thu, 23 Apr 2026 17:21:15 +0200 Subject: [PATCH 4/8] [PERF] Update to 1.2.35 --- Cargo.lock | 5 +++-- compiler/rustc_llvm/Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c7ac76fddccc0..7918288b9becb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -544,10 +544,11 @@ version = "0.1.0" [[package]] name = "cc" -version = "1.2.30" +version = "1.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" +checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", diff --git a/compiler/rustc_llvm/Cargo.toml b/compiler/rustc_llvm/Cargo.toml index 98832627400e8..0c494e42f5380 100644 --- a/compiler/rustc_llvm/Cargo.toml +++ b/compiler/rustc_llvm/Cargo.toml @@ -11,7 +11,7 @@ libc = "0.2.73" [build-dependencies] # tidy-alphabetical-start # `cc` updates often break things, so we pin it here. -cc = "=1.2.30" +cc = "=1.2.35" shlex = "1.3.0" # tidy-alphabetical-end From 301629af8fe2c24d3404f00164f2213c8be14245 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sat, 25 Apr 2026 17:45:03 +0200 Subject: [PATCH 5/8] [PERF] Update to 1.2.37 --- Cargo.lock | 4 ++-- compiler/rustc_llvm/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7918288b9becb..ace95850347d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -544,9 +544,9 @@ version = "0.1.0" [[package]] name = "cc" -version = "1.2.35" +version = "1.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" +checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" dependencies = [ "find-msvc-tools", "jobserver", diff --git a/compiler/rustc_llvm/Cargo.toml b/compiler/rustc_llvm/Cargo.toml index 0c494e42f5380..9e808887873a9 100644 --- a/compiler/rustc_llvm/Cargo.toml +++ b/compiler/rustc_llvm/Cargo.toml @@ -11,7 +11,7 @@ libc = "0.2.73" [build-dependencies] # tidy-alphabetical-start # `cc` updates often break things, so we pin it here. -cc = "=1.2.35" +cc = "=1.2.37" shlex = "1.3.0" # tidy-alphabetical-end From daa18b73c53bb7491c8c5d0753bff63141427697 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Fri, 8 May 2026 16:41:00 +0200 Subject: [PATCH 6/8] Fix typo --- src/bootstrap/src/core/build_steps/compile.rs | 2 +- src/bootstrap/src/core/build_steps/llvm.rs | 4 ++-- src/bootstrap/src/core/build_steps/test.rs | 4 ++-- src/bootstrap/src/lib.rs | 2 +- src/bootstrap/src/utils/cc_detect.rs | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/core/build_steps/compile.rs index 46d05b9d5d2f7..36ecde3a0fc67 100644 --- a/src/bootstrap/src/core/build_steps/compile.rs +++ b/src/bootstrap/src/core/build_steps/compile.rs @@ -1907,7 +1907,7 @@ pub fn compiler_file( return PathBuf::new(); } let mut cmd = command(compiler); - cmd.args(builder.cc_handled_clags(target, c)); + cmd.args(builder.cc_handled_cflags(target, c)); cmd.args(builder.cc_unhandled_cflags(target, GitRepo::Rustc, c)); cmd.arg(format!("-print-file-name={file}")); let out = cmd.run_capture_stdout(builder).stdout(); diff --git a/src/bootstrap/src/core/build_steps/llvm.rs b/src/bootstrap/src/core/build_steps/llvm.rs index 087a395a067f0..6f1b8532f031b 100644 --- a/src/bootstrap/src/core/build_steps/llvm.rs +++ b/src/bootstrap/src/core/build_steps/llvm.rs @@ -800,7 +800,7 @@ fn configure_cmake( // Needs `suppressed_compiler_flag_prefixes` to be gone, and hence // https://github.com/llvm/llvm-project/issues/88780 to be fixed. for flag in builder - .cc_handled_clags(target, CLang::C) + .cc_handled_cflags(target, CLang::C) .into_iter() .chain(builder.cc_unhandled_cflags(target, GitRepo::Llvm, CLang::C)) .filter(|flag| !suppressed_compiler_flag_prefixes.iter().any(|p| flag.starts_with(p))) @@ -821,7 +821,7 @@ fn configure_cmake( cfg.define("CMAKE_C_FLAGS", cflags); let mut cxxflags = ccflags.cxxflags.clone(); for flag in builder - .cc_handled_clags(target, CLang::Cxx) + .cc_handled_cflags(target, CLang::Cxx) .into_iter() .chain(builder.cc_unhandled_cflags(target, GitRepo::Llvm, CLang::Cxx)) .filter(|flag| { diff --git a/src/bootstrap/src/core/build_steps/test.rs b/src/bootstrap/src/core/build_steps/test.rs index 991592ec522d0..cda6698e3a5a1 100644 --- a/src/bootstrap/src/core/build_steps/test.rs +++ b/src/bootstrap/src/core/build_steps/test.rs @@ -2428,9 +2428,9 @@ Please disable assertions with `rust.debug-assertions = false`. // Only pass correct values for these flags for the `run-make` suite as it // requires that a C++ compiler was configured which isn't always the case. if !builder.config.dry_run() && mode == CompiletestMode::RunMake { - let mut cflags = builder.cc_handled_clags(target, CLang::C); + let mut cflags = builder.cc_handled_cflags(target, CLang::C); cflags.extend(builder.cc_unhandled_cflags(target, GitRepo::Rustc, CLang::C)); - let mut cxxflags = builder.cc_handled_clags(target, CLang::Cxx); + let mut cxxflags = builder.cc_handled_cflags(target, CLang::Cxx); cxxflags.extend(builder.cc_unhandled_cflags(target, GitRepo::Rustc, CLang::Cxx)); cmd.arg("--cc") .arg(builder.cc(target)) diff --git a/src/bootstrap/src/lib.rs b/src/bootstrap/src/lib.rs index 6af11d9ae0a81..476836d93a648 100644 --- a/src/bootstrap/src/lib.rs +++ b/src/bootstrap/src/lib.rs @@ -1276,7 +1276,7 @@ impl Build { /// Returns C flags that `cc-rs` thinks should be enabled for the /// specified target by default. - fn cc_handled_clags(&self, target: TargetSelection, c: CLang) -> Vec { + fn cc_handled_cflags(&self, target: TargetSelection, c: CLang) -> Vec { if self.config.dry_run() { return Vec::new(); } diff --git a/src/bootstrap/src/utils/cc_detect.rs b/src/bootstrap/src/utils/cc_detect.rs index d010226f0dfdb..e9fa2aada9a8c 100644 --- a/src/bootstrap/src/utils/cc_detect.rs +++ b/src/bootstrap/src/utils/cc_detect.rs @@ -113,7 +113,7 @@ pub fn fill_target_compiler(build: &mut Build, target: TargetSelection) { }; build.cc.insert(target, compiler.clone()); - let mut cflags = build.cc_handled_clags(target, CLang::C); + let mut cflags = build.cc_handled_cflags(target, CLang::C); cflags.extend(build.cc_unhandled_cflags(target, GitRepo::Rustc, CLang::C)); // If we use llvm-libunwind, we will need a C++ compiler as well for all targets @@ -140,7 +140,7 @@ pub fn fill_target_compiler(build: &mut Build, target: TargetSelection) { build.do_if_verbose(|| println!("CC_{} = {:?}", target.triple, build.cc(target))); build.do_if_verbose(|| println!("CFLAGS_{} = {cflags:?}", target.triple)); if let Ok(cxx) = build.cxx(target) { - let mut cxxflags = build.cc_handled_clags(target, CLang::Cxx); + let mut cxxflags = build.cc_handled_cflags(target, CLang::Cxx); cxxflags.extend(build.cc_unhandled_cflags(target, GitRepo::Rustc, CLang::Cxx)); build.do_if_verbose(|| println!("CXX_{} = {cxx:?}", target.triple)); build.do_if_verbose(|| println!("CXXFLAGS_{} = {cxxflags:?}", target.triple)); From 3db1c063101857e6a0ea4572cbd2fe7c189a72bd Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Fri, 8 May 2026 16:41:40 +0200 Subject: [PATCH 7/8] Build C code with LTO when LTO is enabled for rust code --- src/bootstrap/src/utils/cc_detect.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/bootstrap/src/utils/cc_detect.rs b/src/bootstrap/src/utils/cc_detect.rs index e9fa2aada9a8c..347d2710c1420 100644 --- a/src/bootstrap/src/utils/cc_detect.rs +++ b/src/bootstrap/src/utils/cc_detect.rs @@ -25,7 +25,7 @@ use std::collections::HashSet; use std::iter; use std::path::{Path, PathBuf}; -use crate::core::config::TargetSelection; +use crate::core::config::{RustcLto, TargetSelection}; use crate::utils::exec::{BootstrapCommand, command}; use crate::{Build, CLang, GitRepo}; @@ -53,6 +53,15 @@ fn new_cc_build(build: &Build, target: TargetSelection) -> cc::Build { } } } + match build.config.rust_lto { + RustcLto::Off | RustcLto::ThinLocal => {} + RustcLto::Thin => { + cfg.flag_if_supported("-flto=thin"); + } + RustcLto::Fat => { + cfg.flag_if_supported("-flto=full"); + } + } cfg } From 5d562601460db766903424fe54da59cec36d6d33 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Fri, 17 Apr 2026 15:38:33 +0200 Subject: [PATCH 8/8] Update the cc crate for rustc_llvm Latest stacker needs a newer cc than 1.2.16 as older versions don't have windows arm64ec support. --- Cargo.lock | 4 ++-- compiler/rustc_llvm/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ace95850347d6..6a60e5daa29f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -544,9 +544,9 @@ version = "0.1.0" [[package]] name = "cc" -version = "1.2.37" +version = "1.2.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" +checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c" dependencies = [ "find-msvc-tools", "jobserver", diff --git a/compiler/rustc_llvm/Cargo.toml b/compiler/rustc_llvm/Cargo.toml index 9e808887873a9..3bffd75ef2896 100644 --- a/compiler/rustc_llvm/Cargo.toml +++ b/compiler/rustc_llvm/Cargo.toml @@ -11,7 +11,7 @@ libc = "0.2.73" [build-dependencies] # tidy-alphabetical-start # `cc` updates often break things, so we pin it here. -cc = "=1.2.37" +cc = "=1.2.50" shlex = "1.3.0" # tidy-alphabetical-end