Git Product home page Git Product logo

ssvm's Introduction

Introduction

SSVM is a high performance and enterprise-ready WebAssembly (WASM) Virtual Machine for cloud, AI, and Blockchain applications. Its use cases include the following.

build Total alerts Language grade: C/C++ codecov

Getting Started

Get Source Code

$ git clone [email protected]:second-state/SSVM.git
$ cd SSVM
$ git checkout 0.6.7

Prepare the environment

Use our docker image

Our docker image use ubuntu 20.04 as the base.

$ docker pull secondstate/ssvm

Or setup the environment manually

# Tools and libraries
$ sudo apt install -y \
	software-properties-common \
	cmake \
	libboost-all-dev

# And you will need to install llvm for ssvm-aot tools
$ sudo apt install -y \
	llvm-dev \
	liblld-10-dev

# SSVM supports both clang++ and g++ compilers
# You can choose one of them for building this project
$ sudo apt install -y gcc g++
$ sudo apt install -y clang

Build SSVM

SSVM provides various tools for enabling different runtime environments for optimal performance. After the build is finished, you can find there are several ssvm related tools:

  1. ssvm is for general wasm runtime. Interpreter mode.
  2. ssvm-qitc is for AI application, supporting ONNC runtime for AI model in ONNX format.
  3. ssvm-aot is for general wasm runtime. AOT compilation mode.
    • ssvmc compiles a general wasm runtime to so file.
    • ssvmr execute a general wasm runtime or so file in WASI environment.
    • To disable building the ahead of time compilation runtime, you can set the CMake option SSVM_DISABLE_AOT_RUNTIME to OFF.
# After pulling our ssvm docker image
$ docker run -it --rm \
    -v <path/to/your/ssvm/source/folder>:/root/ssvm \
    secondstate/ssvm:latest
(docker)$ cd /root/ssvm
(docker)$ mkdir -p build && cd build
(docker)$ cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON .. && make -j

SSVM requires libLLVM-10 and GLIBCXX_3.4.26 or after. If users want to build and run ssvm interpreter tool without these dependencies, they can set the CMake option SSVM_DISABLE_AOT_RUNTIME and STATIC_BUILD to ON.

$ cmake -DCMAKE_BUILD_TYPE=Release -DSSVM_DISABLE_AOT_RUNTIME=ON -DSTATIC_BUILD=ON ..

Run built-in tests

The following built-in tests are only available when the build flag BUILD_TESTS sets to ON.

Users can use these tests to verify the correctness of SSVM binaries.

$ cd <path/to/ssvm/build_folder>
$ ctest

Run ssvm (SSVM with general wasm runtime)

To run SSVM with general wasm runtime, users will need to provide the following parameters:

  1. (Optional) Reactor mode: use --reactor to enable reactor mode.
    • SSVM will execute the function which name should be given in ARG[0].
    • If there's exported function which names _initialize, the function will be executed with the empty parameter at first.
  2. (Optional) Binding directories into WASI virtual filesystem.
    • Each directory can be specified as --dir host_path:guest_path.
  3. (Optional) Environ variables.
    • Each variable can be specified as --env NAME=VALUE.
  4. Wasm file(/path/to/wasm/file).
  5. (Optional) Arguments.
    • In reactor mode, the first argument will be the function name, and the arguments after ARG[0] will be parameters of wasm function ARG[0].
    • In command mode, the arguments will be parameters of function _start.

Example: Fibonacci

# cd <path/to/ssvm/build_folder>
$ cd tools/ssvm
# ./ssvm [--reactor] [--dir PREOPEN_DIRS ...] [--env ENVS ...] [--] WASM_FILE [ARG ...]
$ ./ssvm --reactor examples/fibonacci.wasm fib 10
89

When wrong number of parameter given, the following error message is printed.

$ ./ssvm --reactor examples/fibonacci.wasm fib 10 10
2020-08-21 06:30:37,304 ERROR [default] execution failed: function signature mismatch, Code: 0x83
2020-08-21 06:30:37,304 ERROR [default]     Mismatched function type. Expected: params{i32} returns{i32} , Got: params{i32 , i32} returns{i32}
2020-08-21 06:30:37,304 ERROR [default]     When executing function name: "fib"

When calling unknown exported function, the following error message is printed.

$ ./ssvm --reactor examples/fibonacci.wasm fib2 10
2020-08-21 06:30:56,981 ERROR [default] ssvm runtime failed: wasm function not found, Code: 0x04
2020-08-21 06:30:56,981 ERROR [default]     When executing function name: "fib2"

Example: Factorial

# ./ssvm [--reactor] [--dir PREOPEN_DIRS ...] [--env ENVS ...] [--] WASM_FILE [ARG ...]
$ ./ssvm --reactor examples/factorial.wasm fac 5
120

Related tools

SSVM-EVMC

SSVM-EVMC provides support for Ewasm runtime which is compatible with EVMC.

This project provides a shared library that can initialize and execute by the EVMC interface.

SSVM nodejs addon

SSVM-napi provides support for accessing SSVM as a Node.js addon.

It allows Node.js applications to call WebAssembly functions written in Rust or other high-performance languages.

Why do you want to run WebAssembly on the server-side?

The SSVM addon could interact with the wasm files generated by the ssvmup compiler tool.

DevChain

The Second State DevChain features a powerful and easy-to-use virtual machine that can quickly get you started with the smart contract and DApp development.

SSVM-evmc is integrated into our DevChain. Click here to learn how to run an ewasm smart contract on a real blockchain.

Customized Host Functions

Design document shows how to register customized host functions into SSVM and execute with wasm files.

ssvm's People

Contributors

q82419 avatar hydai avatar ibmibmibm avatar lfswang avatar dm4 avatar luishsu avatar alabulei1 avatar juntao avatar tpmccallum avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.