5 个版本

使用旧的 Rust 2015

0.1.4 2016年10月6日
0.1.3 2016年8月12日
0.1.2 2016年7月26日
0.1.1 2016年7月21日
0.1.0 2016年7月21日

#666Cargo 插件

25 每月下载量
用于 erlang_nif-sys

MIT 许可证

17KB
345

cargo-erlangapp

cargo-erlangapp 是一个 Cargo 子命令,用于构建嵌入 Erlang 应用程序中的 Rust 包。所有位于 crates 目录中的包都会被编译,并放置到 priv/crates 中。以下是一个示例,其中两个包的工件被放置到 priv/crates

myapp/
    Makefile
    ebin/
    src/
    crates/
        foo_nif/
            Cargo.toml
            ...
        bar_port/
            Cargo.toml
             ...
    priv/
        crates/
            foo_nif/
                libfoo_nif.so
            bar_port/
                bar_port

cargo-erlangapp 旨在被 Erlang 构建系统如 erlang.mkrebar3 自动安装和使用,但也可以手动使用。

Erlang 应用程序 find_crate 帮助在 priv/crates 中定位 Rust 工件。

安装

cargo install cargo-erlangapp

用法

Usage:
        cargo-erlangapp build [cargo rustc args]
        cargo-erlangapp clean [cargo clean args]
        cargo-erlangapp test [cargo test args]

内部原理

cargo-erlangapp 在为 Erlang 编译 Rust 代码时处理了一些细节

  • OS X 在编译为 Erlang 的 dylib(即 NIF 模块)时需要特殊的链接标志。为了做到这一点,cargo-erlangapp 必须读取 JSON 清单以识别所有目标并单独编译每个目标,并对 dylib 应用特殊的标志。
  • 在 OS X 上,Erlang dylib 加载器需要与 Rust 产生的文件名不同的文件。

依赖项

~1.5MB
~28K SLoC