#aerospace #csp #space #ffi #no-std

no-std libcsp

在libcsp-sys之上提供的安全的 Rust API

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

Download history 97/week @ 2024-05-26 168/week @ 2024-06-02 1/week @ 2024-06-09

每月下载量55

Apache-2.0

420KB
12K SLoC

Rust 9K SLoC // 0.0% comments Shell 2K SLoC // 0.1% comments

Crates.io docs.rs

libcsp-rust

本项目旨在提供库和工具,以便在Rust项目中构建和使用libcsp C库。

为此提供了3个crate

此外,它提供了一个工作空间,允许在clib目录中更容易地更新libcsp C源代码和相应的绑定。一些libcsp提供的示例已移植到Rust,并在examples目录中展示。

请注意,这是早期/实验性软件。可能缺少重要功能。欢迎PR和改进建议!本项目迄今为止主要在Linux/POSIX系统上进行测试。

工作原理

我们假设cargo也应该负责构建库。

  1. libcsp-cargo-build添加到您的Cargo.toml中的构建依赖项。
  2. libcsp添加到您的Cargo.toml中的常规依赖项。
  3. 创建一个自定义的build.rs脚本,该脚本使用libcsp-cargo-build提供的API来构建libcsp C库。您必须在某个目录中提供libcsp的源代码,并将目录路径传递给构建器API。
  4. 现在,您可以编写常规的Rust代码,并使用libcspcrate提供的Rust API来使用libcsp C库。

建议您查看示例构建脚本,它应该能给您一个关于如何实现上述4个步骤的构建脚本的大致印象。

运行示例

该示例同时使用了构建crate、绑定和API crate,并在Rust中实现了服务器/客户端示例。您可以使用以下步骤运行示例

  1. libcsp克隆/复制到lib文件夹中,例如使用提供的lib/clone-csp.sh脚本或将其作为git子模块添加libcsp
  2. 现在,您可以使用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需要用户提供一些额外信息来生成绑定:一个用于配置libcspautoconfig.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