Skip to content

UltiELF/uwvm

Repository files navigation

logo

Ultimate WebAssembly Virtual Machine

github-ci License QQ Discord KOOK

|简体中文|

Contact Us

Introduce

Ultimate WebAssembly Virtual Machine

Commandline interface

  • Get version information
$ uwvm --version
  • Get a list of commands
$ uwvm --help
  • Running uwvm virtual machine
$ uwvm <param1> <param2> ... --run <file> <argv1> <argv2> ...
  • Running mode
--mode [objdump(default), int]
  • Loading WASM ABI (default auto detection)
--abi [bare|emscripten|wasip1|wasip2]

Features

Feature Extensions

Standardized features parameters
JS BigInt to Wasm i64 integration N/A
Bulk memory operations
Extended constant expressions
Garbage collection
Multiple memories --enable-multi-memory
Multi-value --enable-multi-value
Mutable globals --enable-mutable-globals
Reference types --enable-reference-types
Relaxed SIMD --enable-relaxed-simd
Non-trapping float-to-int conversions
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

Supports multiple platforms

  • (x86_64, i386, aarch64, arm)-windows-(gnu, msvc) (support UCRT and MSVCRT)
  • (x86_64, i386, aarch64, arm, loongarch64, riscv64, mips64, powerpc64, etc.)-linux-(gnu, musl, llvm, mlibc, uclibc, avrlibc, etc.)
  • (x86_64, i386, aarch64, arm, powerpc, powerpc64, powerpc64le, powerpcspe, riscv64)-freebsd
  • unknown-dragonflybsd
  • unknown-netbsd
  • unknown-openbsd
  • unknown-bsd
  • unknown-sun
  • unknwon-apple-darwin
  • i386-msdosdjgpp
  • wasm32-wasip1, wasm32-wasip2, wasm64-wasip1, wasm64-wasip2 (bootstrap)
  • etc.

How to build

  1. Install [xmake]
  2. Install [gcc14+] or [llvm18+]
  3. Build
$ xmake 
$ xmake install -o OutputPath 
  1. Build parameters
$ xmake f -m [release|releasedbg|debug] -p [windows|mingw|macosx|linux|iphoneos ..] -a [x86_64|i386|arm|aarch64 ..] --cppstdlib=[default|libstdc++|libc++] ..
  • Currently, only MSVC 14.30+ GCC 14+ and LLVM 18+ are supported.
  • To compile systems compatible with Win10 (default) or below, please add parameters
--min-win32-sys=[WIN10|WINBLUE|WIN8|WIN7|WS08|VISTA|WS03|WINXP|WIN2K] 
  • For Windows 9x (i386-windows-gnu)
--min-win32-sys=[WINME|WIN98|WIN95]
  • Using the llvm toolchain (This option must be added to some platforms that use gcc soft connection to clang, such as macos and android)
--use-llvm=y|n(default)
  • Compile using local instruction sets
--native=y|n(default)
  • Select toolchain
--sdk=ToolchainPath
  • Static linking
--static=y(defalut)|n
  • Set sysroot
--sysroot=<path>
  • Record the time of each step
--timer=y|n(default)
  • Use mimalloc as the default allocator
--use-mimalloc=y|n(default)
  • Enable Sanitizer
--policies=build.sanitizer.address --policies=build.sanitizer.leak