From 86d74b65d218bc506f6f68eea42bea56fbc413ec Mon Sep 17 00:00:00 2001 From: firestar99 Date: Mon, 22 Dec 2025 12:04:00 +0100 Subject: [PATCH] spirv-builder: when no artifact is produced, error instead of panic some cargo commands like clippy won't produce artifacts, so we want to ignore that error in cargo-gpu --- crates/spirv-builder/src/lib.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/crates/spirv-builder/src/lib.rs b/crates/spirv-builder/src/lib.rs index 3bd3c18dec..c1ba80f16e 100644 --- a/crates/spirv-builder/src/lib.rs +++ b/crates/spirv-builder/src/lib.rs @@ -129,6 +129,10 @@ pub enum SpirvBuilderError { MetadataFileMissing(#[from] std::io::Error), #[error("unable to parse multi-module metadata file")] MetadataFileMalformed(#[from] serde_json::Error), + #[error( + "`{ARTIFACT_SUFFIX}` artifact not found in (supposedly successful) build output.\n--- build output ---\n{stdout}" + )] + NoArtifactProduced { stdout: String }, #[error("cargo metadata error")] CargoMetadata(#[from] cargo_metadata::Error), #[cfg(feature = "watch")] @@ -1096,12 +1100,7 @@ fn invoke_rustc(builder: &SpirvBuilder) -> Result { // that ended up on stdout instead of stderr. let stdout = String::from_utf8(build.stdout).unwrap(); if build.status.success() { - get_sole_artifact(&stdout).ok_or_else(|| { - eprintln!("--- build output ---\n{stdout}"); - panic!( - "`{ARTIFACT_SUFFIX}` artifact not found in (supposedly successful) build output (see above). Verify that `crate-type` is set correctly" - ); - }) + get_sole_artifact(&stdout).ok_or(SpirvBuilderError::NoArtifactProduced { stdout }) } else { Err(SpirvBuilderError::BuildFailed) }