Allow windows resource compiler to be overridden

It is now required to provide a resource compiler on windows when
compiling rust. This allows toolchain builders to explicitly provide a
path to an alternative, such as llvm-rc, instead of the one that's
provided by the Windows SDK.
This commit is contained in:
Erick Tryzelaar 2025-09-12 20:29:23 +00:00
parent 32e3d9f59b
commit 7f55f5761c
6 changed files with 22 additions and 2 deletions

View File

@ -325,6 +325,9 @@
# Defaults to the Python interpreter used to execute x.py.
#build.python = "python"
# The path to (or name of) the resource compiler executable to use on Windows.
#build.windows-rc = "rc.exe"
# The path to the REUSE executable to use. Note that REUSE is not required in
# most cases, as our tooling relies on a cached (and shrunk) copy of the
# REUSE output present in the git repository and in our source tarballs.

View File

@ -35,8 +35,11 @@ pub fn compile_windows_resource_file(
resources_dir.push("resources");
fs::create_dir_all(&resources_dir).unwrap();
let resource_compiler =
find_resource_compiler(&env::var("CARGO_CFG_TARGET_ARCH").unwrap()).expect("found rc.exe");
let resource_compiler = if let Ok(path) = env::var("RUSTC_WINDOWS_RC") {
path.into()
} else {
find_resource_compiler(&env::var("CARGO_CFG_TARGET_ARCH").unwrap()).expect("found rc.exe")
};
let rc_path = resources_dir.join(file_stem.with_extension("rc"));

View File

@ -1227,6 +1227,11 @@ impl Builder<'_> {
rustflags.arg("-Zehcont-guard");
}
// Optionally override the rc.exe when compiling rustc on Windows.
if let Some(windows_rc) = &self.config.windows_rc {
cargo.env("RUSTC_WINDOWS_RC", windows_rc);
}
// For `cargo doc` invocations, make rustdoc print the Rust version into the docs
// This replaces spaces with tabs because RUSTDOCFLAGS does not
// support arguments with regular spaces. Hopefully someday Cargo will

View File

@ -273,6 +273,7 @@ pub struct Config {
pub gdb: Option<PathBuf>,
pub lldb: Option<PathBuf>,
pub python: Option<PathBuf>,
pub windows_rc: Option<PathBuf>,
pub reuse: Option<PathBuf>,
pub cargo_native_static: bool,
pub configure_args: Vec<String>,
@ -450,6 +451,7 @@ impl Config {
nodejs: build_nodejs,
npm: build_npm,
python: build_python,
windows_rc: build_windows_rc,
reuse: build_reuse,
locked_deps: build_locked_deps,
vendor: build_vendor,
@ -1342,6 +1344,7 @@ impl Config {
.unwrap_or(rust_debug == Some(true)),
vendor,
verbose_tests,
windows_rc: build_windows_rc.map(PathBuf::from),
// tidy-alphabetical-end
}
}

View File

@ -37,6 +37,7 @@ define_config! {
nodejs: Option<String> = "nodejs",
npm: Option<String> = "npm",
python: Option<String> = "python",
windows_rc: Option<String> = "windows-rc",
reuse: Option<String> = "reuse",
locked_deps: Option<bool> = "locked-deps",
vendor: Option<bool> = "vendor",

View File

@ -551,4 +551,9 @@ pub const CONFIG_CHANGE_HISTORY: &[ChangeInfo] = &[
severity: ChangeSeverity::Info,
summary: "There is now a bootstrap option called `rust.parallel-frontend-threads`, which can be used to set the number of threads for the compiler frontend used during compilation of Rust code.",
},
ChangeInfo {
change_id: 146663,
severity: ChangeSeverity::Info,
summary: "New option `build.windows-rc` that will override which resource compiler on Windows will be used to compile Rust.",
},
];