mimiummemo

  • std::path::canonicalize(std::fs::canonicalizeへのエイリアス)はプラットフォーム依存の挙動でwasmやWASIだとランタイムでErrを返して落ちるっぽい

環境構築

RustにWasiターゲットを追加する

rustup target add wasm32-wasip2

wasmtime(WASI用にビルドされたやつを動かすためのランタイム)のインストール

curl https://wasmtime.dev/install.sh -sSf | bash

なぜかMacだときちんと入らなかったので手動で落としてきて、~/.wasmtime/bin/wasmtimeに配置しておく

VSCodeでブレークポイントかけてデバッグする

launch.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上ではオーディオドライバをシステムとブリッジしてくれる仕組みがないので音が出ない。