2.3 KiB
WASI SDK Toolchain Pin
UCE treats WASI SDK as a deployment/runtime dependency, not just a developer build tool.
The runtime compiles .uce units to wasm on demand during requests and during the proactive compiler scan. That means every deployment host must have the same compiler/linker toolchain available, and the generated .wasm/.cwasm artifacts are tied to that toolchain version and UCE unit ABI version.
Current pin
- Upstream: https://github.com/WebAssembly/wasi-sdk
- Release tag:
wasi-sdk-33 - Version:
33.0 - Linux x86_64 archive:
wasi-sdk-33.0-x86_64-linux.tar.gz - URL:
https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-33/wasi-sdk-33.0-x86_64-linux.tar.gz - SHA256:
0ba8b5bfaeb2adf3f29bab5841d76cf5318ab8e1642ea195f88baba1abd47bce - Expected install symlink:
/opt/wasi-sdk - Expected resolved path:
/opt/wasi-sdk-33.0-x86_64-linux
Install or verify with:
scripts/install_wasi_sdk.sh
scripts/install_wasi_sdk.sh --check-only
Required tools
UCE expects these executables on each deployment host:
/opt/wasi-sdk/bin/clang++
/opt/wasi-sdk/bin/wasm-ld
/opt/wasi-sdk/bin/llvm-objcopy
/opt/wasi-sdk/bin/llvm-nm
llvm-nm is used by scripts/check_unit_wasm.py, which is called by scripts/compile_wasm_unit after linking each unit.
Upgrade policy
Treat WASI SDK upgrades like runtime dependency upgrades:
- Update
scripts/install_wasi_sdk.shversion, URL, and SHA256. - Record the new release and checksum here.
- Rebuild
bin/wasm/core.wasmwithscripts/build_core_wasm.sh. - Rebuild the native runtime with
scripts/build_linux.sh. - Clear or invalidate stale unit wasm artifacts by bumping
UCE_UNIT_ABI_VERSIONwhen required, or by removing affected generated artifacts underBIN_DIRECTORY. - Run the full CLI suite including wasm kill tests:
scripts/run_cli_tests.sh --include-wasm-kill
Known footgun
WASI SDK 33's llvm-nm was observed to crash on a degenerate but valid unit module with no exported handlers. scripts/check_unit_wasm.py treats that specific validator-tool crash as a skipped allocator-definition scan while still rejecting forbidden allocator exports and other ABI violations. This is one reason the toolchain is pinned instead of relying on whatever /opt/wasi-sdk happens to contain.