k82cn added the bug label to Issue #7717.
k82cn opened issue #7717:
Test Case
WIT:
package component:adder; /// An example world for the component to target. world example { export add: func(x: s32, y: s32) -> s32; }
WASM:
use anyhow::Context; use std::path::PathBuf; use wasmtime::component::*; use wasmtime::{Config, Engine, Store}; use wasmtime_wasi::preview2::{self, command, Table, WasiCtx, WasiCtxBuilder, WasiView}; wasmtime::component::bindgen!({ path: "adder.wit", world: "example", async: false, }); pub fn add(x: i32, y: i32) -> wasmtime::Result<i32> { let mut config = Config::default(); config.wasm_component_model(true); config.async_support(false); let engine = Engine::new(&config)?; let mut linker = Linker::new(&engine); // Add the command world (aka WASI CLI) to the linker command::add_to_linker(&mut linker).context("Failed to link command world")?; // environment::add_to_linker(&mut linker, |x| x)?; let wasi_view = ServerWasiView::new(); let mut store = Store::new(&engine, wasi_view); let component = Component::from_file(&engine, "adder.wasm").context("Component file not found")?; let (instance, _) = Example::instantiate(&mut store, &component, &linker) .context("Failed to instantiate the example world")?; instance .call_add(&mut store, x, y) .context("Failed to call add function") } struct ServerWasiView { table: Table, ctx: WasiCtx, } impl ServerWasiView { fn new() -> Self { let table = Table::new(); let ctx = WasiCtxBuilder::new().inherit_stdio().build(); Self { table, ctx } } } impl WasiView for ServerWasiView { fn table(&self) -> &Table { &self.table } fn table_mut(&mut self) -> &mut Table { &mut self.table } fn ctx(&self) -> &WasiCtx { &self.ctx } fn ctx_mut(&mut self) -> &mut WasiCtx { &mut self.ctx } } #[tokio::main] async fn main() -> wasmtime::Result<()> { let r = add(1, 2)?; println!("{}", r); Ok(()) }
Steps to Reproduce
- build wasm
cargo component build
- build main/engine
cargo build
- run engine:
./target/debug/host-add
Expected Results
The wasm main/engine exectue as async example.
Actual Results
$ ./target/debug/host-add thread 'main' panicked at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/wasmtime-15.0.1/src/component/linker.rs:320:9: cannot use `func_wrap_async` without enabling async support in the config stack backtrace: 0: rust_begin_unwind at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/panicking.rs:597:5 1: core::panicking::panic_fmt at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/core/src/panicking.rs:72:14 2: wasmtime::component::linker::LinkerInstance<T>::func_wrap_async at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/wasmtime-15.0.1/src/component/linker.rs:320:9 3: wasmtime_wasi::preview2::bindings::wasi::filesystem::types::add_to_linker at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/wasmtime-wasi-15.0.1/src/preview2/mod.rs:94:5 4: wasmtime_wasi::preview2::command::add_to_linker at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/wasmtime-wasi-15.0.1/src/preview2/command.rs:32:5 5: host_add::add at ./src/main.rs:22:5 6: host_add::main::{{closure}} at ./src/main.rs:73:13 7: tokio::runtime::park::CachedParkThread::block_on::{{closure}} at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/park.rs:282:63 8: tokio::runtime::coop::with_budget at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/coop.rs:107:5 9: tokio::runtime::coop::budget at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/coop.rs:73:5 10: tokio::runtime::park::CachedParkThread::block_on at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/park.rs:282:31 11: tokio::runtime::context::blocking::BlockingRegionGuard::block_on at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/context/blocking.rs:66:9 12: tokio::runtime::scheduler::multi_thread::MultiThread::block_on::{{closure}} at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/scheduler/multi_thread/mod.rs:87:13 13: tokio::runtime::context::runtime::enter_runtime at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/context/runtime.rs:65:16 14: tokio::runtime::scheduler::multi_thread::MultiThread::block_on at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/scheduler/multi_thread/mod.rs:86:9 15: tokio::runtime::runtime::Runtime::block_on at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/runtime.rs:350:45 16: host_add::main at ./src/main.rs:75:5 17: core::ops::function::FnOnce::call_once at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/core/src/ops/function.rs:250:5 note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
Versions and Environment
Wasmtime version or commit: wasmtime: 15, rust/cargo: 1.74.1
Operating system: ubuntu 22.04
Architecture: x86
StaffEngineer commented on issue #7717:
You need to call sync version of add to linker:
sync::add_to_linker(&mut linker)?;
.
StaffEngineer edited a comment on issue #7717:
You need to call add to linker from sync:
sync::add_to_linker(&mut linker)?;
.
alexcrichton closed issue #7717:
Test Case
WIT:
package component:adder; /// An example world for the component to target. world example { export add: func(x: s32, y: s32) -> s32; }
WASM:
use anyhow::Context; use std::path::PathBuf; use wasmtime::component::*; use wasmtime::{Config, Engine, Store}; use wasmtime_wasi::preview2::{self, command, Table, WasiCtx, WasiCtxBuilder, WasiView}; wasmtime::component::bindgen!({ path: "adder.wit", world: "example", async: false, }); pub fn add(x: i32, y: i32) -> wasmtime::Result<i32> { let mut config = Config::default(); config.wasm_component_model(true); config.async_support(false); let engine = Engine::new(&config)?; let mut linker = Linker::new(&engine); // Add the command world (aka WASI CLI) to the linker command::add_to_linker(&mut linker).context("Failed to link command world")?; // environment::add_to_linker(&mut linker, |x| x)?; let wasi_view = ServerWasiView::new(); let mut store = Store::new(&engine, wasi_view); let component = Component::from_file(&engine, "adder.wasm").context("Component file not found")?; let (instance, _) = Example::instantiate(&mut store, &component, &linker) .context("Failed to instantiate the example world")?; instance .call_add(&mut store, x, y) .context("Failed to call add function") } struct ServerWasiView { table: Table, ctx: WasiCtx, } impl ServerWasiView { fn new() -> Self { let table = Table::new(); let ctx = WasiCtxBuilder::new().inherit_stdio().build(); Self { table, ctx } } } impl WasiView for ServerWasiView { fn table(&self) -> &Table { &self.table } fn table_mut(&mut self) -> &mut Table { &mut self.table } fn ctx(&self) -> &WasiCtx { &self.ctx } fn ctx_mut(&mut self) -> &mut WasiCtx { &mut self.ctx } } #[tokio::main] async fn main() -> wasmtime::Result<()> { let r = add(1, 2)?; println!("{}", r); Ok(()) }
Steps to Reproduce
- build wasm
cargo component build
- build main/engine
cargo build
- run engine:
./target/debug/host-add
Expected Results
The wasm main/engine exectue as async example.
Actual Results
$ ./target/debug/host-add thread 'main' panicked at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/wasmtime-15.0.1/src/component/linker.rs:320:9: cannot use `func_wrap_async` without enabling async support in the config stack backtrace: 0: rust_begin_unwind at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/panicking.rs:597:5 1: core::panicking::panic_fmt at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/core/src/panicking.rs:72:14 2: wasmtime::component::linker::LinkerInstance<T>::func_wrap_async at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/wasmtime-15.0.1/src/component/linker.rs:320:9 3: wasmtime_wasi::preview2::bindings::wasi::filesystem::types::add_to_linker at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/wasmtime-wasi-15.0.1/src/preview2/mod.rs:94:5 4: wasmtime_wasi::preview2::command::add_to_linker at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/wasmtime-wasi-15.0.1/src/preview2/command.rs:32:5 5: host_add::add at ./src/main.rs:22:5 6: host_add::main::{{closure}} at ./src/main.rs:73:13 7: tokio::runtime::park::CachedParkThread::block_on::{{closure}} at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/park.rs:282:63 8: tokio::runtime::coop::with_budget at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/coop.rs:107:5 9: tokio::runtime::coop::budget at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/coop.rs:73:5 10: tokio::runtime::park::CachedParkThread::block_on at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/park.rs:282:31 11: tokio::runtime::context::blocking::BlockingRegionGuard::block_on at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/context/blocking.rs:66:9 12: tokio::runtime::scheduler::multi_thread::MultiThread::block_on::{{closure}} at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/scheduler/multi_thread/mod.rs:87:13 13: tokio::runtime::context::runtime::enter_runtime at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/context/runtime.rs:65:16 14: tokio::runtime::scheduler::multi_thread::MultiThread::block_on at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/scheduler/multi_thread/mod.rs:86:9 15: tokio::runtime::runtime::Runtime::block_on at /hpc/mtr_scrap/users/klausm/cargo_home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.35.1/src/runtime/runtime.rs:350:45 16: host_add::main at ./src/main.rs:75:5 17: core::ops::function::FnOnce::call_once at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/core/src/ops/function.rs:250:5 note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
Versions and Environment
Wasmtime version or commit: wasmtime: 15, rust/cargo: 1.74.1
Operating system: ubuntu 22.04
Architecture: x86
alexcrichton commented on issue #7717:
I believe this is answered by @StaffEngineer, so I'm going to close this. Thanks for the report though!
k82cn commented on issue #7717:
yes,
sync::add_to_linker(&mut linker)?;
works.
Last updated: Dec 23 2024 at 12:05 UTC