#llvm #assembly #compiler #machine-code

hllvm

LLVM 编译器套件的惯用绑定

4 个版本

使用旧的 Rust 2015

0.1.3 2017年7月2日
0.1.2 2017年6月25日
0.1.1 2016年12月21日
0.1.0 2016年12月20日

#1930 in 开发工具

MIT 许可证

120KB
3K SLoC

LLVM 的 Rust 绑定

Crates.io license

文档

对 C++ LLVM 编译器套件的高级和惯用封装。


lib.rs:

LLVM 的 Rust 绑定

生成基本程序

extern crate hllvm;

use hllvm::{ir, target, support};

fn build_module(context: &ir::Context) -> ir::Module {
    let mut module = ir::Module::new("mymodule", context);

    let int8 = ir::IntegerType::new(8, &context);
    let stru = ir::StructType::new(&[&int8.as_ref()], false, context);

    let func_ty = ir::FunctionType::new(&stru.as_ref(), &[], false);

    {
        let mut func = module.get_or_insert_function("my_func", &func_ty, &[]);

        let mut block = ir::Block::new(&context);
        block.append(ir::ReturnInst::new(None, context).as_ref().as_ref());

        func.append(&mut block);
    }

    module
}

fn main() {
    let context = ir::Context::new();
    let module = build_module(&context);

    module.dump();
    let stdout = support::FileOutputStream::stdout(false);

    let target = target::Registry::get().targets().find(|t| t.name() == "x86-64").expect("doesn't support X86-64");
    target::Compilation::new(&target)
        .compile(module, &stdout, target::FileType::Assembly);
}

依赖项

~2.9–5.5MB
~120K SLoC