diff --git a/compiler/rustc/Windows Manifest.xml b/compiler/rustc/Windows Manifest.xml new file mode 100644 index 00000000000..b37a2fd4c76 --- /dev/null +++ b/compiler/rustc/Windows Manifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + UTF-8 + + + + + + true + + + diff --git a/compiler/rustc/build.rs b/compiler/rustc/build.rs new file mode 100644 index 00000000000..24c06c0ddbf --- /dev/null +++ b/compiler/rustc/build.rs @@ -0,0 +1,24 @@ +use std::env; + +fn main() { + let target_os = env::var("CARGO_CFG_TARGET_OS"); + let target_env = env::var("CARGO_CFG_TARGET_ENV"); + if Ok("windows") == target_os.as_deref() && Ok("msvc") == target_env.as_deref() { + set_windows_exe_options(); + } +} + +// Add a manifest file to rustc.exe. +fn set_windows_exe_options() { + static WINDOWS_MANIFEST_FILE: &str = "Windows Manifest.xml"; + + let mut manifest = env::current_dir().unwrap(); + manifest.push(WINDOWS_MANIFEST_FILE); + + println!("cargo:rerun-if-changed={}", WINDOWS_MANIFEST_FILE); + // Embed the Windows application manifest file. + println!("cargo:rustc-link-arg-bin=rustc-main=/MANIFEST:EMBED"); + println!("cargo:rustc-link-arg-bin=rustc-main=/MANIFESTINPUT:{}", manifest.to_str().unwrap()); + // Turn linker warnings into errors. + println!("cargo:rustc-link-arg-bin=rustc-main=/WX"); +}