extern crate bindgen; extern crate cc; use std::{env, path::PathBuf}; fn main() { let target = std::env::var("TARGET").expect("Target triple is not set"); let mut e = cc::Build::new(); e.file("flanterm.c").file("backends/fb.c") .flag("-fno-stack-protector") .flag("-fno-stack-check") .flag("-ffreestanding") .flag("-mno-red-zone") .flag("-fno-lto"); if target.as_str() == "x86_64-unknown-none" { e.flag("-march=x86-64") .flag("-mno-80387") .flag("-mno-mmx") .flag("-mno-sse") .flag("-mno-sse2"); } else { e.flag("-mgeneral-regs-only"); } e.compile("flanterm"); let bindings = bindgen::builder() .clang_arg("-ffreestanding") .use_core() .header("wrapper.h") .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() .expect("Unable to generate bindings"); let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); bindings .write_to_file(out_path.join("bindings.rs")) .expect("Couldn't write bindings!"); }