#dds #bindings #generated-bindings #network-protocol #opensplice

sys opensplice-sys

opensplice-sys 是对 Vortex Opensplice DDS C API 的生成 Rust 绑定

3 个版本

使用旧版 Rust 2015

0.0.3 2018年11月10日
0.0.2 2018年11月10日
0.0.1 2018年11月10日

#4 in #network-protocol

Apache-2.0

265KB
7K SLoC

opensplice-sys

此库是 Adlink 的 Vortex Opensplice 社区版 DCPS C API 的 Rust 绑定,版本 6.9.1.181018
要使用此绑定,您需要在您的计算机上安装 Vortex Opensplice。 可以从这里下载 Vortex Opensplice。

使用 bindgen 生成了 rust 绑定。

opensplice-sys 的当前状态

目前 opensplice-sys 包没有单元测试。我计划在未来某个时候添加这些测试,以确保包的正确运行。
然而,我已经使用此绑定创建了一个包装库。 (已在 Ubuntu 18.04 x86_64 上测试)
如果您遇到任何问题,请创建一个问题并告诉我!

构建 opensplice-sys

要构建 rust 绑定,您需要在您选择的计算机上安装 Vortex Opensplice Community。
在构建之前,请确保通过在 Linux 的 Opensplice 安装目录中 source release.com 设置所需的环境变量。

构建脚本将使用 OSPL_HOME 环境变量来查找所需的头文件和库。
如果找不到环境变量,则不会构建库。

使用 bindgen 生成绑定

如果您想自己生成绑定,请将 build.rs 替换为以下代码段。 注意:您需要将 bindgen 添加到 [build-dependencies] 中的 Cargo.toml

extern crate bindgen;

use std::collections::HashSet;
use std::env;
use std::path::PathBuf;

fn main() {
    let key = "OSPL_HOME";
    let ospl_home = match env::var(key) {
        Ok(val) => val,
        Err(_e) => panic!("OSPL_HOME variable was not set.")
    };

    println!(r"cargo:rustc-link-search={}/lib/", ospl_home);
    println!(r"cargo:include={}/include/dcps/C/SAC", ospl_home);
    println!(r"cargo:rustc-link-lib=dcpssac");

    let bindings = bindgen::Builder::default()
    .header(format!("{}/include/dcps/C/SAC/dds_dcps.h", ospl_home))
    .clang_arg(format!("-I{}/include/dcps/C/SAC/", ospl_home))
    .whitelist_type("DDS_.*")
    .whitelist_var("DDS_.*")
    .whitelist_function("DDS_.*")
    .layout_tests(false)
    .rustfmt_bindings(true)
    .generate()
    .expect("Unable to generate bindings for OpenSplice DDS");

    // Write the bindings to the $OUT_DIR/bindings.rs file.
    let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
    bindings
        .write_to_file(out_path.join("bindings.rs"))
        .expect("Couldn't write OpenSplice DDS bindings to bindings.rs!");
}

贡献

总是欢迎帮助!如果您对 Vortex Opensplice 的 rust 绑定有任何改进,请提交一个 PR。

无运行时依赖