build.rs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. use std::{
  2. io::{stderr, Write},
  3. path::PathBuf,
  4. };
  5. fn main() {
  6. println!("cargo:rustc-link-search=native=./build/gblibstdc++");
  7. println!("cargo:rustc-link-lib=static=gblibstdc++");
  8. let headers = ["rust-headers.hpp", "include/kernel/hw/pci.hpp"];
  9. let bindings = bindgen::Builder::default()
  10. .use_core()
  11. .ctypes_prefix("core::ffi")
  12. .headers(headers)
  13. .clang_arg("-I./gblibstdc++/include")
  14. .clang_arg("-I./gblibc/include")
  15. .clang_arg("-I./include")
  16. .clang_arg("-std=c++20")
  17. .opaque_type("std::.*")
  18. .enable_cxx_namespaces()
  19. .parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
  20. .generate()
  21. .expect("Unable to generate bindings");
  22. let out_path = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap());
  23. let out = bindings.write_to_file(out_path.join("src/bindings.rs"));
  24. if let Err(err) = out {
  25. writeln!(
  26. stderr().lock(),
  27. "out_dir = {}",
  28. out_path.as_path().display()
  29. )
  30. .unwrap();
  31. Result::<(), _>::Err(err).expect("Couldn't write bindings!");
  32. }
  33. }