use std::path::PathBuf;
use std::{env, fs};
const LIB_DIRS: &[&str] = &[
"/root/Bela/lib",
"/usr/evl/lib/aarch64-linux-gnu",
"/usr/local/lib",
"/usr/lib/aarch64-linux-gnu",
];
const LIBS: &[&str] = &["bela", "seasocks", "evl", "stdc++"];
fn main() {
println!("cargo::rerun-if-changed=build.rs");
println!("cargo::rerun-if-env-changed=BELA_SYSROOT");
let arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
let os = env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
if !(arch == "aarch64" && os == "linux") {
return;
}
let sysroot = env::var("BELA_SYSROOT").unwrap_or_default();
for dir in LIB_DIRS {
println!("cargo::rustc-link-search=native={sysroot}{dir}");
}
if let Some(dir) = gcc_lib_dir(&sysroot) {
println!("cargo::rustc-link-search=native={}", dir.display());
}
for lib in LIBS {
println!("cargo::rustc-link-lib=dylib={lib}");
}
}
fn gcc_lib_dir(sysroot: &str) -> Option<PathBuf> {
let base = PathBuf::from(format!("{sysroot}/usr/lib/gcc/aarch64-linux-gnu"));
fs::read_dir(base)
.ok()?
.filter_map(Result::ok)
.map(|entry| entry.path())
.filter(|path| path.join("libstdc++.so").exists())
.max()
}