| //! libbpf bindgen configuration |
| // Modified from the upstream libbpf-sys build.rs file in the libbpf-sys root dir. |
| use std::collections::HashSet; |
| fn main() { |
| #[derive(Debug)] |
| struct IgnoreMacros(HashSet<&'static str>); |
| impl bindgen::callbacks::ParseCallbacks for IgnoreMacros { |
| fn will_parse_macro(&self, name: &str) -> bindgen::callbacks::MacroParsingBehavior { |
| if self.0.contains(name) { |
| bindgen::callbacks::MacroParsingBehavior::Ignore |
| } else { |
| bindgen::callbacks::MacroParsingBehavior::Default |
| } |
| } |
| } |
| let ignored_macros = IgnoreMacros( |
| vec![ |
| "BTF_KIND_FUNC", |
| "BTF_KIND_FUNC_PROTO", |
| "BTF_KIND_VAR", |
| "BTF_KIND_DATASEC", |
| "BTF_KIND_FLOAT", |
| "BTF_KIND_DECL_TAG", |
| "BTF_KIND_TYPE_TAG", |
| "BTF_KIND_ENUM64", |
| ] |
| .into_iter() |
| .collect(), |
| ); |
| bindgen_cmd::build(|mut builder| { |
| builder = builder |
| .derive_default(true) |
| .explicit_padding(true) |
| .default_enum_style(bindgen::EnumVariation::Consts) |
| .size_t_is_usize(false) |
| .prepend_enum_name(false) |
| .layout_tests(false) |
| .generate_comments(false) |
| .emit_builtins() |
| .allowlist_function("bpf_.+") |
| .allowlist_function("btf_.+") |
| .allowlist_function("libbpf_.+") |
| .allowlist_function("perf_.+") |
| .allowlist_function("ring_buffer_.+") |
| .allowlist_function("user_ring_buffer_.+") |
| .allowlist_function("vdprintf") |
| .allowlist_type("bpf_.+") |
| .allowlist_type("btf_.+") |
| .allowlist_type("xdp_.+") |
| .allowlist_type("perf_.+") |
| .allowlist_var("BPF_.+") |
| .allowlist_var("BTF_.+") |
| .allowlist_var("XDP_.+") |
| .allowlist_var("PERF_.+") |
| .parse_callbacks(Box::new(ignored_macros)); |
| builder |
| }) |
| } |