Files
hakorune/docs/private/roadmap/phases/phase-33/PLAN.md

47 lines
2.0 KiB
Markdown
Raw 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.

# Phase33 — 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 (20251031)
- 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 は optin失敗時は llvmlite に自動フォールバック)。