47 lines
2.0 KiB
Markdown
47 lines
2.0 KiB
Markdown
# Phase‑33 — Execution Plan (Native LLVM AOT)
|
||
|
||
## Milestones
|
||
|
||
1) Skeleton & Contract (this phase)
|
||
- Add C ABI header + stub implementation returning NYI
|
||
- CMake project in `c/llvm-native/` without LLVM linkage
|
||
- Document API and error policy; keep defaults unchanged (llvmlite)
|
||
|
||
2) Minimal Codegen
|
||
- Implement JSON→IR→OBJ for: const i64 / ret / binop / compare+branch
|
||
- Target: Linux x86_64 only; opt-level configurable
|
||
- Add canaries mirroring existing AOT tests (return/binop/if)
|
||
|
||
3) Linking
|
||
- Implement `.o + libhako_kernel.a → exe`
|
||
- Provide flags for relocation model / LTO (optional)
|
||
- Add canaries to assert rc/last-line parity with VM/llvmlite
|
||
|
||
4) Packaging & Toggle
|
||
- Provide `--aot-engine native` / `HAKO_AOT_ENGINE=native`, fall back to llvmlite if native unavailable
|
||
- Doc: system LLVM vs. bundled releases; size/perf trade-offs
|
||
|
||
## Acceptance (Phase 33)
|
||
- C ABI skeleton present and isolated; repository builds unchanged by default
|
||
- Plan/README written; follow-up work scoped to Phase 34+
|
||
|
||
---
|
||
|
||
## Current Blockers (2025‑10‑31)
|
||
|
||
- Harness error in `ny-llvmc` path: `unexpected indent (mir_call.py, line 26)` → JSON→EXE が停止。
|
||
- Workspace includes missing plugin crates (`plugins/nyash-aot-plugin` 等) → `--features llvm` ビルドが失敗。
|
||
- AOT userbox canary は環境不足(動的プラグイン未構築、パーサ互換)で SKIP。
|
||
|
||
## Immediate Steps
|
||
|
||
1) Fix harness indentation (mir_call.py) → return 7 カナリアを緑化(EXE 生成・rc 7)。
|
||
2) Exclude missing plugins from workspace(またはダミーcrate)→ `cargo build --features llvm` が通る状態へ。
|
||
3) Optional: アーカイバ helper を復帰(`.o + libnyash_kernel.a → exe`)し、ハーネス迂回のバックアップ経路を確保。
|
||
|
||
## Notes
|
||
|
||
- main ブランチは docs のみコミット済み。AOT の作業差分は phase33 ブランチで継続(混在回避)。
|
||
- 既定は llvmlite 維持。native は opt‑in(失敗時は llvmlite に自動フォールバック)。
|
||
|