从源码构建和测试 WasmEdge

请参考这个教程来从源码构建和测试 WasmEdge

获取源码

  1. git clone https://github.com/WasmEdge/WasmEdge.git
  2. cd WasmEdge

检查依赖

WasmEdge 会基于最新版本的 LLVM 来创建我们的每日构建。 如果你想从源码构建的话,需要自己手动来安装下面的这些依赖。你也可以直接使用我们提供的 Docker 镜像来构建, 它支持多个发行版本的 Linux 。

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

环境准备

Docker 镜像

Dockerhub 上的仓库 wasmedge/wasmedge

你可以使用下面的命令来获取我们最新的镜像:

  1. docker pull wasmedge/wasmedge # 等同于 wasmedge/wasmedge:latest

可用的标签

标签名体系结构基于的操作系统LLVM 版本环境配置兼容性备注
latestx86_64Ubuntu 20.04 LTS12.0.0CC=clang, CXX=clang++Ubuntu 20.04+这个是用于持续集成的,会一直使用最新的 Ubuntu 版本
ubuntu-build-gccx86_64Ubuntu 20.04 LTS12.0.0CC=gcc, CXX=g++Ubuntu 20.04+这个是用于持续集成的,会一直使用最新的 Ubuntu 版本
ubuntu-build-clangx86_64Ubuntu 20.04 LTS12.0.0CC=clang, CXX=clang++Ubuntu 20.04+这个是用于持续集成的,会一直使用最新的 Ubuntu 版本
ubuntu2004_x86_64x86_64Ubuntu 20.04 LTS10.0.0CC=gcc, CXX=g++Ubuntu 20.04+这个提供给熟悉 Ubuntu 20.04 LTS 版本的开发者使用
manylinux2014_x86_64x86_64CentOS 7, 7.9.200912.0.0CC=gcc, CXX=g++Ubuntu 16.04+, CentOS 7+这个提供给熟悉 CentOS x86_64 架构的开发者使用
manylinux2014_aarch64aarch64CentOS 7, 7.9.200912.0.0CC=gcc, CXX=g++Ubuntu 16.04+, CentOS 7+这个提供给熟悉 CentOS aarch64 架构的开发者使用
manylinux2010_x86_64x86_64CentOS 6, 6.1012.0.0CC=gcc, CXX=g++Ubuntu 14.04+, CentOS 6+这个提供给熟悉基于 x86_64 架构的过时系统的开发者使用,后续不再维护
manylinux1_x86_64x86_64CentOS 5, 5.1112.0.0CC=gcc, CXX=g++Ubuntu 14.04+, CentOS 5+这个提供给熟悉基于 x86_64 架构的过时系统的开发者使用,后续不再维护

在 Ubuntu 20.04 上手动安装依赖

  1. # 工具和库
  2. sudo apt install -y \
  3. software-properties-common \
  4. cmake \
  5. libboost-all-dev
  6. # 你需要 llvm 来支持 wasmedgec 工具
  7. sudo apt install -y \
  8. llvm-12-dev \
  9. liblld-12-dev
  10. # WasmEdge 支持 clang++ 和 g++ 编译器
  11. # 你可以选择其中任一个用来编译这个项目
  12. # 如果你倾向于 GCC
  13. sudo apt install -y gcc g++
  14. # 或者你选择 clang
  15. sudo apt install -y clang

对过时操作系统的支持

我们的开发环境依赖于 libLLVM-12>=GLIBCXX_3.4.33

如果用户的系统是比 Ubuntu 20.04 还早的版本,请使用我们定制的 docker 镜像来构建 WasmEdge 。 如果你需要的是在过时版本的操作系统上使用的二进制包,我们也提供了几个基于 manylinux* 发行版本的安装包。

可移植的 Linux 发行版标签基础镜像提供的依赖Docker 镜像
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

构建 WasmEdge

WasmEdge 提供了丰富的工具来支撑更好的性能以及更多样的运行时环境, 编译完成后,你可以找到以下几个 WasmEdge 相关的工具:

  1. wasmedge 是 wasm 的通用运行时。
    • wasmedge 可以在解释器模式下执行一个 WASM 文件, 也可以在预编译模式下执行一个 WASM so 文件。
    • 你可以通过将 CMAKE 配置项 WASMEDGE_BUILD_TOOLS 设置成 OFF来禁止所有工具的构建。
  2. wasmedgec 是一个 WASM 预编译器。
    • wasmedgec 将一个通用的 WASM 文件编译成 so 文件。
    • 你可以通过将 CMAKE 配置项 WASMEDGE_BUILD_AOT_RUNTIME 设置成 OFF来禁止构建预编译器。
  3. libwasmedge_c.so 是 WasmEdge C API 的共享库。
    • libwasmedge_c.so 提供了访问预编译器和 WASM 运行时的 C 语言 API。
    • 如果 WASMEDGE_BUILD_AOT_RUNTIME 配置项被设置成 OFF, 那么与预编译器相关的 API 都将会返回错误。
  4. ssvm-qitc 是用来支持 AI 应用的,它支持基于 ONNX 格式的 AI 模型的 ONNC 运行时。
  1. # 获取到 wasm docker 镜像后
  2. docker run -it --rm \
  3. -v <path/to/your/wasmedge/source/folder>:/root/wasmedge \
  4. wasmedge/wasmedge:latest
  5. # In docker
  6. cd /root/wasmedge
  7. mkdir -p build && cd build
  8. cmake -DCMAKE_BUILD_TYPE=Release -DWASMEDGE_BUILD_TESTS=ON .. && make -j

如果你不需要预编译运行时/编译器

如果用户不需要预编译运行时和编译器特性的话,可以将 CMAKE 配置项 WASMEDGE_BUILD_AOT_RUNTIME 设置成 OFF

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

执行内置的测试

下面所提到的测试只有在构建配置 WASMEDGE_BUILD_TESTS 设置为 ON 的时候才有效。

用户可以通过这些测试来验证 WasmEdge 二进制包的正确性。

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

运行应用

接下来,参考 这个文档wasmedge 上运行 WebAssembly 字节码程序。