4个版本
0.1.3 | 2024年6月1日 |
---|---|
0.1.2 | 2024年6月1日 |
0.1.1 | 2024年6月1日 |
0.1.0 | 2024年6月1日 |
在硬件支持中排名第176
每月下载量55次
420KB
12K SLoC
libcsp-rust
本项目旨在提供库和工具,以便在Rust项目中构建和使用libcsp
C库。
为此提供了3个crate
libcsp
在libcsp-sys
crate之上提供了一个安全和舒适的Rust接口。libcsp-sys
为libcsp
提供了Rust绑定。libcsp-cargo-build
提供了一个API,使用cargo
和cc
crate来构建libcsp
。
此外,它提供了一个工作空间,允许在clib
目录中更容易地更新libcsp
C源代码和相应的绑定。一些libcsp
提供的示例已移植到Rust,并在examples
目录中展示。
请注意,这是早期/实验性软件。可能缺少重要功能。欢迎PR和改进建议!本项目迄今为止主要在Linux/POSIX系统上进行测试。
工作原理
我们假设cargo也应该负责构建库。
- 将
libcsp-cargo-build
添加到您的Cargo.toml
中的构建依赖项。 - 将
libcsp
添加到您的Cargo.toml
中的常规依赖项。 - 创建一个自定义的
build.rs
脚本,该脚本使用libcsp-cargo-build
提供的API来构建libcsp
C库。您必须在某个目录中提供libcsp
的源代码,并将目录路径传递给构建器API。 - 现在,您可以编写常规的Rust代码,并使用
libcsp
crate提供的Rust API来使用libcsp
C库。
建议您查看示例构建脚本,它应该能给您一个关于如何实现上述4个步骤的构建脚本的大致印象。
运行示例
该示例同时使用了构建crate、绑定和API crate,并在Rust中实现了服务器/客户端示例。您可以使用以下步骤运行示例
- 将
libcsp
克隆/复制到lib
文件夹中,例如使用提供的lib/clone-csp.sh
脚本或将其作为git子模块添加libcsp
。 - 现在,您可以使用
cargo run -p libcsp-rust-examples
来运行服务器/客户端示例。
对libcsp-sys
库进行编译时配置
libcsp-sys
需要包含一些编译时配置文件才能正常工作。您可以在这里查看该文件的示例版本。用户需要通过使用CSP_CONFIG_DIR
环境变量来提供包含此autoconfig.rs
文件的目录的路径。
当使用libcsp-cargo-build
时,可以通过在示例构建脚本中完成相同的操作来自动生成此文件,即使用Builder对象的generate_autoconf_rust_file
(即将提供链接)方法。
在此工作区中,使用以下.cargo/config.toml
配置将CSP_CONFIG_DIR
变量设置为硬编码
[env]
CSP_CONFIG_DIR = { value = "examples", relative = true }
使用clib
文件夹生成和更新绑定
在此存储库中,lib
文件夹作为libcsp
库的临时存储目录,用于构建。然而,它也可以用来通过提供一些工具和助手来自动生成和更新绑定文件bindings.rs
来更新libcsp-sys
中提供的绑定。
如果您想这样做,首先应该安装bindgen-cli
cargo install bindgen-cli --locked
bindgen
需要用户提供一些额外信息来生成绑定:一个用于配置libcsp
的autoconfig.h
文件。通常,该文件由C构建系统生成。此文件位于clib/cfg/csp
,并且在运行示例应用程序时也会自动更新。
在克隆存储库后,您现在可以运行以下命令来重新生成绑定文件
bindgen --use-core wrapper.h -- "-I./libcsp/include" "-I./cfg" "-I./libcsp/src" > bindings.rs
有了绑定文件,您现在可以手动更新libcsp-sys/src/lib.rs
中提供的FFI绑定或您自己的CSP库中的绑定。
依赖关系
~0.3–0.9MB
~20K SLoC