From d77cda1ea92807ba6c62a70bb9761b91310d1535 Mon Sep 17 00:00:00 2001 From: Maksim Bondarenkov <119937608+ognevny@users.noreply.github.com> Date: Tue, 26 Mar 2024 20:39:39 +0300 Subject: [PATCH] windows: Support compiling with MinGW toolchain (#9815) Fixes #9757: compile manifest using `embed-manifest` crate, which supports both MSVC and MinGW Release Notes: - N/A --- Cargo.lock | 7 +++++++ crates/zed/Cargo.toml | 1 + crates/zed/build.rs | 13 ++++++------- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 711d0607bf..7b6d6045e4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3293,6 +3293,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "embed-manifest" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cd446c890d6bed1d8b53acef5f240069ebef91d6fae7c5f52efe61fe8b5eae" + [[package]] name = "emojis" version = "0.6.1" @@ -12506,6 +12512,7 @@ dependencies = [ "db", "diagnostics", "editor", + "embed-manifest", "env_logger", "extension", "extensions_ui", diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index 8195a2bf93..fd1e54be80 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -91,6 +91,7 @@ workspace.workspace = true zed_actions.workspace = true [target.'cfg(target_os = "windows")'.build-dependencies] +embed-manifest = "1.4.0" winresource = "0.1" [dev-dependencies] diff --git a/crates/zed/build.rs b/crates/zed/build.rs index e17cf0bb55..d92796e5d5 100644 --- a/crates/zed/build.rs +++ b/crates/zed/build.rs @@ -46,19 +46,18 @@ fn main() { #[cfg(target_os = "windows")] { - // todo(windows): This is to avoid stack overflow. Remove it when solved. - println!("cargo:rustc-link-arg=/stack:{}", 8 * 1024 * 1024); + if std::env::var("CARGO_CFG_TARGET_ENV").ok() == Some("msvc".to_string()) { + // todo(windows): This is to avoid stack overflow. Remove it when solved. + println!("cargo:rustc-link-arg=/stack:{}", 8 * 1024 * 1024); + } let manifest = std::path::Path::new("resources/windows/manifest.xml"); let icon = std::path::Path::new("resources/windows/app-icon.ico"); println!("cargo:rerun-if-changed={}", manifest.display()); println!("cargo:rerun-if-changed={}", icon.display()); - println!("cargo:rustc-link-arg-bins=/MANIFEST:EMBED"); - println!( - "cargo:rustc-link-arg-bins=/MANIFESTINPUT:{}", - manifest.canonicalize().unwrap().display() - ); + embed_manifest::embed_manifest(embed_manifest::new_manifest(manifest.to_str().unwrap())) + .unwrap(); let mut res = winresource::WindowsResource::new(); res.set_icon(icon.to_str().unwrap());