/src/wasmtime/crates/fuzzing/wasm-spec-interpreter/src/lib.rs
Line | Count | Source |
1 | | //! This library provides a way to interpret Wasm functions in the official Wasm |
2 | | //! specification interpreter, written in OCaml, from Rust. |
3 | | //! |
4 | | //! In order to not break Wasmtime's build, this library will always compile. It |
5 | | //! does depend on certain tools (see `README.md`) that may or may not be |
6 | | //! available in the environment: |
7 | | //! - when the tools are available, we build and link to an OCaml static |
8 | | //! library (see `with_library` module) |
9 | | //! - when the tools are not available, this library will panic at runtime (see |
10 | | //! `without_library` module). |
11 | | |
12 | | /// Enumerate the kinds of Wasm values the OCaml interpreter can handle. |
13 | | #[derive(Clone, Debug, PartialEq)] |
14 | | pub enum SpecValue { |
15 | | I32(i32), |
16 | | I64(i64), |
17 | | F32(i32), |
18 | | F64(i64), |
19 | | V128(Vec<u8>), |
20 | | } |
21 | | |
22 | | /// Represents a WebAssembly export from the OCaml interpreter side. |
23 | | pub enum SpecExport { |
24 | | Global(SpecValue), |
25 | | Memory(Vec<u8>), |
26 | | } |
27 | | |
28 | | /// Represents a WebAssembly instance from the OCaml interpreter side. |
29 | | pub struct SpecInstance { |
30 | | #[cfg(feature = "has-libinterpret")] |
31 | | repr: ocaml_interop::BoxRoot<SpecInstance>, |
32 | | } |
33 | | |
34 | | #[cfg(feature = "has-libinterpret")] |
35 | | mod with_library; |
36 | | #[cfg(feature = "has-libinterpret")] |
37 | | pub use with_library::*; |
38 | | |
39 | | #[cfg(not(feature = "has-libinterpret"))] |
40 | | mod without_library; |
41 | | #[cfg(not(feature = "has-libinterpret"))] |
42 | | pub use without_library::*; |
43 | | |
44 | | // If the user is fuzzing`, we expect the OCaml library to have been built. |
45 | | #[cfg(all(fuzzing, not(feature = "has-libinterpret")))] |
46 | | compile_error!("The OCaml library was not built."); |
47 | | |
48 | | /// Check if the OCaml spec interpreter bindings will work. |
49 | 0 | pub fn support_compiled_in() -> bool { |
50 | 0 | cfg!(feature = "has-libinterpret") |
51 | 0 | } |