3.7 KiB
3.7 KiB
Cranelift AOT で Egui Hello を実行する手順(Windows)
本ガイドは、Cranelift AOT 経路で Egui の hello サンプル(プラグイン版)をネイティブ EXE として実行する最短手順です。
前提
- 対象: Windows(PowerShell 推奨)
- プラグイン Egui を使用(with-egui 機能を有効化)
- JIT ランタイムは封印(デフォルト無効)。対象バックエンドは Interpreter / VM / Cranelift AOT / LLVM AOT の4つ。
用語
- ユーザーBox: Nyash で実装した通常のクラス
- プラグインBox: DLL/so 経由の TypeBox(v2 PluginBoxV2)
- コア埋め込みBox: ランタイム同梱の最小セット(旧: ビルトイン)
手順
-
プラグイン(Egui)を GUI 対応でビルド
cd plugins/nyash-egui-plugincargo build --release --features with-egui
-
Nyash 本体をビルド(Cranelift AOT ツール込み)
- リポジトリ直下へ戻る:
cd ../../ cargo build --release --features cranelift-jit
- リポジトリ直下へ戻る:
-
AOT EXE を生成(ワンショット推奨)
- Windows ワンショット:
pwsh -File tools/windows/build_egui_aot.ps1 -Input apps/egui-hello-plugin/main.hako -Out app_egui- このスクリプトは他スクリプトをネスト呼び出しせず、引数を確実に伝播します(従来の「スクリプト→スクリプト」連鎖で引数が落ちる問題を解消)。
- 共通版(PowerShell):
powershell -ExecutionPolicy Bypass -File tools/build_aot.ps1 -Input apps/egui-hello-plugin/main.hako -Out app_egui - 代替(Bash 版):
bash tools/build_aot.sh apps/egui-hello-plugin/main.hako -o app_egui
- Windows ワンショット:
-
実行(画面が表示されれば成功)
備考
- .o 生成時(Nyash 実行)にもウィンドウが開きます。リンクを継続するため、いったんウィンドウを閉じてください。
WSL で表示されない場合(Wayland→X11 切り替え)
- 症状:
WaylandError(Connection(NoCompositor))などで即終了しウィンドウが出ない。 - 対処 1(推奨): X11 に強制
WAYLAND_DISPLAY=を空にして Wayland を無効化し、X11 を選択させます。- 実行例:
WAYLAND_DISPLAY= WINIT_UNIX_BACKEND=x11 ./app_egui - 必要に応じて:
LIBGL_ALWAYS_INDIRECT=1 WAYLAND_DISPLAY= WINIT_UNIX_BACKEND=x11 ./app_egui
- 対処 2: Wayland を正しく通す(WSLg)
export XDG_RUNTIME_DIR=/mnt/wslg/runtime-dir- 実行例:
WINIT_UNIX_BACKEND=wayland ./app_egui
- チェック:
echo $XDG_RUNTIME_DIR $WAYLAND_DISPLAY $DISPLAYが… wayland-0 :0のように設定されているか、ls -ld /mnt/wslg/runtime-dirでパスが存在するか確認。- 実行はリポジトリ直下(
nyash.tomlと plugins の相対解決に必要) - 任意ログ:
set NYASH_CLI_VERBOSE=1(PowerShell:$env:NYASH_CLI_VERBOSE='1') - 実行:
./app_egui.exe
- 実行はリポジトリ直下(
トラブルシュート
- プラグインが見つからない
nyash.tomlの[plugin_paths].search_pathsにplugins/*/target/releaseが含まれているか確認- それでも解決しない場合は
nyash_egui_plugin.dllを EXE と同フォルダへコピーして暫定回避
- ログで確認(任意)
NYASH_DEBUG_PLUGIN=1でプラグイン登録/ロードの詳細を出力NYASH_CLI_VERBOSE=1で補助的な実行ログを有効化
補足
- 旧ビルトイン Egui(apps/egui-hello/main.hako)は
gui-builtin-legacy機能に隔離されました。 AOT での GUI はプラグイン版(apps/egui-hello-plugin/main.hako)を使用してください。 - JIT ランタイム(Cranelift JIT 直実行)は封印中です。必要時のみ
--features "cranelift-jit,jit-runtime"で有効化してください。