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

45 lines
2.2 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 — 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).