Files
wasmtime/crates/fuzzing/wasm-spec-interpreter
Alex Crichton 7b311004b5 Leverage Cargo's workspace inheritance feature (#4905)
* Leverage Cargo's workspace inheritance feature

This commit is an attempt to reduce the complexity of the Cargo
manifests in this repository with Cargo's workspace-inheritance feature
becoming stable in Rust 1.64.0. This feature allows specifying fields in
the root workspace `Cargo.toml` which are then reused throughout the
workspace. For example this PR shares definitions such as:

* All of the Wasmtime-family of crates now use `version.workspace =
  true` to have a single location which defines the version number.
* All crates use `edition.workspace = true` to have one default edition
  for the entire workspace.
* Common dependencies are listed in `[workspace.dependencies]` to avoid
  typing the same version number in a lot of different places (e.g. the
  `wasmparser = "0.89.0"` is now in just one spot.

Currently the workspace-inheritance feature doesn't allow having two
different versions to inherit, so all of the Cranelift-family of crates
still manually specify their version. The inter-crate dependencies,
however, are shared amongst the root workspace.

This feature can be seen as a method of "preprocessing" of sorts for
Cargo manifests. This will help us develop Wasmtime but shouldn't have
any actual impact on the published artifacts -- everything's dependency
lists are still the same.

* Fix wasi-crypto tests
2022-09-26 11:30:01 -05:00
..

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-interop and 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 a Makefile)
  • 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)
  • libgmp, for the OCaml zarith package
  • git is used by build.rs to retrieve the repository containing the Wasm spec interpreter; it is safe to completely remove ocaml/spec to get a new copy

Build

cargo build --features build-libinterpret

Use FFI_LIB_DIR=path/to/lib/... to specify a different location for the static library (this is mainly for debugging). If the build-libinterpret feature is not provided, this crate will build successfully but fail at runtime.

Test

cargo test --features build-libinterpret