quartz-research-note/content/WASIでmimiumをビルド&デバッグしてみる.md

68 lines
2.4 KiB
Markdown
Raw Normal View History

#mimium #memo
- std::path::canonicalize(std::fs::canonicalizeへのエイリアス)はプラットフォーム依存の挙動でwasmやWASIだとランタイムでErrを返して落ちるっぽい
## 環境構築
RustにWasiターゲットを追加する
```sh
rustup target add wasm32-wasip2
```
wasmtime(WASI用にビルドされたやつを動かすためのランタイム)のインストール
```sh
curl https://wasmtime.dev/install.sh -sSf | bash
```
なぜかMacだときちんと入らなかったので手動で落としてきて、`~/.wasmtime/bin/wasmtime`に配置しておく
## VSCodeでブレークポイントかけてデバッグする
launch.jsonにこういうのを追加する
```json
{
"type": "lldb",
"request": "launch",
"name": "Debug wasi executable",
"cargo": {
"args": [
"build",
"--bin=mimium-cli",
"--package=mimium-cli",
"--target=wasm32-wasip2"
],
"filter": {
"name": "mimium-cli",
"kind": "bin"
}
},
"program": "~/.wasmtime/bin/wasmtime",
"args": [
"run",
"--dir",
".",
"-D",
"debug-info",
"target/wasm32-wasip2/debug/mimium-cli.wasm",
"mimium-cli/examples/sinewave.mmm"
],
"cwd": "${workspaceFolder}",
"env": {
"_NO_DEBUG_HEAP": "1"
}
},
```
コマンドラインオプションとかはよしなにする。`_NO_DEBUG_HEAP`はWindows環境でデバッグすると極端に遅くなる時につける環境変数らしい。WSLだと関係ないのだろうか、よくわからん。
立ち上げてから動き始めるまで15秒くらいかかるので不安になるが、とりあえずブレークポイントは張れた。変数の中身とかきちんと覗けないのはあるが、落ちる原因の特定ぐらいまではできて便利。
## wasmtimeにはオーディオドライバがない当たり前
ここまでやってエラーで落ちることはなくなったが、Wasmtime上ではオーディオドライバをシステムとブリッジしてくれる仕組みがないので音が出ない。