* 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
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) libgmp, for the OCamlzarithpackagegitis used bybuild.rsto retrieve the repository containing the Wasm spec interpreter; it is safe to completely removeocaml/specto 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