Skip to content

WebAssembly AOT compiler with cross-CPU checkpoint/restore support

License

Notifications You must be signed in to change notification settings

tamaroning/wanco

Repository files navigation

wanco 🐶

plot

wanco is a WebAssembly AOT compiler which supports cross-platform (CPU and OS) Checkpoint/Restore functionalities. wanco is forked from Wasker.

See examples for quick start.

Build

Prerequisites:

  • POSIX compliant OS (Linux, TODO: support macOS)
  • CMake and C++ compiler
  • Rust and Cargo
  • LLVM 17
    • Easiest way to install LLVM 17 is to use llvm.sh (Ubuntu/Debian)
    • bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
    • chmod +x llvm.sh
    • ./llvm.sh 17
  • protocol buffer
    • Run apt install libprotobuf-dev protobuf-compiler

First clone the project:

$ git clone git@github.com:tamaroning/wanco.git
$ cd wanco

This project includes C++ projects and Rust projects. To build the entire project, run the following commands.

$ mkdir build
$ cmake .. -DCMAKE_BUILD_TYPE=Release

To install the compilers and runtime libraries, run the following commands:

$ sudo make install

Run

After building the project, you will find the wanco binary in the top of build directory.

Before compiling wasm modules, make sure to add clang to the PATH environment variable or to specify the path to clang or clang++ by using the --clang-path option. (clang/clang++ version 17 or later is required.)

If --clang-path is not set, clang-17 is used by default.

To compile the hello-world example, run:

$ wanco examples/hello.wat -o hello
$ ./hello
Hello World!

To show the help, run:

$ wanco --help

For debugging, run the compiler with RUST_LOG="debug" wanco <ARGS>.

Enable Checkpoint/Restore functionalities

Compile a WebAssembly file with C/R enabled and run it:

$ wanco --enable-cr --optimize-cr demo/fib.wat
$ a.out

While the process is running, you can trigger checkpoint by sending SIGUSR1 signal from another teminal:

(The running process is automatically terminated and the snapshot file is created.)

$ pkill -10 a.out

To restore the execution, run:

$ ./a.out --restore checkpoint.json

Note: Snapshot files are named checkpoint.json or checkpoint.pb (binary format generated with protobuf).

Compile and assemble only

If you do not want a generated object file to be linked with runtime libraries, specify the -c option when running the compiler: LLVM assembly file (.ll) will be generated.

$ wanco examples/hello.wat -c -o hello.ll

After that, you can link it with the runtime library together by using clang

$ clang -flto -no-pie hello.ll /usr/local/lib/libwanco_rt.a /usr/local/lib/libwanco_wasi.a -o hello

Test

To test the compiler, run:

$ cargo test

Devcontainer

docker buildx build .

LICENSE

  • benchmark/: See LICENSE files in each directory
  • others: MIT (See LICENSE)

About

WebAssembly AOT compiler with cross-CPU checkpoint/restore support

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published