#bindings #c #cbindgen #bindgen

ffiber

通过将Rust库接口转换为extern C函数,启用FFI以从C调用Rust

1个不稳定版本

0.1.0 2022年8月1日

#296 in FFI

自定义许可

52KB
1.5K SLoC

ffiber

ffiber从具有Rust-y函数接口的Rust库生成C绑定。

当从Rust调用C(更常见的方向)时,建议在低级C绑定周围编写安全的封装模块,以确保在Rust级别的内存安全性和安全性不变性。当从C调用Rust时,Rust库开发者应首先使用安全的、Rust-y接口编写他们的库。然后,他们可以使用ffiber来程序化生成低级extern C函数,并使用像cbindgen这样的工具来生成C头文件。

如何使用

ffiber目前仅作为库提供(例如在您的build.rs中)。

  1. 初始化一个CDylibCompiler
  2. 使用add_dependency()添加crate依赖项,包括您尝试绑定的库。
  3. 使用import()将必要的crate、结构体、特质、函数等导入到生成的src/lib.rs中。
  4. 最后,使用add_extern_c_function()根据它们的规范生成库函数的封装。

如果需要,您还可以使用内部SerializationCompiler手动生成代码。这可能对创建中间封装函数很有用,例如,用于创建元组参数等未实现的功能。

执行此代码将在您指定的路径生成一个crate。该crate默认将cbindgen作为构建依赖项。构建此crate将在其根目录生成C头文件。

示例

请参阅examples/

cargo r --release cornflakes
cd mlx5-datapath-c
cargo b  # mlx5_datapath.h

使用ffiber的代码库

路线图

有几个功能计划中。如果您想帮忙,请在问题中留言。

依赖项

~5–15MB
~188K SLoC