From 8182f9e88e420490b55c54dfb193ededc1d71fdc Mon Sep 17 00:00:00 2001 From: firestar99 Date: Thu, 4 Dec 2025 14:58:53 +0100 Subject: [PATCH 1/2] fix clippy lints from stable updates --- crates/cargo-gpu/src/spirv_source.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/crates/cargo-gpu/src/spirv_source.rs b/crates/cargo-gpu/src/spirv_source.rs index f33c283..1775a99 100644 --- a/crates/cargo-gpu/src/spirv_source.rs +++ b/crates/cargo-gpu/src/spirv_source.rs @@ -48,10 +48,6 @@ pub enum SpirvSource { } impl core::fmt::Display for SpirvSource { - #[expect( - clippy::min_ident_chars, - reason = "It's a core library trait implementation" - )] fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { match self { Self::CratesIO(version) => version.fmt(f), From 78d78685cdfae263b57354c599c32973942a0040 Mon Sep 17 00:00:00 2001 From: firestar99 Date: Thu, 4 Dec 2025 14:54:29 +0100 Subject: [PATCH 2/2] update spirv-builder --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- crates/cargo-gpu/src/build.rs | 27 ++++++++++++++++----------- crates/cargo-gpu/src/install.rs | 2 +- crates/cargo-gpu/src/lib.rs | 4 ++-- 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f7c2b20..c5c4082 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1036,7 +1036,7 @@ checksum = "6c89eaf493b3dfc730cda42a77014aad65e03213992c7afe0dff60a9f7d3dd94" [[package]] name = "rustc_codegen_spirv-types" version = "0.9.0" -source = "git+https://github.com/Rust-GPU/rust-gpu?rev=3df836eb9d7b01344f52737bf9a310d1fb5a0c26#3df836eb9d7b01344f52737bf9a310d1fb5a0c26" +source = "git+https://github.com/Rust-GPU/rust-gpu?rev=e97524f6b4816056b3edaa70c3e0e0c656392c05#e97524f6b4816056b3edaa70c3e0e0c656392c05" dependencies = [ "rspirv", "serde", @@ -1216,7 +1216,7 @@ dependencies = [ [[package]] name = "spirv-builder" version = "0.9.0" -source = "git+https://github.com/Rust-GPU/rust-gpu?rev=3df836eb9d7b01344f52737bf9a310d1fb5a0c26#3df836eb9d7b01344f52737bf9a310d1fb5a0c26" +source = "git+https://github.com/Rust-GPU/rust-gpu?rev=e97524f6b4816056b3edaa70c3e0e0c656392c05#e97524f6b4816056b3edaa70c3e0e0c656392c05" dependencies = [ "cargo_metadata", "clap", diff --git a/Cargo.toml b/Cargo.toml index cab77d3..de7d918 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ exclude = [ resolver = "2" [workspace.dependencies] -spirv-builder = { git = "https://github.com/Rust-GPU/rust-gpu", rev = "3df836eb9d7b01344f52737bf9a310d1fb5a0c26", default-features = false } +spirv-builder = { git = "https://github.com/Rust-GPU/rust-gpu", rev = "e97524f6b4816056b3edaa70c3e0e0c656392c05", default-features = false } anyhow = "1.0.98" clap = { version = "4.5.41", features = ["derive"] } crossterm = "0.29.0" diff --git a/crates/cargo-gpu/src/build.rs b/crates/cargo-gpu/src/build.rs index b9e15ae..e8e620c 100644 --- a/crates/cargo-gpu/src/build.rs +++ b/crates/cargo-gpu/src/build.rs @@ -6,7 +6,7 @@ use crate::install::Install; use crate::linkage::Linkage; use crate::lockfile::LockfileMismatchHandler; use anyhow::Context as _; -use spirv_builder::{CompileResult, ModuleResult, SpirvBuilder}; +use spirv_builder::{CompileResult, ModuleResult, SpirvBuilder, SpirvBuilderError}; use std::io::Write as _; use std::path::PathBuf; @@ -95,17 +95,22 @@ impl Build { ); if self.build.watch { - let this = self.clone(); - self.build - .spirv_builder - .watch(move |result, accept| { - let result1 = this.parse_compilation_result(&result); - if let Some(accept) = accept { - accept.submit(result1); + let mut watcher = self.build.spirv_builder.clone().watch()?; + loop { + // if the build fails "regularly", eg. `cargo build` fails and nothing else, just retry + crate::user_output!( + "Compiling shaders at {}...\n", + self.install.shader_crate.display() + ); + match watcher.recv() { + Ok(result) => { + self.parse_compilation_result(&result)?; + crate::user_output!("Build successful!\n"); } - })? - .context("unreachable")??; - std::thread::park(); + Err(SpirvBuilderError::BuildFailed) => crate::user_output!("Build failed!\n"), + Err(err) => return Err(anyhow::Error::from(err)), + } + } } else { crate::user_output!( "Compiling shaders at {}...\n", diff --git a/crates/cargo-gpu/src/install.rs b/crates/cargo-gpu/src/install.rs index 2cf3620..c66c6b6 100644 --- a/crates/cargo-gpu/src/install.rs +++ b/crates/cargo-gpu/src/install.rs @@ -299,7 +299,7 @@ package = "rustc_codegen_spirv" cargo.args(["-p", "rustc_codegen_spirv", "--lib"]); } - log::debug!("building artifacts with `{cargo}`"); + log::debug!("building artifacts with `{cargo:?}`"); cargo .stdout(std::process::Stdio::inherit()) .stderr(std::process::Stdio::inherit()) diff --git a/crates/cargo-gpu/src/lib.rs b/crates/cargo-gpu/src/lib.rs index d7b99a1..cd16561 100644 --- a/crates/cargo-gpu/src/lib.rs +++ b/crates/cargo-gpu/src/lib.rs @@ -74,7 +74,7 @@ pub use spirv_builder; /// Central function to write to the user. #[macro_export] macro_rules! user_output { - ($($args: tt)*) => { + ($($args: tt)*) => { { #[allow( clippy::allow_attributes, clippy::useless_attribute, @@ -92,7 +92,7 @@ macro_rules! user_output { } print!($($args)*); std::io::stdout().flush().unwrap(); - } + } } } /// All of the available subcommands for `cargo gpu`