|English|
Ultimate WebAssembly 虚拟机
- 获取版本信息
$ uwvm --version- 获取命令列表
$ uwvm --help- 运行虚拟机
$ uwvm <param1> <param2> ... --run <file> <argv1> <argv2> ...- 运行模式
--mode [objdump, int(默认), ucint]
# objdump: 查看符号表
# int: 解释器,wasm数据栈与local数据栈可扩展并带检查;内存操作检查;等等
# ucint: 部分不检查解释器,wasm数据栈大小固定不检查,通过将数据栈的最左右页设置无读写执行权限进行虚拟机安全保护;local数据栈使用线程自身栈;内存操作检查;等等;性能比解释器快1.20倍- 加载 WASM ABI (默认自动检测)
--abi [bare|emscripten|wasi]| 功能 | 参数 |
|---|---|
| MVP | V1.0.0 |
| JS BigInt to Wasm i64 integration | N/A |
| Bulk memory operations | V1.0.1 |
| Extended constant expressions | ❌ |
| Garbage collection | ❌ |
| Multiple memories | --enable-multi-memory |
| Multi-value | V1.0.1 |
| Mutable globals | V1.0.1 |
| Reference types | V1.0.1 |
| Relaxed SIMD | --enable-relaxed-simd |
| Non-trapping float-to-int conversions | V1.0.1 |
| Sign-extension operations | ❌ |
| Fixed-width SIMD | --enable-fixed-width-simd |
| Extended constant expressions | ❌ |
| Tail calls | ❌ |
| Threads and atomics | --enable-thread |
| Exception handling | --enable-exception-handling |
| JS Promise Integration | N/A |
| Memory64 | --enable-memory64 |
| Custom Page Sizes | --enable-custom-page-sizes |
| Type reflection | ❌ |
| Sign-extension operators | V1.0.1 |
| WASI | V1.0.1 |
| WASI Preview 2 | ❌ |
| WASIX | ❌ |
- (x86_64, i386, aarch64, arm)-windows-(gnu, msvc) (支持UCRT和MSVCRT)
- (x86_64, i386, aarch64, arm, loongarch64, riscv64, mips64, powerpc64, etc.)-linux-(gnu, musl, llvm, mlibc, uclibc, avrlibc, etc.)
- (x86_64, i386, aarch64, arm)-linux-android
- (x86_64, i386, aarch64, arm, powerpc, powerpc64, powerpc64le, powerpcspe, riscv64)-freebsd
- unknown-dragonflybsd
- unknown-netbsd
- unknown-openbsd
- unknown-bsd
- unknown-sun
- unknown-apple-darwin
- i386-msdosdjgpp
- wasm32-wasip1, wasm32-wasip2, wasm64-wasip1, wasm64-wasip2, wasm32-wasip1-threads, wasm32-wasip2-threads, wasm64-wasip1-threads, wasm64-wasip2-threads (自举)
- etc.
- 安装 [xmake]
$ sudo apt install xmake$ sudo apt install gcc g++- 开始构建
$ xmake
$ xmake install -o OutputPath - 构建参数
$ xmake f -m [release|releasedbg|debug] -p [windows|mingw|linux|sun|msdosdjgpp|bsd|freebsd|dragonflybsd|netbsd|openbsd|macosx|iphoneos|watchos|wasm-wasip1|wasm-wasip2|cross ..] -a [x86_64|i386|arm|aarch64 ..] --cppstdlib=[default|libstdc++|libc++] ..- 目前只支持 msvc 14.30+ ,gcc 14+ 以及 llvm 18+。
- Windows 上建议使用 llvm 或 msvc,gcc 的 libgcc 的 emults 对 tls 实现有问题导致效率变慢10倍
- Android 上编译请添加参数
--static=n,安卓无法静态链接libc - 若要编译兼容 WIN10 (默认) 以下系统,请添加参数
--min-win32-sys=[WIN10|WINBLUE|WIN8|WIN7|WS08|VISTA|WS03|WINXP|WIN2K]- 对于WIN9X (i386-windows-gnu)
--min-win32-sys=[WINME|WIN98|WIN95]- 使用llvm工具链 (部分使用 gcc 软连接 clang 的平台必须加上这个选项,比如 macos 与 android )
--use-llvm=y|n(default)- 使用ucint (同时会自动禁用c++异常)
--uwvm-enable-ucint=y|n(default)- 编译使用本地指令集
--native=y|n(default)- 选择工具链
--sdk=ToolchainPath- 静态链接
--static=y(default)|n- 设置 sysroot
--sysroot=<path>- 记录每一步消耗的时间
--timer=y|n(default)- 使用mimalloc作为默认分配器
--use-mimalloc=y|n(default)- 禁用c++异常(会导致部分WASI用不了)
--fno-exceptions=y|n(default)- 启用清洁器
--policies=build.sanitizer.address --policies=build.sanitizer.leak