This commit updates the build script which clones the spec interpreter for fuzzing to specifically pin at a hardcoded revision. This is intended at improving reproducibility if we hit any issues while fuzzing to ensure that the same wasmtime revision is always using the same spec interpreter revision.
wasm-spec-interpreter
This project shows how to use ocaml-interop to call into the Wasm spec
interpreter. There are several steps to making this work:
- building the OCaml Wasm spec interpreter as a static library
- building a Rust-to-OCaml FFI bridge using
ocaml-interopand a custom OCaml wrapper - linking both things into a Rust crate
Dependencies
This crate only builds in an environment with:
make(the Wasm spec interpreter uses aMakefile)ocamlopt,ocamlbuild(available with, e.g.,dnf install ocaml)- Linux tools (e.g.
ar); currently it is easiest to build the static libraries in a single environment but this could be fixed in the future (TODO)
Remember to retrieve the Wasm spec submodule:
git clone ... --recursive
Build
RUSTFLAGS=--cfg=fuzzing cargo build
Use FFI_LIB_DIR=path/to/lib/... to specify a different location for the static
library (this is mainly for debugging). If the --cfg=fuzzing configuration is
not provided, this crate will build successfully but fail at runtime.
Test
RUSTFLAGS=--cfg=fuzzing cargo test