从源码构建和测试 WasmEdge
请参考这个教程来从源码构建和测试 WasmEdge
获取源码
git clone https://github.com/WasmEdge/WasmEdge.git
cd WasmEdge
检查依赖
WasmEdge 会基于最新版本的 LLVM 来创建我们的每日构建。 如果你想从源码构建的话,需要自己手动来安装下面的这些依赖。你也可以直接使用我们提供的 Docker 镜像来构建, 它支持多个发行版本的 Linux 。
- LLVM 12.0.0 (>= 10.0.0)
- GCC 11.1.0 (>= 9.4.0)
环境准备
Docker 镜像
Dockerhub 上的仓库 wasmedge/wasmedge
你可以使用下面的命令来获取我们最新的镜像:
docker pull wasmedge/wasmedge # 等同于 wasmedge/wasmedge:latest
可用的标签
标签名 | 体系结构 | 基于的操作系统 | LLVM 版本 | 环境配置 | 兼容性 | 备注 |
---|---|---|---|---|---|---|
latest | x86_64 | Ubuntu 20.04 LTS | 12.0.0 | CC=clang, CXX=clang++ | Ubuntu 20.04+ | 这个是用于持续集成的,会一直使用最新的 Ubuntu 版本 |
ubuntu-build-gcc | x86_64 | Ubuntu 20.04 LTS | 12.0.0 | CC=gcc, CXX=g++ | Ubuntu 20.04+ | 这个是用于持续集成的,会一直使用最新的 Ubuntu 版本 |
ubuntu-build-clang | x86_64 | Ubuntu 20.04 LTS | 12.0.0 | CC=clang, CXX=clang++ | Ubuntu 20.04+ | 这个是用于持续集成的,会一直使用最新的 Ubuntu 版本 |
ubuntu2004_x86_64 | x86_64 | Ubuntu 20.04 LTS | 10.0.0 | CC=gcc, CXX=g++ | Ubuntu 20.04+ | 这个提供给熟悉 Ubuntu 20.04 LTS 版本的开发者使用 |
manylinux2014_x86_64 | x86_64 | CentOS 7, 7.9.2009 | 12.0.0 | CC=gcc, CXX=g++ | Ubuntu 16.04+, CentOS 7+ | 这个提供给熟悉 CentOS x86_64 架构的开发者使用 |
manylinux2014_aarch64 | aarch64 | CentOS 7, 7.9.2009 | 12.0.0 | CC=gcc, CXX=g++ | Ubuntu 16.04+, CentOS 7+ | 这个提供给熟悉 CentOS aarch64 架构的开发者使用 |
manylinux2010_x86_64 | x86_64 | CentOS 6, 6.10 | 12.0.0 | CC=gcc, CXX=g++ | Ubuntu 14.04+, CentOS 6+ | 这个提供给熟悉基于 x86_64 架构的过时系统的开发者使用,后续不再维护 |
manylinux1_x86_64 | x86_64 | CentOS 5, 5.11 | 12.0.0 | CC=gcc, CXX=g++ | Ubuntu 14.04+, CentOS 5+ | 这个提供给熟悉基于 x86_64 架构的过时系统的开发者使用,后续不再维护 |
在 Ubuntu 20.04 上手动安装依赖
# 工具和库
sudo apt install -y \
software-properties-common \
cmake \
libboost-all-dev
# 你需要 llvm 来支持 wasmedgec 工具
sudo apt install -y \
llvm-12-dev \
liblld-12-dev
# WasmEdge 支持 clang++ 和 g++ 编译器
# 你可以选择其中任一个用来编译这个项目
# 如果你倾向于 GCC
sudo apt install -y gcc g++
# 或者你选择 clang
sudo apt install -y clang
对过时操作系统的支持
我们的开发环境依赖于 libLLVM-12
和 >=GLIBCXX_3.4.33
。
如果用户的系统是比 Ubuntu 20.04 还早的版本,请使用我们定制的 docker 镜像来构建 WasmEdge 。 如果你需要的是在过时版本的操作系统上使用的二进制包,我们也提供了几个基于 manylinux* 发行版本的安装包。
可移植的 Linux 发行版标签 | 基础镜像 | 提供的依赖 | Docker 镜像 |
---|---|---|---|
manylinux1 | CentOS 5.11 | GLIBC <= 2.5 CXXABI <= 3.4.8 GLIBCXX <= 3.4.9 GCC <= 4.2.0 | wasmedge/wasmedge:manylinux1_x86_64 |
manylinux2010 | CentOS 6.10 | GLIBC <= 2.12 CXXABI <= 1.3.3 GLIBCXX <= 3.4.13 GCC <= 4.5.0 | wasmedge/wasmedge:manylinux2010_x86_64 |
manylinux2014 | CentOS 7.9 | GLIBC <= 2.17 CXXABI <= 1.3.7 GLIBCXX <= 3.4.19 GCC <= 4.8.0 | wasmedge/wasmedge:manylinux2014_x86_64 |
manylinux2014 | CentOS 7.9 | GLIBC <= 2.17 CXXABI <= 1.3.7 GLIBCXX <= 3.4.19 GCC <= 4.8.0 | wasmedge/wasmedge:manylinux2014_aarch64 |
构建 WasmEdge
WasmEdge 提供了丰富的工具来支撑更好的性能以及更多样的运行时环境, 编译完成后,你可以找到以下几个 WasmEdge 相关的工具:
wasmedge
是 wasm 的通用运行时。wasmedge
可以在解释器模式下执行一个WASM
文件, 也可以在预编译模式下执行一个 WASMso
文件。- 你可以通过将 CMAKE 配置项
WASMEDGE_BUILD_TOOLS
设置成OFF
来禁止所有工具的构建。
wasmedgec
是一个WASM
预编译器。wasmedgec
将一个通用的WASM
文件编译成so
文件。- 你可以通过将 CMAKE 配置项
WASMEDGE_BUILD_AOT_RUNTIME
设置成OFF
来禁止构建预编译器。
libwasmedge_c.so
是 WasmEdge C API 的共享库。libwasmedge_c.so
提供了访问预编译器和 WASM 运行时的 C 语言 API。- 如果
WASMEDGE_BUILD_AOT_RUNTIME
配置项被设置成OFF
, 那么与预编译器相关的 API 都将会返回错误。
ssvm-qitc
是用来支持 AI 应用的,它支持基于 ONNX 格式的 AI 模型的 ONNC 运行时。- 如果你想尝试使用
ssvm-qitc
,请参考 ONNC-Wasm 项目来设置运行环境,并且运行几个示例。 - 这里是我们的 ONNC-Wasm 项目教程 ( YouTube 视频) 。
- 如果你想尝试使用
# 获取到 wasm docker 镜像后
docker run -it --rm \
-v <path/to/your/wasmedge/source/folder>:/root/wasmedge \
wasmedge/wasmedge:latest
# In docker
cd /root/wasmedge
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DWASMEDGE_BUILD_TESTS=ON .. && make -j
如果你不需要预编译运行时/编译器
如果用户不需要预编译运行时和编译器特性的话,可以将 CMAKE 配置项 WASMEDGE_BUILD_AOT_RUNTIME
设置成 OFF
。
cmake -DCMAKE_BUILD_TYPE=Release -DWASMEDGE_BUILD_AOT_RUNTIME=OFF ..
执行内置的测试
下面所提到的测试只有在构建配置 WASMEDGE_BUILD_TESTS
设置为 ON
的时候才有效。
用户可以通过这些测试来验证 WasmEdge 二进制包的正确性。
cd <path/to/wasmedge/build_folder>
LD_LIBRARY_PATH=$(pwd)/lib/api ctest
运行应用
接下来,参考 这个文档 在 wasmedge
上运行 WebAssembly 字节码程序。