]> git.nega.tv - josh/narcissus/commitdiff
shark-shaders: Improve error handling for slang
authorJoshua Simmons <josh@nega.tv>
Sat, 18 Oct 2025 21:39:41 +0000 (23:39 +0200)
committerJoshua Simmons <josh@nega.tv>
Sat, 18 Oct 2025 21:39:47 +0000 (23:39 +0200)
title/shark-shaders/build.rs

index 0e5ececbd75eaa1b2d1270ed69674dc3f5d2a592..fdf583252227a02310f00f8c7d8f188e780d9386 100644 (file)
@@ -95,7 +95,9 @@ fn main() {
     let mut slang_commands = SLANG_SHADERS
         .iter()
         .map(|SlangShader { name }| {
-            Command::new("slangc")
+            let mut command = Command::new("slangc");
+
+            let child = command
                 .arg(format!("{SHADER_ROOT}/{name}.slang"))
                 .args(["-target", "spirv"])
                 .args(["-profile", "spirv_1_6"])
@@ -108,7 +110,18 @@ fn main() {
                 .args(["-depfile", &format!("{out_dir}/{name}.d")])
                 .args(["-o", &format!("{out_dir}/{name}.spv")])
                 .spawn()
-                .unwrap()
+                .expect("failed to launch `slangc`, is it in the path?");
+
+            let mut command_string = String::new();
+            command_string.push_str("slangc");
+            for arg in command.get_args() {
+                if let Some(arg) = arg.to_str() {
+                    command_string.push(' ');
+                    command_string.push_str(arg);
+                }
+            }
+
+            (child, command_string)
         })
         .collect::<Vec<_>>();
 
@@ -155,11 +168,12 @@ fn main() {
         .unwrap();
     }
 
-    for (mut command, shader) in slang_commands.drain(..).zip(SLANG_SHADERS.iter()) {
-        let status = command.wait().unwrap();
+    for ((mut child, command_string), shader) in slang_commands.drain(..).zip(SLANG_SHADERS.iter())
+    {
+        let status = child.wait().unwrap();
         assert!(
             status.success(),
-            "shader '{}' failed to compile",
+            "shader '{}' failed to compile\n$ {command_string}",
             shader.name
         );
     }