Add a crate to interface with the WebAssembly spec interpreter
The WebAssembly spec interpreter is written in OCaml and the new crate uses `ocaml-interop` along with a small OCaml wrapper to interpret Wasm modules in-process. The build process for this crate is currently Linux-specific: it requires several OCaml packages (e.g. `apt install -y ocaml-nox ocamlbuild`) as well as `make`, `cp`, and `ar`.
This commit is contained in:
33
crates/fuzzing/wasm-spec-interpreter/ocaml/Makefile
Normal file
33
crates/fuzzing/wasm-spec-interpreter/ocaml/Makefile
Normal file
@@ -0,0 +1,33 @@
|
||||
# Build a library allowing FFI access to the Wasm spec interpreter.
|
||||
|
||||
OCAML_FLAGS := -g -keep-locs -runtime-variant _pic
|
||||
# By default, we build in a sub-directory but we can override this with `make
|
||||
# BUILD_DIR=...`.
|
||||
BUILD_DIR := _build
|
||||
# Currently the WebAssembly spec interpreter is buried in a Git submodule as is
|
||||
# its build directory, `_build`. Cargo may not like that files are changing
|
||||
# outside of `target` (TODO).
|
||||
SPEC_DIR := spec/interpreter
|
||||
SPEC_BUILD_DIR := $(SPEC_DIR)/_build
|
||||
SPEC_LIB := $(SPEC_BUILD_DIR)/wasm.cmxa
|
||||
|
||||
|
||||
# Build and package the static library, `libinterpret.a`.
|
||||
$(BUILD_DIR)/libinterpret.a: $(BUILD_DIR)/interpret.lib.o
|
||||
ar qs $@ $^
|
||||
$(BUILD_DIR)/interpret.lib.o: $(SPEC_LIB) $(BUILD_DIR)/interpret.cmx
|
||||
ocamlopt $(OCAML_FLAGS) -I $(SPEC_BUILD_DIR) -o $@ -output-complete-obj $^
|
||||
$(BUILD_DIR)/interpret.cmx: interpret.ml $(SPEC_BUILD_DIR) $(BUILD_DIR)
|
||||
ocamlopt $(OCAML_FLAGS) -I $(SPEC_BUILD_DIR) -o $@ -c -impl $<
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $@
|
||||
|
||||
|
||||
# We also need to be able to build the spec's `wasm.cmxa`.
|
||||
$(SPEC_LIB):
|
||||
make -C $(SPEC_DIR) libopt
|
||||
|
||||
|
||||
clean:
|
||||
rm -rf $(BUILD_DIR)
|
||||
make -C $(SPEC_DIR) clean
|
||||
Reference in New Issue
Block a user