fn main() { let out_dir = std::env::var("OUT_DIR").unwrap(); let target_dir = std::path::Path::new(&out_dir) .ancestors() .nth(3) // Volta 3 níveis de `target/debug/build/inference-server-XYZ/out` para `target/debug/` ou `target/release/` .unwrap(); let vendor_dir = std::path::PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()) .parent() .unwrap() .parent() .unwrap() .join("vendor") .join("llama-bin"); if vendor_dir.exists() { println!( "cargo:warning=Copying DLLs from {:?} to {:?}", vendor_dir, target_dir ); // Vamos copiar todos os arquivos .dll if let Ok(entries) = std::fs::read_dir(&vendor_dir) { for entry in entries.flatten() { let path = entry.path(); if path.is_file() && path.extension().and_then(|s| s.to_str()) == Some("dll") { let file_name = path.file_name().unwrap(); let dest = target_dir.join(file_name); let _ = std::fs::copy(&path, &dest); } } } } // Rebuildar apenas se houver mudanças nessa build file ou nos bins da vendor println!("cargo:rerun-if-changed=build.rs"); println!("cargo:rerun-if-changed=../../vendor/llama-bin"); }