2025-09-06 16:18:46 +09:00
|
|
|
|
# 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 を生成(ワンショット推奨)
|
2025-11-06 15:41:52 +09:00
|
|
|
|
- Windows ワンショット: `pwsh -File tools/windows/build_egui_aot.ps1 -Input apps/egui-hello-plugin/main.hako -Out app_egui`
|
2025-09-06 16:18:46 +09:00
|
|
|
|
- このスクリプトは他スクリプトをネスト呼び出しせず、引数を確実に伝播します(従来の「スクリプト→スクリプト」連鎖で引数が落ちる問題を解消)。
|
2025-11-06 15:41:52 +09:00
|
|
|
|
- 共通版(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`
|
2025-09-06 16:18:46 +09:00
|
|
|
|
|
|
|
|
|
|
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` で補助的な実行ログを有効化
|
|
|
|
|
|
|
|
|
|
|
|
補足
|
2025-11-06 15:41:52 +09:00
|
|
|
|
- 旧ビルトイン Egui(apps/egui-hello/main.hako)は `gui-builtin-legacy` 機能に隔離されました。
|
|
|
|
|
|
AOT での GUI はプラグイン版(apps/egui-hello-plugin/main.hako)を使用してください。
|
2025-09-06 16:18:46 +09:00
|
|
|
|
- JIT ランタイム(Cranelift JIT 直実行)は封印中です。必要時のみ `--features "cranelift-jit,jit-runtime"` で有効化してください。
|