コントリビュート¶
詳細は GitHub の CONTRIBUTING.md (英語) を参照してください。
⚠️ 日本語訳は今後追加予定です。最新かつ完全な手順は上記英語版にあります。
最低限知っておくこと¶
ローカルビルド & テスト¶
git clone https://github.com/ykus4/kagura.git
cd kagura
bash build.sh
cd build && ctest --output-on-failure
新しいパスを追加する場合¶
include/kagura/Passes.hにパスを宣言lib/Transforms/<Subsystem>/YourPass.cppで実装lib/Transforms/CMakeLists.txtに登録lib/Transforms/Options.cppとinclude/kagura/Options.hにcl::optフラグ追加lib/Transforms/Plugin.cppで登録 (named-pass + OptimizerLast EP)tests/pass-inputs/に C ソース追加tests/CMakeLists.txtにkagura_add_pass_test()エントリ追加tests/lit/<your-pass>.llに FileCheck テスト追加
パスのガイドライン¶
PassInfoMixinを使用 (New Pass Manager のみ、レガシーパス未サポート)- 宣言だけの関数はスキップ:
if (F.isDeclaration()) return PA; - 関数アノテーションを尊重するには
shouldObfuscate(F, "passname", defaultEnabled)を使用 - すべてのランダム性は
kagura::PRNGを使用、-kagura-seedを尊重 - LLVM 17–22 互換のため
M.getTargetTriple()ではなくkagura::getModuleTriple(M)を使用
Pull Request¶
- パス / 機能 ごとに1 PR
- パス変換を検証する FileCheck テスト (
.ll) を含める ./scripts/differential-test.shをローカル実行し回帰なしを確認- マージ前に CI がグリーンであること
ライセンス¶
コントリビュートすることで、貢献内容が MIT ライセンス下でライセンスされることに同意することになります。