From 7255bc63387eacd097e960800a05299c93e57d4d Mon Sep 17 00:00:00 2001 From: Chris Denton Date: Thu, 5 May 2022 02:59:56 +0100 Subject: [PATCH] Add Windows application manifest to rustc-main --- compiler/rustc/Windows Manifest.xml | 28 ++++++++++++++++++++++++++++ compiler/rustc/build.rs | 24 ++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 compiler/rustc/Windows Manifest.xml create mode 100644 compiler/rustc/build.rs 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"); +}