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中)。
- 初始化一个
CDylibCompiler
。 - 使用
add_dependency()
添加crate依赖项,包括您尝试绑定的库。 - 使用
import()
将必要的crate、结构体、特质、函数等导入到生成的src/lib.rs中。 - 最后,使用
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