# 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: ランタイム同梱の最小セット（旧: ビルトイン）

手順
1) プラグイン（Egui）を GUI 対応でビルド
   - `cd plugins/nyash-egui-plugin`
   - `cargo build --release --features with-egui`

2) Nyash 本体をビルド（Cranelift AOT ツール込み）
   - リポジトリ直下へ戻る: `cd ../../`
   - `cargo build --release --features cranelift-jit`

3) 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`

4) 実行（画面が表示されれば成功）

備考
- .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"` で有効化してください。
