#build #binding #projects #cargo #ada #gnat #libgpr

build gpr

Libgpr 的 Rust 绑定。提供了一种简单的方式来使用 cargo 构建 Ada 项目。

4 个版本

0.1.3 2023年12月2日
0.1.2 2023年3月22日
0.1.1 2023年2月3日
0.1.0 2022年9月20日

#203构建工具

Apache-2.0

26KB
703 代码行

gpr-rust

Gpr-Rust 是 gpr 的 Rust 绑定。其目标是提供一种简单的方法将 Ada 代码集成到 Rust 构建过程中。它允许通过解析项目并调用 gprbuild 提供所有必需信息来选择和构建一个 GNAT 项目文件,并将结果库链接起来。

依赖项

要构建此项目,需要安装一个可工作的 Alire 安装。您可以从这里下载 Alire。构建脚本将自动下载所需的依赖项。构建此 crate 所使用的工具链和依赖项仅适用于 crates 构建过程。对于使用此 crate 构建的任何 Ada 项目,都需要提供适当的工具链。

此外,还需要以下原生 C 库

  • libgmp-dev
  • libssl-dev

用法

此库旨在在构建脚本中使用。基本过程包括三个步骤。

  • 加载项目
let project = gpr::Project::load(Path::new("/path/to/project.gpr")).unwrap();
  • 构建项目
let output = Command::new("gprbuild")
    .args(project.gprbuild_args().unwrap())
    .stderr(Stdio::inherit())
    .output()
    .unwrap();

if !output.status.success() {
    panic!();
}
  • 向 cargo 提供所需的链接器标志
println!(
    "cargo:rustc-link-search{}",
    project.library_dir().unwrap().to_str().unwrap()
);
println!(
    "cargo:rustc-link-lib={}={}",
    project.library_kind().unwrap(),
    project.library_name().unwrap()
);
  • 此外,还可以告诉 cargo,Ada 代码的变化也应该触发重新运行
for dir in project.source_dirs().unwrap() {
    println!(
        "cargo:rerun-if-changed={}", dir.as_str()
    );
}

Gpr-Rust 不需要太多配置,大部分代码都是样板代码。如果需要额外的选项来构建 Ada 项目,可以将这些选项作为参数添加到 gprbuild 命令中。

示例项目位于 examples/ada_hello/build.rs。可以通过运行以下命令进行测试

cd examples/ada_hello
LD_LIBRARY_PATH=ada_hello/lib cargo run

依赖项

~0.8–2.7MB
~63K SLoC