build.rs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. extern crate cbindgen;
  2. extern crate cc;
  3. use std::fs::DirEntry;
  4. // include src/header directories that don't start with '_'
  5. #[allow(dead_code)]
  6. fn include_dir(d: &DirEntry) -> bool {
  7. d.metadata().map(|m| m.is_dir()).unwrap_or(false)
  8. && d.path()
  9. .iter()
  10. .nth(2)
  11. .map_or(false, |c| c.to_str().map_or(false, |x| !x.starts_with("_")))
  12. }
  13. // fn generate_bindings(cbindgen_config_path: &Path) {
  14. // let relative_path = cbindgen_config_path
  15. // .strip_prefix("src/header")
  16. // .ok()
  17. // .and_then(|p| p.parent())
  18. // .and_then(|p| p.to_str())
  19. // .unwrap()
  20. // .replace("_", "/");
  21. // let header_path = Path::new("target/include")
  22. // .join(&relative_path)
  23. // .with_extension("h");
  24. // let mod_path = cbindgen_config_path.with_file_name("mod.rs");
  25. // let config = cbindgen::Config::from_file(cbindgen_config_path).unwrap();
  26. // cbindgen::Builder::new()
  27. // .with_config(config)
  28. // .with_src(mod_path)
  29. // .generate()
  30. // .expect("Unable to generate bindings")
  31. // .write_to_file(header_path);
  32. // }
  33. fn main() {
  34. // let crate_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set");
  35. // Generate C includes
  36. // - based on contents of src/header/**
  37. // - headers written to target/include
  38. // fs::read_dir(&Path::new("src/header"))
  39. // .unwrap()
  40. // .into_iter()
  41. // .filter_map(Result::ok)
  42. // .filter(|d| include_dir(d))
  43. // .map(|d| d.path().as_path().join("cbindgen.toml"))
  44. // .filter(|p| p.exists())
  45. // .for_each(|p| {
  46. // println!("cargo:rerun-if-changed={:?}", p.parent().unwrap());
  47. // println!("cargo:rerun-if-changed={:?}", p);
  48. // println!("cargo:rerun-if-changed={:?}", p.with_file_name("mod.rs"));
  49. // generate_bindings(&p);
  50. // });
  51. // // 指定链接搜索路径
  52. // println!("cargo:rustc-link-search=native=./dlibc");
  53. // // 链接 dlibc 库
  54. // println!("cargo:rustc-link-lib=dlibc");
  55. }