feat(instrument): Add --stub-wasi flag to replace WASI imports with stubs #104
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
When using
ic-wasm instrumenton a canister WASM compiled with Emscripten, the resulting instrumented WASM contains WASI imports that IC rejects at install time:Use Case
For languages that compile through Emscripten/C (e.g., Idris2), WASI imports are introduced by the toolchain, not by user code. This flag provides a practical workaround until native WASM backends become available.
Solution
Add
--stub-wasiflag to theinstrumentsubcommand that replaces WASI imports with local stub functions:fd_closefd_writefd_readfd_seekenviron_sizes_getenviron_getproc_exitUsage
This is a workaround for edge cases (Emscripten, wasi-sdk).
The recommended approach is to build without WASI imports:
wasm32-unknown-unknowntarget with ic-cdkStub functions return success (0), which may hide real failures if your code actually depends on WASI functionality.
Test plan
stub_wasitest that verifies WASI imports are removedcargo clippyandcargo fmtpass🤖 Generated with Claude Code