mod caller;
mod store;
mod utils;
mod module;
mod instance;
mod wasi;
mod function;
mod imports;
mod memory;
use store::*;
use caller::*;
use module::*;
use instance::*;
use wasi::*;
use function::*;
use memory::*;
use imports::*;
use utils::*;
use marine_wasm_backend_traits::prelude::*;
use wasmtime_wasi::WasiCtx;
const MB: usize = 1024 * 1024;
#[derive(Clone, Default)]
pub struct WasmtimeWasmBackend {
engine: wasmtime::Engine,
}
impl WasmBackend for WasmtimeWasmBackend {
type Store = WasmtimeStore;
type Module = WasmtimeModule;
type Imports = WasmtimeImports;
type Instance = WasmtimeInstance;
type Context<'c> = WasmtimeContext<'c>;
type ContextMut<'c> = WasmtimeContextMut<'c>;
type ImportCallContext<'c> = WasmtimeImportCallContext<'c>;
type HostFunction = WasmtimeFunction;
type ExportFunction = WasmtimeFunction;
type Memory = WasmtimeMemory;
type MemoryView = WasmtimeMemory;
type Wasi = WasmtimeWasi;
fn new() -> WasmBackendResult<Self> {
let mut config = wasmtime::Config::new();
config
.debug_info(false)
.wasm_backtrace_details(wasmtime::WasmBacktraceDetails::Enable)
.max_wasm_stack(2 * MB);
let engine =
wasmtime::Engine::new(&config).map_err(WasmBackendError::InitializationError)?;
Ok(Self { engine })
}
}
#[derive(Default)]
pub struct StoreState {
wasi: Vec<WasiCtx>, limits: MemoryLimiter,
}