Files
hakorune/docs/private/roadmap/phases/phase-33

Phase33 — Native LLVM AOT (C ABI) Skeleton

目的

  • llvmlite 既存経路を維持しつつ、ネイティブLLVMC++実装)を 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} などのトグルで optin。
  • 共有ライブラリ + システムLLVM 依存を基本とし、静的単一バイナリは用途限定で後続検討。

受け入れ基準(本フェーズ)

  • C ABI ヘッダと NYI 実装がリポジトリに追加され、ビルド骨格が整っている。
  • 既存スモークに影響なし(既定経路に変更なし)。

ENV / Toggles

  • HAKO_AOT_ENGINE (llvmlite|native) — default llvmlite, native opt-in
  • HAKO_LLVM_TOOL, HAKO_LLVM_LINKER — optional overrides for clang toolchain
  • HAKO_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).