Phase‑33 — Native LLVM AOT (C ABI) Skeleton
目的
- llvmlite 既存経路を維持しつつ、ネイティブLLVM(C++実装)を C ABI で公開する薄いライブラリを用意し、段階的に自己完結AOTに移行する。
スコープ
- C ABI の契約を先に確定(関数名・戻り値・エラー方針)。
- ひな形(ビルド可能だが NYI 戻り)のライブラリを作成。
- 既存の quick/integration は既定を llvmlite のままにする(破壊的変更なし)。
非スコープ(本フェーズ)
- 実際の LLVM コード生成/リンク実装(次フェーズ)。
- マルチターゲット対応・最適化パスの詳細調整。
配置
- ライブラリ:
c/llvm-native/(CMakeベース)include/hako_llvm.h— C ABI ヘッダsrc/hako_llvm.cpp— 骨格(NYI 返却)CMakeLists.txt— いまは LLVM リンク未設定(スケルトン)
契約(C ABI の要旨)
- 初期化/終了:
hako_llvm_init,hako_llvm_shutdown - 設定:
hako_llvm_set_opt_level,hako_llvm_set_reloc_model - 生成:
hako_llvm_emit_obj(mir_json → .o),hako_llvm_link_exe(.o + runtime → exe) - 返却: 0=OK、負値=エラー。
errに安定タグ(例:[aot/codegen] …)
導入方針
- 既定は llvmlite 維持。
--aot-engine {llvmlite|native}などのトグルで opt‑in。 - 共有ライブラリ + システムLLVM 依存を基本とし、静的単一バイナリは用途限定で後続検討。
受け入れ基準(本フェーズ)
- C ABI ヘッダと NYI 実装がリポジトリに追加され、ビルド骨格が整っている。
- 既存スモークに影響なし(既定経路に変更なし)。
ENV / Toggles
HAKO_AOT_ENGINE(llvmlite|native) — default llvmlite, native opt-inHAKO_LLVM_TOOL,HAKO_LLVM_LINKER— optional overrides for clang toolchainHAKO_LLVM_TARGET_TRIPLE,HAKO_LLVM_CPU,HAKO_LLVM_FEATURES— target hints- If native engine is unavailable, pipeline falls back to llvmlite automatically
Fallback
- If native AOT fails or library is missing, llvmlite pipeline remains active.
- Quick / integration suites keep llvmlite as default (no regression risk).