50 lines
1.4 KiB
Rust
50 lines
1.4 KiB
Rust
use std::env;
|
|
use std::fs;
|
|
use std::path::{Path, PathBuf};
|
|
|
|
fn main() {
|
|
let target = env::var("TARGET").unwrap();
|
|
|
|
// let cargo_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
|
|
|
|
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
|
|
// fs::remove_dir_all(&out_dir).unwrap();
|
|
// fs::create_dir_all(&out_dir).unwrap();
|
|
|
|
// run_cbindgen(&cargo_dir, &out_dir);
|
|
run_bindgen(&target, &out_dir);
|
|
}
|
|
|
|
// fn run_cbindgen(_cargo_dir: &Path, _out_dir: &Path) {
|
|
// TODO: Run cbindgen
|
|
// }
|
|
|
|
fn run_bindgen(target: &str, out_dir: &Path) {
|
|
// if target == "xtensa-esp32-none-elf" {
|
|
// env::set_var("LLVM_CONFIG_PATH", "/usr/local/xtensa/llvm/bin/llvm-config");
|
|
// }
|
|
|
|
let mut builder = bindgen::Builder::default();
|
|
builder = builder.header("../main/CApi.h");
|
|
builder = builder.use_core();
|
|
builder = builder.ctypes_prefix("ffi");
|
|
|
|
println!("Target: {}", target);
|
|
match target {
|
|
"riscv32i-unknown-none-elf" => {
|
|
builder = builder.clang_arg("--target=riscv32");
|
|
}
|
|
"xtensa-esp32-none-elf" => {
|
|
builder = builder.clang_arg("--target=xtensa-esp32-elf");
|
|
}
|
|
_ => {
|
|
panic!("Unexpect target archtitecture: {}", &target);
|
|
}
|
|
}
|
|
|
|
let bindings = builder.generate().expect("Couldn't generate bindings!");
|
|
bindings
|
|
.write_to_file(out_dir.join("bindings.rs"))
|
|
.expect("Couldn't save bindings!");
|
|
}
|