41 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| extern crate cmake;
 | |
| extern crate sha2;
 | |
| 
 | |
| use std::{env, fs, path::Path, process::Command};
 | |
| 
 | |
| use sha2::{Digest, Sha256};
 | |
| 
 | |
| fn main() {
 | |
|     println!("cargo:rerun-if-changed=build/glslangValidator.exe");
 | |
| 
 | |
|     let target = env::var("TARGET").unwrap();
 | |
|     let out_file = Path::new(&env::var("OUT_DIR").unwrap()).join("glslang_validator");
 | |
| 
 | |
|     let path = if target.contains("windows") {
 | |
|         const SHA256SUM: &'static str =
 | |
|             "90b377479fb137f4ac69460d5f5cdc54cd23bace5eb6e6812516fdfa693b25cf";
 | |
|         let path = Path::new("build/glslangValidator.exe").to_owned();
 | |
|         let content = fs::read(&path).expect("failed to open executable");
 | |
|         let mut hasher = Sha256::default();
 | |
|         hasher.input(&content);
 | |
|         let result = hasher.result();
 | |
|         let sha256sum = format!("{:x}", result);
 | |
|         assert_eq!(sha256sum, SHA256SUM, "glslangValidator.exe checksum failed");
 | |
|         path
 | |
|     } else {
 | |
|         // Try to initialize submodules. Don't care if it fails, since this code also runs for
 | |
|         // the crates.io package.
 | |
|         let _ = Command::new("git")
 | |
|             .arg("submodule")
 | |
|             .arg("update")
 | |
|             .arg("--init")
 | |
|             .status();
 | |
|         cmake::build("glslang");
 | |
|         Path::new(&env::var("OUT_DIR").unwrap())
 | |
|             .join("bin")
 | |
|             .join("glslangValidator")
 | |
|     };
 | |
| 
 | |
|     fs::copy(&path, &out_file).expect("failed to copy executable");
 | |
| }
 | 
