You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.1 KiB
36 lines
1.1 KiB
//! Example of instantiating a wasm module which uses WASI imports.
|
|
|
|
/*
|
|
You can execute this example with:
|
|
cmake examples/
|
|
cargo run --example wasi
|
|
*/
|
|
|
|
use wasi_common::sync::WasiCtxBuilder;
|
|
use wasmtime::*;
|
|
|
|
fn main() -> Result<()> {
|
|
// Define the WASI functions globally on the `Config`.
|
|
let engine = Engine::default();
|
|
let mut linker = Linker::new(&engine);
|
|
wasi_common::sync::add_to_linker(&mut linker, |s| s)?;
|
|
|
|
// Create a WASI context and put it in a Store; all instances in the store
|
|
// share this context. `WasiCtxBuilder` provides a number of ways to
|
|
// configure what the target program will have access to.
|
|
let wasi = WasiCtxBuilder::new()
|
|
.inherit_stdio()
|
|
.inherit_args()?
|
|
.build();
|
|
let mut store = Store::new(&engine, wasi);
|
|
|
|
// Instantiate our module with the imports we've created, and run it.
|
|
let module = Module::from_file(&engine, "target/wasm32-wasi/debug/wasi.wasm")?;
|
|
linker.module(&mut store, "", &module)?;
|
|
linker
|
|
.get_default(&mut store, "")?
|
|
.typed::<(), ()>(&store)?
|
|
.call(&mut store, ())?;
|
|
|
|
Ok(())
|
|
}
|
|
|