2个不稳定版本
0.1.0 | 2024年6月27日 |
---|---|
0.0.0-保留 | 2024年6月19日 |
#58 in #evm
255KB
5.5K SLoC
revmc
编译器实现抽象于中间表示后端。它性能出色,如下面的我们的criterion基准测试所示,并通过Revm暴露了直观的API。
此仓库托管两个后端实现
- LLVM (
revmc-llvm
):主后端,具备完整的测试覆盖率; - Cranelift (
revmc-cranelift
);由于Cranelift缺少i256
支持,目前无法使用。这可能需要Cranelift的定制分支。
需求
- 最新稳定版Rust
LLVM后端
- Linux或macOS,Windows不支持
- LLVM 17
- 在基于Debian的Linux发行版上:见apt.llvm.org
- 在基于Arch的Linux发行版上:
pacman -S llvm
- 在macOS上:
brew install llvm@17
- 可能需要以下环境变量
prefix=$(llvm-config --prefix) # or #prefix=$(llvm-config-17 --prefix) # on macOS: #prefix=$(brew --prefix llvm@17) export LLVM_SYS_170_PREFIX=$prefix
用法
编译器实现为一个库,可以通过revmc
crate使用。
需要最小运行时来运行AOT编译的字节码。默认运行时实现通过在revmc-builtins
crate中导出的符号提供,必须在最终二进制文件中导出。这可以通过以下构建脚本实现
fn main() {
revmc_build::emit();
}
您可以在示例目录中查看示例用法。
致谢
初始编译器实现受到了paradigmxyz/jitevm
的启发。
许可
根据您的选择,许可协议为Apache License, Version 2.0或MIT许可证。除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,均应双许可,如上所述,无任何附加条款或条件。
依赖项
约15-26MB
约435K SLoC