1
0
Fork 0
forked from wry/wry

build.rs: don't build compile-shaders if shaders are unchanged

This commit is contained in:
Julian Orth 2025-10-04 22:32:59 +02:00
parent d1910063d8
commit ee84b309ba
6 changed files with 43 additions and 40 deletions

View file

@ -1,9 +1,14 @@
use {anyhow::bail, std::process::Command};
mod hash;
use {crate::vulkan::hash::unchanged, anyhow::bail, std::process::Command};
pub fn main() -> anyhow::Result<()> {
if !std::fs::exists("compile-shaders")? {
return Ok(());
}
if unchanged() {
return Ok(());
}
let code = Command::new("cargo")
.args([
"run",

32
build/vulkan/hash.rs Normal file
View file

@ -0,0 +1,32 @@
use {std::fmt::Write, walkdir::WalkDir};
pub const ROOT: &str = "src/gfx_apis/vulkan/shaders";
pub const HASH: &str = "src/gfx_apis/vulkan/shaders_hash.txt";
fn calculate_hash() -> anyhow::Result<String> {
let dir = WalkDir::new(ROOT);
let mut files = vec![];
for file in dir {
let file = file?;
if file.file_type().is_file() {
files.push(file.path().to_path_buf());
}
}
files.sort();
let mut out = String::new();
for file in files {
let data = std::fs::read(&file)?;
writeln!(out, "{} {}", blake3::hash(&data).to_hex(), file.display())?;
}
Ok(out)
}
pub fn unchanged() -> bool {
let Ok(actual) = std::fs::read_to_string(HASH) else {
return false;
};
let Ok(expected) = calculate_hash() else {
return false;
};
actual == expected
}