WARNING Due to the experimental nature of the project I strongly discourage using the crate for the time being
Ever wanted to build “native” assemblyish stuff in your cargo build scripts… something gcc crate cannot quite handle yet? Welcome to llvm_build_utils which provides a convenient API to pack your LLVM-IR or LLVM bytecode files into a ready to use archive full of machine code! It doesn’t even need LLVM installation and works on stable Rust¹!
No MSVC windows support yet, though
¹: May break between versions or be incompatible with some versions of Rust, though. We’ll try to document such breakages in the table below.
Rustc version | This Library |
---|---|
1.8-1.11 | 0.1-0.2 |
First, you’ll want to both add a build script for your crate (build.rs
) and also add this crate
to your Cargo.toml
via:
[package]
# ...
build = "build.rs"
[build-dependencies]
llvm_build_utils = "0.3"
Then write your build.rs
like this:
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();
}
Running a cargo build
should produce libyourthing.a
which then may be linked to your Rust
executable/library.
llvm_build_utils is distributed under ISC (MIT-like) or Apache (version 2.0) license at your choice.