Structuring a large codebase

If you have multiple modules, it may be inconvenient to generate all bindings in one include_cpp! invocation. There is limited support to refer from one set of bindings to another, using the extern_cpp_type! directive.

C++ header:

#include <cstdint> struct A { A() : a(0) {} int a; }; enum B { VARIANT, }; void handle_a(const A& a); A create_a(B);

Rust:

use autocxx::prelude::*; pub mod base { autocxx::include_cpp! { #include "input.h" name!(ffi2) safety!(unsafe_ffi) generate!("A") generate!("B") } pub use ffi2::*; } pub mod dependent { autocxx::include_cpp! { #include "input.h" safety!(unsafe_ffi) generate!("handle_a") generate!("create_a") extern_cpp_type!("A", crate::base::A) extern_cpp_type!("B", super::super::base::B) pod!("B") } pub use ffi::*; } fn main() { let a = dependent::create_a(base::B::VARIANT).within_unique_ptr(); dependent::handle_a(&a); }