build.rs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. "TokenInstruction".to_string(),
  43. "Mint".to_string(),
  44. "Account".to_string(),
  45. "Multisig".to_string(),
  46. ],
  47. exclude: vec!["DECIMALS".to_string()],
  48. ..cbindgen::ExportConfig::default()
  49. },
  50. parse: cbindgen::ParseConfig {
  51. parse_deps: true,
  52. include: Some(vec!["solana-sdk".to_string()]),
  53. ..cbindgen::ParseConfig::default()
  54. },
  55. ..cbindgen::Config::default()
  56. };
  57. cbindgen::Builder::new()
  58. .with_crate(crate_dir)
  59. .with_config(config)
  60. .generate()
  61. .unwrap()
  62. .write_to_file("inc/token.h");
  63. }