そのうち 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 filecurl: 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 のソースコードを作成
cat << EOF >> main.c
#include <stdio.h>
int main(int argc, char **argv) {
printf("Hello, World!\n");
return 0;
}
EOFclang によるビルド
/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 件のコメント:
コメントを投稿