use std::{
env::{var, VarError},
path::PathBuf,
};
const DEFAULT_HIP_PATH: &str = "/opt/rocm/hip";
fn main() {
println!("cargo:rerun-if-env-changed=HIP_PATH");
let hip_path = match var("HIP_PATH") {
Ok(hip_path) => {
let pb = PathBuf::from(hip_path);
if !pb.exists() {
panic!(
"{}: HIP_PATH is set to '{}', but that path doesn't exist",
env!("CARGO_PKG_NAME"),
pb.display()
);
}
pb
}
Err(VarError::NotPresent) => PathBuf::from(DEFAULT_HIP_PATH),
Err(e @ VarError::NotUnicode(_)) => panic!("{}: HIP_PATH: {}", env!("CARGO_PKG_NAME"), e),
};
println!(
"cargo:warning={}: Using '{}' as HIP_PATH",
env!("CARGO_PKG_NAME"),
hip_path.display()
);
let hip_lib = hip_path.join("lib");
println!("cargo:rustc-link-search=native={}", hip_lib.display());
println!("cargo:rustc-link-lib=dylib=amdhip64");
#[cfg(feature = "bindgen")]
{
println!("cargo:rerun-if-changed=wrapper.h");
let bindings = bindgen::Builder::default()
.raw_line("#![allow(non_camel_case_types)]")
.raw_line("#![allow(non_upper_case_globals)]")
.raw_line("#![allow(non_snake_case)]")
.header("wrapper.h")
.clang_arg(format!("-I{}", hip_path.join("include").display()))
.rustified_non_exhaustive_enum("hip.*")
.generate_block(false)
.size_t_is_usize(true)
.ctypes_prefix("::libc")
.derive_default(true)
.derive_eq(true)
.derive_ord(true)
.derive_hash(true)
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.generate()
.expect("Unable to generate bindings");
bindings
.write_to_file("src/bindings.rs")
.expect("Couldn't write bindings!");
}
}