use std::io::Write; fn main() { let out_dir = std::env::var("OUT_DIR").unwrap(); let destination = std::path::Path::new(&out_dir).join("svd_bits.rs"); let mut f = std::fs::File::create(&destination).unwrap(); let root_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap(); let svd = std::path::Path::new(&root_dir).join("svd"); let files = std::fs::read_dir(svd).unwrap(); let mut frags = Vec::new(); for file in files { let path = file.expect("failed to get path").path(); let path_str = path.as_os_str().to_str().unwrap(); if path_str.ends_with(".tmpl.svd") || path_str.ends_with(".frag") { let path = path.canonicalize().unwrap(); let filename = path.file_name().unwrap().to_str().unwrap().to_owned(); let id_string = filename.chars().map(|x| match x { 'A'...'Z' | 'a'...'z' | '0'...'9' => x, _ => '_', }).collect::().to_ascii_uppercase(); write!(f, r#" const {}: &'static [u8] = include_bytes!("{}"); "#, id_string, path.to_str().unwrap()).unwrap(); if path_str.ends_with(".frag") { frags.push((id_string, filename)); } } } write!(f, r#"const ALL_FRAGS: &'static [(&'static [u8], &'static str)] = &["#).unwrap(); for (frag_id, frag_fn) in frags { write!(f, r#"(&{}, "{}"),"#, frag_id, frag_fn).unwrap(); } write!(f, r#"];"#).unwrap(); }