build.rs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. extern crate cbindgen;
  2. use std::env;
  3. fn main() {
  4. println!("cargo:rerun-if-env-changed=SPL_CBINDGEN");
  5. println!("cargo:rerun-if-changed=inc/token.h");
  6. if std::path::Path::new("inc/token.h").exists() && env::var("SPL_CBINDGEN").is_err() {
  7. return;
  8. }
  9. println!("cargo:warning=Generating inc/token.h");
  10. let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
  11. let config = cbindgen::Config {
  12. header: Some("/* Autogenerated SPL Token program C Bindings */".to_string()),
  13. after_includes: Some(format!(
  14. "{}{}{}",
  15. format!(
  16. "\n#define TOKEN_MAJOR_VERSION {}",
  17. env!("CARGO_PKG_VERSION_MAJOR")
  18. ),
  19. format!(
  20. "\n#define TOKEN_MINOR_VERSION {}",
  21. env!("CARGO_PKG_VERSION_MINOR")
  22. ),
  23. format!(
  24. "\n#define TOKEN_PATCH_VERSION {}",
  25. env!("CARGO_PKG_VERSION_PATCH")
  26. )
  27. )),
  28. language: cbindgen::Language::C,
  29. line_length: 80,
  30. style: cbindgen::Style::Both,
  31. tab_width: 4,
  32. cpp_compat: true,
  33. pragma_once: true,
  34. enumeration: cbindgen::EnumConfig {
  35. prefix_with_name: true,
  36. ..cbindgen::EnumConfig::default()
  37. },
  38. export: cbindgen::ExportConfig {
  39. prefix: Some("Token_".to_string()),
  40. include: vec![
  41. "TokenInstruction".to_string(),
  42. "Mint".to_string(),
  43. "Account".to_string(),
  44. "Multisig".to_string(),
  45. ],
  46. exclude: vec!["DECIMALS".to_string()],
  47. ..cbindgen::ExportConfig::default()
  48. },
  49. parse: cbindgen::ParseConfig {
  50. parse_deps: true,
  51. include: Some(vec!["solana-sdk".to_string()]),
  52. ..cbindgen::ParseConfig::default()
  53. },
  54. ..cbindgen::Config::default()
  55. };
  56. cbindgen::Builder::new()
  57. .with_crate(crate_dir)
  58. .with_config(config)
  59. .generate()
  60. .unwrap()
  61. .write_to_file("inc/token.h");
  62. }