Skip to main content

equilibrium_ffi/
lib.rs

1//! **equilibrium-ffi** — Automatic C FFI generation
2//!
3//! This crate auto-detects C-compiling languages (V, Zig, C++, C#, etc.),
4//! compiles them to C intermediate representation, and generates Rust bindings
5//! so you can call foreign code like native modules.
6//!
7//! # Quick Start
8//!
9//! ```rust,ignore
10//! use equilibrium_ffi::load;
11//!
12//! let lib = load("native/math.c")?;
13//! println!("{}", lib.output_path.display());
14//! ```
15//!
16//! # Supported Languages
17//!
18//! | Language | Compiler | C Backend |
19//! |----------|----------|-----------|
20//! | V (Vlang) | `v` | `v -o output.c -backend c` |
21//! | Zig | `zig` | `zig build-obj -femit-asm` or C export |
22//! | C/C++ | `clang`/`gcc` | Native |
23//! | C# | `csc`/`mono` | P/Invoke + Native AOT |
24//! | Rust | `rustc` | cbindgen |
25
26mod bindings;
27mod c_header;
28mod compiler;
29mod detector;
30mod exports;
31mod imports;
32mod loader;
33mod scanner;
34
35pub use bindings::{generate_bindings, BindingOptions, GeneratedBinding};
36pub use compiler::{compile_batch, compile_to_c, CompileError, CompileResult};
37pub use detector::{detect_language, find_compiler, scan_directory, Language, LanguageInfo};
38pub use exports::{
39    discover_exports, discover_exports_with_options, ExportDiscovery, ExportError, ExportOptions,
40    ExportSource,
41};
42pub use imports::{generate_imports, GeneratedImport, ImportOptions};
43pub use loader::{load, load_with_options, LoadError, LoadOptions, LoadedModule};
44pub use scanner::{
45    scan_c_libraries, AutoBindingOptions, GenerationResult, LibraryBindingResult, LibraryDiscovery,
46    LibraryScanner,
47};