Files
hakorune/docs/guides/cranelift_aot_egui_hello.md

61 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Cranelift AOT で Egui Hello を実行する手順Windows
本ガイドは、Cranelift AOT 経路で Egui の hello サンプル(プラグイン版)をネイティブ EXE として実行する最短手順です。
前提
- 対象: WindowsPowerShell 推奨)
- プラグイン Egui を使用with-egui 機能を有効化)
- JIT ランタイムは封印(デフォルト無効)。対象バックエンドは Interpreter / VM / Cranelift AOT / LLVM AOT の4つ。
用語
- ユーザーBox: Nyash で実装した通常のクラス
- プラグインBox: DLL/so 経由の TypeBoxv2 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` で補助的な実行ログを有効化
補足
- 旧ビルトイン Eguiapps/egui-hello/main.hako`gui-builtin-legacy` 機能に隔離されました。
AOT での GUI はプラグイン版apps/egui-hello-plugin/main.hakoを使用してください。
- JIT ランタイムCranelift JIT 直実行)は封印中です。必要時のみ `--features "cranelift-jit,jit-runtime"` で有効化してください。