revmc

Crates.iorevmc
lib.rsrevmc
version0.1.0
sourcesrc
created_at2024-06-19 18:11:21.65601
updated_at2024-06-27 16:15:07.74638
descriptionEVM bytecode compiler
homepagehttps://github.com/danipopes/revmc/tree/main/crates/revmc
repositoryhttps://github.com/danipopes/cranelift-jit-evm
max_upload_size
id1277260
size136,582
Matthias Seitz (mattsse)

documentation

README

revmc

Experimental JIT and AOT compiler for the Ethereum Virtual Machine.

The compiler implementation is abstracted over an intermediate representation backend. It performs very well, as demonstrated below from our criterion benchmarks, and exposes an intuitive API via Revm.

image

This repository hosts two backend implementations:

  • LLVM (revmc-llvm): main backend with full test coverage;
  • Cranelift (revmc-cranelift); currently not functional due to missing i256 support in Cranelift. This will likely require a custom fork of Cranelift.

Requirements

  • Latest stable Rust version

LLVM backend

  • Linux or macOS, Windows is not supported
  • LLVM 17
    • On Debian-based Linux distros: see apt.llvm.org
    • On Arch-based Linux distros: pacman -S llvm
    • On macOS: brew install llvm@17
    • The following environment variables may be required:
      prefix=$(llvm-config --prefix)
      # or
      #prefix=$(llvm-config-17 --prefix)
      # on macOS:
      #prefix=$(brew --prefix llvm@17)
      export LLVM_SYS_170_PREFIX=$prefix
      

Usage

The compiler is implemented as a library and can be used as such through the revmc crate.

A minimal runtime is required to run AOT-compiled bytecodes. A default runtime implementation is provided through symbols exported in the revmc-builtins crate and must be exported in the final binary. This can be achieved with the following build script:

fn main() {
    revmc_build::emit();
}

You can check out the examples directory for example usage.

Credits

The initial compiler implementation was inspired by paradigmxyz/jitevm.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in these crates by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Commit count: 148

cargo fmt