Skip to content
This repository was archived by the owner on Apr 2, 2025. It is now read-only.

Latest commit

 

History

History
178 lines (169 loc) · 9.99 KB

File metadata and controls

178 lines (169 loc) · 9.99 KB
logo

Ultimate WebAssembly Virtual Machine

github-ci License QQ Discord KOOK

|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.

如何构建

  1. 安装 [xmake]
$ sudo apt install xmake
  1. 安装 [gcc13+] 或者 [llvm17+]
$ sudo apt install gcc g++
  1. 开始构建
$ xmake 
$ xmake install -o OutputPath 
  1. 构建参数
$ 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