build.rs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. extern crate cbindgen;
  2. use cbindgen::{Config, Language, MacroExpansionConfig};
  3. use std::env;
  4. use std::path::PathBuf;
  5. fn main() {
  6. let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
  7. let package_name = env::var("CARGO_PKG_NAME").unwrap();
  8. let output_file = target_dir().join(format!("{package_name}.h")).display().to_string();
  9. let meconfig = MacroExpansionConfig { bitflags: true, ..Default::default() };
  10. let config = Config {
  11. language: Language::C,
  12. cpp_compat: true,
  13. namespace: Some(String::from("rustybits")),
  14. macro_expansion: meconfig,
  15. ..Default::default()
  16. };
  17. cbindgen::generate_with_config(&crate_dir, config)
  18. .unwrap()
  19. .write_to_file(&output_file);
  20. }
  21. /// Find the location of the `target/` directory. Note that this may be
  22. /// overridden by `cmake`, so we also need to check the `CARGO_TARGET_DIR`
  23. /// variable.
  24. fn target_dir() -> PathBuf {
  25. if let Ok(target) = env::var("CARGO_TARGET_DIR") {
  26. PathBuf::from(target)
  27. } else {
  28. PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).join("target")
  29. }
  30. }