use std::path::Path;
use bindgen::{EnumVariation, Formatter, RustEdition, RustTarget};
pub const EXCLUDED_FUNCTIONS: &[&str] = &[
"JPH_RagdollSettings_DisableParentChildCollisions",
"JPH_Ragdoll_SetPose2",
"JPH_Ragdoll_GetPose2",
"JPH_SkeletonMapper_Initialize",
"JPH_SkeletonMapper_LockAllTranslations",
"JPH_SkeletonMapper_LockTranslations",
"JPH_SkeletonMapper_Map",
"JPH_SkeletonMapper_MapReverse",
];
pub const DEBUG_RENDERER_FUNCTIONS: &[&str] = &[
"JPH_Shape_Draw",
"JPH_PhysicsSystem_Draw.*",
"JPH_BodyDrawFilter_.*",
"JPH_DebugRenderer_.*",
];
pub fn builder(
header: &Path,
include_dir: &Path,
target: &str,
double_precision: bool,
debug_renderer: bool,
) -> bindgen::Builder {
let mut builder = bindgen::Builder::default()
.header(header.display().to_string())
.clang_arg(format!("-I{}", include_dir.display()))
.clang_arg("-ffreestanding")
.clang_arg(format!("--target={target}"))
.allowlist_item("JPH_.*")
.allowlist_item("JobSystemThreadPoolConfig")
.default_enum_style(EnumVariation::Consts)
.prepend_enum_name(false)
.rust_target(
RustTarget::stable(82, 0).expect("1.82 is a stable Rust version bindgen knows"),
)
.rust_edition(RustEdition::Edition2021)
.formatter(Formatter::Prettyplease)
.generate_comments(false);
if double_precision {
builder = builder.clang_arg("-DJPH_DOUBLE_PRECISION");
}
for function in EXCLUDED_FUNCTIONS {
builder = builder.blocklist_function(function);
}
if !debug_renderer {
for function in DEBUG_RENDERER_FUNCTIONS {
builder = builder.blocklist_function(function);
}
}
builder
}