#cargo-build #llvm #asm #ll #bc #build-script

llvm_build_utils

是否曾在 cargo 构建脚本中想要构建“原生”汇编代码,但 gcc crate 还无法完全处理?欢迎使用 llvm_build_utils,它提供了一个方便的 API,可以将你的 .ll 或 .bc 文件打包成包含机器代码的可用存档!它甚至不需要安装 LLVM*!

3 个版本 (重大变更)

使用旧的 Rust 2015

0.3.0 2016 年 7 月 4 日
0.2.0 2016 年 7 月 1 日
0.1.0 2016 年 7 月 1 日

#1966开发工具

每月 49 次下载

ISC/Apache-2.0

24KB
375

是否曾在 cargo 构建脚本中想要构建“原生”汇编代码,但 gcc crate 还无法完全处理?欢迎使用 llvm_build_utils,它提供了一个方便的 API,可以将你的 LLVM-IR 或 LLVM 字节码文件打包成包含机器代码的可用存档!它甚至不需要安装 LLVM,并且适用于稳定 Rust¹!

不过目前还没有支持 MSVC Windows

文档

¹: 可能在不同版本之间或与 Rust 的某些版本不兼容。我们将在下表中尝试记录此类中断。

兼容性表格

Rustc 版本 本库
1.8-1.11 0.1-0.2

使用 llvm_build_utils

首先,您需要为您的 crate 添加一个构建脚本(build.rs),并通过以下方式将其添加到 Cargo.toml

[package]
# ...
build = "build.rs"

[build-dependencies]
llvm_build_utils = "0.3"

然后编写您的 build.rs 如下所示

extern crate llvm_build_utils;
use llvm_build_utils::*;

fn main() {
    build_archive("libyourthing.a", &[
        ("input.ll", BuildOptions {
            ..BuildOptions::default() // customise how the file is built
        })
    ]).expect("error happened").print();
}

运行 cargo build 应该会产生 libyourthing.a,然后可以将其链接到您的 Rust 可执行文件/库。

许可协议

llvm_build_utils 以您的选择在 ISC(类似 MIT)或 Apache(版本 2.0)许可下分发。

依赖项

~2.5MB
~48K SLoC