Add cross-compilation support from MacOS to Windows (#13382)

- Modify `build.rs` to use environment variables instead of `cfg`
directive to make cross-compilation to Windows possible
- Make `embed-resource` a global build-dependency for cross-compilation

Release Notes:

- N/A
This commit is contained in:
SELO 2024-06-25 06:26:24 +03:00 committed by GitHub
parent 93a5d0ca29
commit 7be1ffb9ec
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 21 additions and 14 deletions

View file

@ -81,6 +81,9 @@ collections = { workspace = true, features = ["test-support"] }
util = { workspace = true, features = ["test-support"] } util = { workspace = true, features = ["test-support"] }
http = { workspace = true, features = ["test-support"] } http = { workspace = true, features = ["test-support"] }
[build-dependencies]
embed-resource = "2.4"
[target.'cfg(target_os = "macos")'.build-dependencies] [target.'cfg(target_os = "macos")'.build-dependencies]
bindgen = "0.65.1" bindgen = "0.65.1"
cbindgen = "0.26.0" cbindgen = "0.26.0"
@ -143,9 +146,6 @@ windows.workspace = true
windows-core = "0.57" windows-core = "0.57"
clipboard-win = "3.1.1" clipboard-win = "3.1.1"
[target.'cfg(windows)'.build-dependencies]
embed-resource = "2.4"
[[example]] [[example]]
name = "hello_world" name = "hello_world"
path = "examples/hello_world.rs" path = "examples/hello_world.rs"

View file

@ -3,18 +3,25 @@
//TODO: consider generating shader code for WGSL //TODO: consider generating shader code for WGSL
//TODO: deprecate "runtime-shaders" and "macos-blade" //TODO: deprecate "runtime-shaders" and "macos-blade"
fn main() { use std::env;
#[cfg(target_os = "macos")]
macos::build();
#[cfg(target_os = "windows")] fn main() {
{ let target = env::var("CARGO_CFG_TARGET_OS");
let manifest = std::path::Path::new("resources/windows/gpui.manifest.xml");
let rc_file = std::path::Path::new("resources/windows/gpui.rc"); match target.as_deref() {
println!("cargo:rerun-if-changed={}", manifest.display()); Ok("macos") => {
println!("cargo:rerun-if-changed={}", rc_file.display()); #[cfg(target_os = "macos")]
embed_resource::compile(rc_file, embed_resource::NONE); macos::build();
} }
Ok("windows") => {
let manifest = std::path::Path::new("resources/windows/gpui.manifest.xml");
let rc_file = std::path::Path::new("resources/windows/gpui.rc");
println!("cargo:rerun-if-changed={}", manifest.display());
println!("cargo:rerun-if-changed={}", rc_file.display());
embed_resource::compile(rc_file, embed_resource::NONE);
}
_ => (),
};
} }
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]