そのうち Docker で Wasm コンテナが実行できるようになる(Docker DesktopがWebAssemblyランタイムを統合。コンテナと同様にWebAssemblyイメージを実行可能に - Publickey)らしいので、Wasm のビルドと実行を試してみる。
前提
- OS: Windows 11 Pro 22H2 ビルド: 22621.755
- Docker: Docker Desktop 4.13.1 (90346)
- 使用イメージ: debian:bullseye-slim
イメージ起動
docker run -it --rm debian:bullseye-slim
環境構築
前提ツール類インストール
apt-get update
apt-get install -y curl git libxml2 file
curl
: WasmEdge のインストールに必要git
: WasmEdge のインストールに必要libxml2
: Wasm バイナリのビルドに必要なライブラリfile
: ビルドしたバイナリが Wasm バイナリになっているかを確認するために使用
wasi-sdk のインストール
Wasm のコンパイルに必要な SDK をインストールする。
curl -LO https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-16/wasi-sdk_16.0_amd64.deb
apt-get install -f ./wasi-sdk_16.0_amd64.deb
/opt/wasi-sdk/
にインストールされる。
WasmEdge のインストール
Wasm 実行に必要なランタイムをインストールする。
curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash
~/.wasmedge
にインストールされる。
ビルド
C のソースコードを作成
<< EOF >> main.c
cat #include <stdio.h>
int main(int argc, char **argv) {
("Hello, World!\n");
printfreturn 0;
}
EOF
clang によるビルド
/opt/wasi-sdk/bin
内に clang
があるので、それを使ってビルド。
/opt/wasi-sdk/bin/clang main.c --sysroot=/opt/wasi-sdk/share/wasi-sysroot/ -o ./main.wasm
バイナリの確認
file
コマンドで確認すると、 WebAssembly
であることが確認できる。
# file main.wasm
main.wasm: WebAssembly (wasm) binary module version 0x1 (MVP)
実行
wasmedge
に、ビルドしたバイナリを渡す。
# ~/.wasmedge/bin/wasmedge ./main.wasm
Hello, World!
実行できた。以上。
0 件のコメント:
コメントを投稿