mirror of
https://github.com/zed-industries/zed.git
synced 2024-11-09 21:26:14 +03:00
5d5ae1ec6f
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [bindgen](https://rust-lang.github.io/rust-bindgen/) ([source](https://togithub.com/rust-lang/rust-bindgen)) | build-dependencies | minor | `0.65.1` -> `0.70.0` | --- ### Release Notes <details> <summary>rust-lang/rust-bindgen (bindgen)</summary> ### [`v0.70.1`](https://togithub.com/rust-lang/rust-bindgen/blob/HEAD/CHANGELOG.md#0701-2024-08-20) [Compare Source](https://togithub.com/rust-lang/rust-bindgen/compare/v0.70.0...v0.70.1) #### Added #### Changed #### Removed #### Fixed - Fix regression where the `const` layout tests were triggering the `unnecessary_operation` and `identity_op` clippy warnings. #### Security ### [`v0.70.0`](https://togithub.com/rust-lang/rust-bindgen/blob/HEAD/CHANGELOG.md#0700-2024-08-16) [Compare Source](https://togithub.com/rust-lang/rust-bindgen/compare/v0.69.4...v0.70.0) #### Added - Add target mappings for riscv64imac and riscv32imafc. - Add a complex macro fallback API ([#​2779](https://togithub.com/rust-lang/rust-bindgen/issues/2779)). - Add option to use DST structs for flexible arrays (--flexarray-dst, [#​2772](https://togithub.com/rust-lang/rust-bindgen/issues/2772)). - Add option to dynamically load variables ([#​2812](https://togithub.com/rust-lang/rust-bindgen/issues/2812)). - Add option in CLI to use rustified non-exhaustive enums (--rustified-non-exhaustive-enum, [#​2847](https://togithub.com/rust-lang/rust-bindgen/issues/2847)). #### Changed - Remove which and lazy-static dependencies ([#​2809](https://togithub.com/rust-lang/rust-bindgen/issues/2809), [#​2817](https://togithub.com/rust-lang/rust-bindgen/issues/2817)). - Generate compile-time layout tests ([#​2787](https://togithub.com/rust-lang/rust-bindgen/issues/2787)). - Print `bindgen-cli` errors to stderr instead of stdout ([#​2840](https://togithub.com/rust-lang/rust-bindgen/issues/2840)) #### Removed #### Fixed - Fix `--formatter=prettyplease` not working in `bindgen-cli` by adding `prettyplease` feature and enabling it by default for `bindgen-cli` ([#​2789](https://togithub.com/rust-lang/rust-bindgen/issues/2789)) . - Fix `--allowlist-item` so anonymous enums are no longer ignored ([#​2827](https://togithub.com/rust-lang/rust-bindgen/issues/2827)). - Use clang_getFileLocation instead of clang_getSpellingLocation to fix clang-trunk ([#​2824](https://togithub.com/rust-lang/rust-bindgen/issues/2824)). - Fix generated constants: `f64::INFINITY`, `f64::NEG_ INFINITY`, `f64::NAN` ([#​2854](https://togithub.com/rust-lang/rust-bindgen/issues/2854)). #### Security - Update `tempfile` and `rustix` due to [GHSA-c827-hfw6-qwvm](https://togithub.com/advisories/GHSA-c827-hfw6-qwvm). ### [`v0.69.4`](https://togithub.com/rust-lang/rust-bindgen/blob/HEAD/CHANGELOG.md#0694-2024-02-04) [Compare Source](https://togithub.com/rust-lang/rust-bindgen/compare/v0.69.3...v0.69.4) #### Added #### Changed - Allow older itertools. ([#​2745](https://togithub.com/rust-lang/rust-bindgen/issues/2745)) #### Removed #### Fixed #### Security ### [`v0.69.3`](https://togithub.com/rust-lang/rust-bindgen/blob/HEAD/CHANGELOG.md#0693-2024-02-04) [Compare Source](https://togithub.com/rust-lang/rust-bindgen/compare/v0.69.2...v0.69.3) #### Added - Added blocklist_var ([#​2731](https://togithub.com/rust-lang/rust-bindgen/issues/2731)) - Stabilized thiscall_abi ([#​2661](https://togithub.com/rust-lang/rust-bindgen/issues/2661)) #### Changed - Use CR consistently on windows ([#​2698](https://togithub.com/rust-lang/rust-bindgen/issues/2698)) - Replaced peeking_take_while by itertools ([#​2724](https://togithub.com/rust-lang/rust-bindgen/issues/2724)) #### Removed #### Fixed - Try to avoid repr(packed) for explicitly aligned types when not needed ([#​2734](https://togithub.com/rust-lang/rust-bindgen/issues/2734)) - Improved destructor handling on Windows ([#​2663](https://togithub.com/rust-lang/rust-bindgen/issues/2663)) - Support Float16 ([#​2667](https://togithub.com/rust-lang/rust-bindgen/issues/2667)) - Fix alignment contribution from bitfields ([#​2680](https://togithub.com/rust-lang/rust-bindgen/issues/2680)) - Fixed msrv build. #### Security - Updated shlex dependency (RUSTSEC-2024-0006) ### [`v0.69.2`](https://togithub.com/rust-lang/rust-bindgen/blob/HEAD/CHANGELOG.md#0692-2024-01-13) [Compare Source](https://togithub.com/rust-lang/rust-bindgen/compare/v0.69.1...v0.69.2) #### Added #### Changed #### Removed #### Fixed - Fixed generation of extern "C" blocks with llvm 18+. See [#​2689](https://togithub.com/rust-lang/rust-bindgen/issues/2689). #### Security ### [`v0.69.1`](https://togithub.com/rust-lang/rust-bindgen/blob/HEAD/CHANGELOG.md#0691-2023-11-02) [Compare Source](https://togithub.com/rust-lang/rust-bindgen/compare/v0.69.0...v0.69.1) #### Fixed - Allow to run `bindgen -v` without an input header argument. ### [`v0.69.0`](https://togithub.com/rust-lang/rust-bindgen/blob/HEAD/CHANGELOG.md#0690-2023-11-01) [Compare Source](https://togithub.com/rust-lang/rust-bindgen/compare/v0.68.1...v0.69.0) #### Added - Added the `ParseCallbacks::header_file` callback which runs on every filename passed to `Builder::header`. - Added the `CargoCallbacks::new` constructor which emits a cargo-rerun line for every input header file by default. - Added the `CargoCallbacks::rerun_on_header_files` method to configure whether a cargo-rerun line should be emitted for every input header file. #### Changed - The `--wrap-static-fns` feature was updated so function types that has no argument use `void` as its sole argument. - `CargoCallbacks` is no longer a [unit-like struct](https://doc.rust-lang.org/reference/items/structs.html) and the `CargoCallbacks` constant was added to mitigate the breaking nature of this change. This constant has been marked as deprecated and users will have to use the new `CargoCallbacks::new` method in the future. #### Removed #### Fixed - Allow compiling `bindgen-cli` with a static libclang. - Emit an opaque integer type for pointer types that don't have the same size as the target's pointer size. - Avoid escaping Objective-C method names unless they are `Self`, `self`, `crate` or `super`. #### Security ### [`v0.68.1`](https://togithub.com/rust-lang/rust-bindgen/blob/HEAD/CHANGELOG.md#0681) [Compare Source](https://togithub.com/rust-lang/rust-bindgen/compare/v0.68.0...v0.68.1) #### Fixed - Fixed errors on the windows artifact build process. ### [`v0.68.0`](https://togithub.com/rust-lang/rust-bindgen/blob/HEAD/CHANGELOG.md#0680) [Compare Source](https://togithub.com/rust-lang/rust-bindgen/compare/v0.66.1...v0.68.0) #### Added - The `system` ABI is now supported as an option for the `--override-abi` flag. - The `allowlist_item` method and the `--allowlist-item` flag have been included to filter items regardless or their kind. - Include installers as release artifacts on Github. #### Changed - The `Clone` implementation for `_BindgenUnionField` has been changed to pass the `incorrect_clone_impl_on_copy_type` Clippy lint. - The `c_unwind` ABI can be used without a feature gate for any Rust target version equal to or greater than 1.71. This comes as a result of the ABI being stabilised (in Rust 1.71). - Formatting changes when using prettyplease as a formatter due to a new prettyplease version. - Avoid generating invalid `CStr` constants when using the `--generate-cstr` option. #### Removed - The `extra_assert` and `extra_assert_eq` macros are no longer exported. #### Fixed - Bindgen no longer panics when parsing an objective-C header that includes a Rust keyword that cannot be a raw identifier, such as: `self`, `crate`, `super` or `Self`. ### [`v0.66.1`](https://togithub.com/rust-lang/rust-bindgen/blob/HEAD/CHANGELOG.md#0661) [Compare Source](https://togithub.com/rust-lang/rust-bindgen/compare/v0.66.0...v0.66.1) #### Removed - Revert source order sorting ([#​2543](https://togithub.com/rust-lang/rust-bindgen/issues/2543)) due to correctness regressions [#​2558](https://togithub.com/rust-lang/rust-bindgen/issues/2558). ### [`v0.66.0`](https://togithub.com/rust-lang/rust-bindgen/blob/HEAD/CHANGELOG.md#0660) [Compare Source](https://togithub.com/rust-lang/rust-bindgen/compare/v0.65.1...v0.66.0) #### Added - Added the `--generate-cstr` CLI flag to generate string constants as `&CStr` instead of `&[u8]`. (Requires Rust 1.59 or higher.) - Added the `--generate-shell-completions` CLI flag to generate completions for different shells. - The `--wrap-static-fns` option can now wrap `va_list` functions as variadic functions with the experimental `ParseCallbacks::wrap_as_variadic_fn` method. - Add target mappings for riscv32imc and riscv32imac. - Add the `ParseCallbacks::field_visibility` method to modify field visibility. #### Changed - Non-UTF-8 string constants are now generated as references (`&[u8; SIZE]`) instead of arrays (`[u8; SIZE]`) to match UTF-8 strings. - Wrappers for static functions that return `void` no longer contain a `return` statement and only call the static function instead. - The `--wrap-static-fns` option no longer emits wrappers for static variadic functions. - Depfiles generated with `--depfile` or `Builder::depfile` will now properly generate module names and paths that include spaces by escaping them. To make the escaping clear and consistent, backslashes are also escaped. - Updated `bitflags` dependency to 2.2.1. This changes the API of `CodegenConfig`. - Prettyplease formatting is gated by an optional, enabled by default Cargo feature when depending on `bindgen` as a library. - Items are now parsed in the order they appear in source files. This may result in auto-generated `_bindgen_*` names having a different index. - Use default visibility for padding fields: Previously, padding fields were always public. Now, they follow the default visibility for the type they are in. - Compute visibility of bitfield unit based on actual field visibility: A bitfield unit field and its related functions now have their visibility determined based on the most private between the default visibility and the actual visibility of the bitfields within the unit. #### Removed - Remove redundant Cargo features, which were all implicit: - bindgen-cli: `env_logger` and `log` removed in favor of `logging` - bindgen (lib): - `log` removed in favor of `logging` - `which` removed in favor of `which-logging` - `annotate-snippets` removed in favor of `experimental` - Prettyplease is available as a `Formatter` variant now. </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 3pm on Wednesday" in timezone America/New_York, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- Release Notes: - N/A <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC41Ni4wIiwidXBkYXRlZEluVmVyIjoiMzguNTYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mikayla <mikayla@zed.dev>
213 lines
7.6 KiB
Rust
213 lines
7.6 KiB
Rust
#![cfg_attr(any(not(target_os = "macos"), feature = "macos-blade"), allow(unused))]
|
|
|
|
//TODO: consider generating shader code for WGSL
|
|
//TODO: deprecate "runtime-shaders" and "macos-blade"
|
|
|
|
use std::env;
|
|
|
|
fn main() {
|
|
let target = env::var("CARGO_CFG_TARGET_OS");
|
|
println!("cargo::rustc-check-cfg=cfg(gles)");
|
|
match target.as_deref() {
|
|
Ok("macos") => {
|
|
#[cfg(target_os = "macos")]
|
|
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")]
|
|
mod macos {
|
|
use std::{
|
|
env,
|
|
path::{Path, PathBuf},
|
|
};
|
|
|
|
use cbindgen::Config;
|
|
|
|
pub(super) fn build() {
|
|
generate_dispatch_bindings();
|
|
#[cfg(not(feature = "macos-blade"))]
|
|
{
|
|
let header_path = generate_shader_bindings();
|
|
|
|
#[cfg(feature = "runtime_shaders")]
|
|
emit_stitched_shaders(&header_path);
|
|
#[cfg(not(feature = "runtime_shaders"))]
|
|
compile_metal_shaders(&header_path);
|
|
}
|
|
}
|
|
|
|
fn generate_dispatch_bindings() {
|
|
println!("cargo:rustc-link-lib=framework=System");
|
|
println!("cargo:rerun-if-changed=src/platform/mac/dispatch.h");
|
|
|
|
let bindings = bindgen::Builder::default()
|
|
.header("src/platform/mac/dispatch.h")
|
|
.allowlist_var("_dispatch_main_q")
|
|
.allowlist_var("_dispatch_source_type_data_add")
|
|
.allowlist_var("DISPATCH_QUEUE_PRIORITY_HIGH")
|
|
.allowlist_var("DISPATCH_TIME_NOW")
|
|
.allowlist_function("dispatch_get_global_queue")
|
|
.allowlist_function("dispatch_async_f")
|
|
.allowlist_function("dispatch_after_f")
|
|
.allowlist_function("dispatch_time")
|
|
.allowlist_function("dispatch_source_merge_data")
|
|
.allowlist_function("dispatch_source_create")
|
|
.allowlist_function("dispatch_source_set_event_handler_f")
|
|
.allowlist_function("dispatch_resume")
|
|
.allowlist_function("dispatch_suspend")
|
|
.allowlist_function("dispatch_source_cancel")
|
|
.allowlist_function("dispatch_set_context")
|
|
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
|
|
.layout_tests(false)
|
|
.generate()
|
|
.expect("unable to generate bindings");
|
|
|
|
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
|
|
bindings
|
|
.write_to_file(out_path.join("dispatch_sys.rs"))
|
|
.expect("couldn't write dispatch bindings");
|
|
}
|
|
|
|
fn generate_shader_bindings() -> PathBuf {
|
|
let output_path = PathBuf::from(env::var("OUT_DIR").unwrap()).join("scene.h");
|
|
let crate_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
|
|
let mut config = Config::default();
|
|
config.include_guard = Some("SCENE_H".into());
|
|
config.language = cbindgen::Language::C;
|
|
config.export.include.extend([
|
|
"Bounds".into(),
|
|
"Corners".into(),
|
|
"Edges".into(),
|
|
"Size".into(),
|
|
"Pixels".into(),
|
|
"PointF".into(),
|
|
"Hsla".into(),
|
|
"ContentMask".into(),
|
|
"Uniforms".into(),
|
|
"AtlasTile".into(),
|
|
"PathRasterizationInputIndex".into(),
|
|
"PathVertex_ScaledPixels".into(),
|
|
"ShadowInputIndex".into(),
|
|
"Shadow".into(),
|
|
"QuadInputIndex".into(),
|
|
"Underline".into(),
|
|
"UnderlineInputIndex".into(),
|
|
"Quad".into(),
|
|
"SpriteInputIndex".into(),
|
|
"MonochromeSprite".into(),
|
|
"PolychromeSprite".into(),
|
|
"PathSprite".into(),
|
|
"SurfaceInputIndex".into(),
|
|
"SurfaceBounds".into(),
|
|
"TransformationMatrix".into(),
|
|
]);
|
|
config.no_includes = true;
|
|
config.enumeration.prefix_with_name = true;
|
|
|
|
let mut builder = cbindgen::Builder::new();
|
|
|
|
let src_paths = [
|
|
crate_dir.join("src/scene.rs"),
|
|
crate_dir.join("src/geometry.rs"),
|
|
crate_dir.join("src/color.rs"),
|
|
crate_dir.join("src/window.rs"),
|
|
crate_dir.join("src/platform.rs"),
|
|
crate_dir.join("src/platform/mac/metal_renderer.rs"),
|
|
];
|
|
for src_path in src_paths {
|
|
println!("cargo:rerun-if-changed={}", src_path.display());
|
|
builder = builder.with_src(src_path);
|
|
}
|
|
|
|
builder
|
|
.with_config(config)
|
|
.generate()
|
|
.expect("Unable to generate bindings")
|
|
.write_to_file(&output_path);
|
|
|
|
output_path
|
|
}
|
|
|
|
/// To enable runtime compilation, we need to "stitch" the shaders file with the generated header
|
|
/// so that it is self-contained.
|
|
#[cfg(feature = "runtime_shaders")]
|
|
fn emit_stitched_shaders(header_path: &Path) {
|
|
use std::str::FromStr;
|
|
fn stitch_header(header: &Path, shader_path: &Path) -> std::io::Result<PathBuf> {
|
|
let header_contents = std::fs::read_to_string(header)?;
|
|
let shader_contents = std::fs::read_to_string(shader_path)?;
|
|
let stitched_contents = format!("{header_contents}\n{shader_contents}");
|
|
let out_path =
|
|
PathBuf::from(env::var("OUT_DIR").unwrap()).join("stitched_shaders.metal");
|
|
std::fs::write(&out_path, stitched_contents)?;
|
|
Ok(out_path)
|
|
}
|
|
let shader_source_path = "./src/platform/mac/shaders.metal";
|
|
let shader_path = PathBuf::from_str(shader_source_path).unwrap();
|
|
stitch_header(header_path, &shader_path).unwrap();
|
|
println!("cargo:rerun-if-changed={}", &shader_source_path);
|
|
}
|
|
|
|
#[cfg(not(feature = "runtime_shaders"))]
|
|
fn compile_metal_shaders(header_path: &Path) {
|
|
use std::process::{self, Command};
|
|
let shader_path = "./src/platform/mac/shaders.metal";
|
|
let air_output_path = PathBuf::from(env::var("OUT_DIR").unwrap()).join("shaders.air");
|
|
let metallib_output_path =
|
|
PathBuf::from(env::var("OUT_DIR").unwrap()).join("shaders.metallib");
|
|
println!("cargo:rerun-if-changed={}", shader_path);
|
|
|
|
let output = Command::new("xcrun")
|
|
.args([
|
|
"-sdk",
|
|
"macosx",
|
|
"metal",
|
|
"-gline-tables-only",
|
|
"-mmacosx-version-min=10.15.7",
|
|
"-MO",
|
|
"-c",
|
|
shader_path,
|
|
"-include",
|
|
&header_path.to_str().unwrap(),
|
|
"-o",
|
|
])
|
|
.arg(&air_output_path)
|
|
.output()
|
|
.unwrap();
|
|
|
|
if !output.status.success() {
|
|
eprintln!(
|
|
"metal shader compilation failed:\n{}",
|
|
String::from_utf8_lossy(&output.stderr)
|
|
);
|
|
process::exit(1);
|
|
}
|
|
|
|
let output = Command::new("xcrun")
|
|
.args(["-sdk", "macosx", "metallib"])
|
|
.arg(air_output_path)
|
|
.arg("-o")
|
|
.arg(metallib_output_path)
|
|
.output()
|
|
.unwrap();
|
|
|
|
if !output.status.success() {
|
|
eprintln!(
|
|
"metallib compilation failed:\n{}",
|
|
String::from_utf8_lossy(&output.stderr)
|
|
);
|
|
process::exit(1);
|
|
}
|
|
}
|
|
}
|