Build WasmEdge from source

Please follow this guide to build and test WasmEdge from source code.

The following guide is based on Linux distributions. For MacOS, please refer to Build for macOS. For Windows, please refer to Build for Windows

If you just want the latest builds from the HEAD of the master branch, and do not want to build it yourself, you can download the release package directly from our Github Action's CI artifact. Here is an example.

Get Source Code

$ git clone https://github.com/WasmEdge/WasmEdge.git
$ cd WasmEdge

Check Dependencies

WasmEdge will try to use the latest LLVM release to create our nightly build. If you want to build from source, you may need to install these dependencies by yourself or using our docker images which provides several Linux distribution support.

  • LLVM 12.0.0 (>= 10.0.0)
  • GCC 11.1.0 (>= 9.4.0)

Prepare the Environment

Docker Images

Repository on dockerhub wasmedge/wasmedge

You can use the following commands to get our latest docker image:

$ docker pull wasmedge/wasmedge # Equals to wasmedge/wasmedge:latest

Available Tags

tag namearchbased operating systemLLVM versionENVscompatibilitycomments
latestx86_64Ubuntu 20.04 LTS12.0.0CC=clang, CXX=clang++Ubuntu 20.04+This is for CI, will always use the latest Ubuntu release
ubuntu-build-gccx86_64Ubuntu 20.04 LTS12.0.0CC=gcc, CXX=g++Ubuntu 20.04+This is for CI, will always use the latest Ubuntu release
ubuntu-build-clangx86_64Ubuntu 20.04 LTS12.0.0CC=clang, CXX=clang++Ubuntu 20.04+This is for CI, will always use the latest Ubuntu release
ubuntu2004_x86_64x86_64Ubuntu 20.04 LTS10.0.0CC=gcc, CXX=g++Ubuntu 20.04+This is for developers who familiar with Ubuntu 20.04 LTS release
ubuntu2104_armv7larmhfUbuntu 21.0412.0.0CC=gcc, CXX=g++Ubuntu 21.04+This is for armhf release
manylinux2014_x86_64x86_64CentOS 7, 7.9.200912.0.0CC=gcc, CXX=g++Ubuntu 16.04+, CentOS 7+This is for developers who familiar with CentOS on x86_64 architecture
manylinux2014_aarch64aarch64CentOS 7, 7.9.200912.0.0CC=gcc, CXX=g++Ubuntu 16.04+, CentOS 7+This is for developers who familiar with CentOS on aarch64 architecture
manylinux2010_x86_64x86_64CentOS 6, 6.1012.0.0CC=gcc, CXX=g++Ubuntu 14.04+, CentOS 6+This is for developers who familiar with legacy system on x86_64 architecture, EOL
manylinux1_x86_64x86_64CentOS 5, 5.1112.0.0CC=gcc, CXX=g++Ubuntu 14.04+, CentOS 5+This is for developers who familiar with legacy system on x86_64 architecture, EOL

Install dependencies on Ubuntu 20.04 manually

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

# And you will need to install llvm for wasmedgec tool
$ sudo apt install -y \
	llvm-12-dev \
	liblld-12-dev

# WasmEdge supports both clang++ and g++ compilers
# You can choose one of them for building this project
# If you prefer GCC
$ sudo apt install -y gcc g++
# Else you can choose clang
$ sudo apt install -y clang-12

Support for legacy operating systems

Our development environment requires libLLVM-12 and >=GLIBCXX_3.4.33.

If users are using the older operating system than Ubuntu 20.04, please use our special docker image to build WasmEdge. If you are looking for the pre-built binaries for the older operating system, we also provide several pre-built binaries based on manylinux* distribution.

Portable Linux Built Distributions TagsBase ImageProvided RequirementsDocker Image
manylinux1CentOS 5.11GLIBC <= 2.5
CXXABI <= 3.4.8
GLIBCXX <= 3.4.9
GCC <= 4.2.0
wasmedge/wasmedge:manylinux1_x86_64
manylinux2010CentOS 6.10GLIBC <= 2.12
CXXABI <= 1.3.3
GLIBCXX <= 3.4.13
GCC <= 4.5.0
wasmedge/wasmedge:manylinux2010_x86_64
manylinux2014CentOS 7.9GLIBC <= 2.17
CXXABI <= 1.3.7
GLIBCXX <= 3.4.19
GCC <= 4.8.0
wasmedge/wasmedge:manylinux2014_x86_64
manylinux2014CentOS 7.9GLIBC <= 2.17
CXXABI <= 1.3.7
GLIBCXX <= 3.4.19
GCC <= 4.8.0
wasmedge/wasmedge:manylinux2014_aarch64

If you don't want to build Ahead-of-Time runtime/compiler

If users don't need Ahead-of-Time runtime/compiler support, they can set the CMake option WASMEDGE_BUILD_AOT_RUNTIME to OFF.

$ cmake -DCMAKE_BUILD_TYPE=Release -DWASMEDGE_BUILD_AOT_RUNTIME=OFF ..

Build WasmEdge

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

  1. wasmedge is for general wasm runtime.
    • wasmedge executes a WASM file in interpreter mode or a compiled WASM so file in ahead-of-time compilation mode.
    • To disable building all tools, you can set the CMake option WASMEDGE_BUILD_TOOLS to OFF.
  2. wasmedgec is for ahead-of-time WASM compiler.
    • wasmedgec compiles a general WASM file into a so file.
    • To disable building the ahead-of-time compiler only, you can set the CMake option WASMEDGE_BUILD_AOT_RUNTIME to OFF.
  3. libwasmedge_c.so is the WasmEdge C API shared library.
    • libwasmedge_c.so provides C API for the ahead-of-time compiler and the WASM runtime.
    • The APIs about the ahead-of-time compiler will always return failed if the CMake option WASMEDGE_BUILD_AOT_RUNTIME is set as OFF.
    • To disable building the shared library only, you can set the CMake option WASMEDGE_BUILD_SHARED_LIB to OFF.
  4. ssvm-qitc is for AI application, supporting ONNC runtime for AI model in ONNX format.
# After pulling our wasmedge docker image
$ docker run -it --rm \
    -v <path/to/your/wasmedge/source/folder>:/root/wasmedge \
    wasmedge/wasmedge:latest
(docker)$ cd /root/wasmedge
(docker)$ mkdir -p build && cd build
(docker)$ cmake -DCMAKE_BUILD_TYPE=Release -DWASMEDGE_BUILD_TESTS=ON .. && make -j

Run built-in tests

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

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

$ cd <path/to/wasmedge/build_folder>
$ LD_LIBRARY_PATH=$(pwd)/lib/api ctest

Run applications

Next, follow this guide to run WebAssembly bytecode programs in wasmedge.