LLVMへの貢献

LLVMへの貢献にご興味をお持ちいただきありがとうございます!貢献方法は複数あり、すべての貢献を歓迎します。ご質問がある場合は、フォーラムをご利用いただくか、よりインタラクティブなチャットをご希望の場合は、Discordサーバーまたはirc.oftc.netのIRC #llvmチャンネルをご利用ください。

コードを貢献したい場合は、LLVM開発者ポリシーをよく読んでください。

貢献方法

バグレポート

LLVMを使用していてバグに遭遇した場合は、ぜひお知らせください。LLVMバグレポートの提出方法の手順に従ってバグレポートを作成してください。

バグ修正

LLVMにコードを貢献することに興味がある場合、good first issueキーワードでラベル付けされたバグは、コードベースに慣れるための良い方法です。バグトラッカー バグの修正に興味がある場合は、コメントして作業中であることを知らせてください。

次に、アップストリームLLVMでバグを再現し、修正してみてください。LLVMシステム入門で説明されているように、ソースからLLVMをビルドすることから始め、ビルドされたバイナリを使用してバグに記載されているエラーを再現します。デバッグビルド(-DCMAKE_BUILD_TYPE=Debug)またはアサーション付きビルド(-DLLVM_ENABLE_ASSERTIONS=On、デバッグビルドで有効)を使用します。

セキュリティ問題の報告

セキュリティ関連のバグを提出するための個別のプロセスがあります。セキュリティ問題の報告方法を参照してください。

大規模な作業

大規模な作業に取り組むことに興味がある場合は、LLVMのオープン プロジェクト ページで興味深いプロジェクトのリストが管理されています。これらのプロジェクトのいずれかで作業することに興味がある場合は、フォーラムに投稿して、プロジェクトが作業中であることをお知らせください。

パッチの提出方法

パッチの準備ができたら、提出する時です。パッチは

  • 小さな単体テストを含む

  • LLVMコーディング規約に準拠している。clang-format-diff.pyまたはgit-clang-formatツールを使用して、パッチを自動的に適切にフォーマットできます。

  • 無関係な変更を含まない

  • 独立した変更である。独立した変更は、レビューを容易にするため、別々のパッチとして提出する必要があります。

  • 単一のコミットを持ち、アップストリームのorigin/mainブランチと最新の状態であり、マージがない。

レビューのためにパッチを送信する前に、適切にフォーマットされていることを確認してください。 clang-formatを使用します。これは、git-clang-formatスクリプトを介してgitと統合されています。一部のシステムでは、既にインストールされている(またはパッケージマネージャーからインストールできる)場合があります。その場合は、単純に実行できます。次のコマンドは、最新のコミットで変更されたコードのみをフォーマットします

% git clang-format HEAD~1

これはファイルを修正しますが、コミットしないことに注意してください。保留中のすべての変更で最後のコミットを更新するには、次のコマンドを実行する必要があります

% git commit --amend -a

保留中のすべての変更で最後のコミットを更新するためです。

注記

システムにclang-formatまたはgit clang-formatがインストールされていない場合、clang-formatバイナリはclangと一緒にビルドされ、git統合はclang/tools/clang-format/git-clang-formatから実行できます。

LLVMプロジェクトは、レビュープロセスとしてGitHubプルリクエストに移行しました。 GitHubプルリクエストの使用ワークフローの詳細については、GitHubドキュメントを参照してください。読み取り専用のLLVMのPhabricatorインスタンスはまだあります。

適切な人がパッチを確認できるように、レビューをリクエストするときに適切なレビュアーを選択してパッチに追加してください。適切なレビュアーは、コードオーナー(CODE_OWNERS.txtを参照)と、パッチが関係する分野で作業している他の人々です。 Githubは通常、ルールまたは以前にコードを操作した人々に基づいてレビュアーを提案します。新しいコントリビューターの場合は、そのような方法でレビュアーを選択することはできません。その場合は、コメントでCCすることで潜在的なレビュアーの注意を引くことができます。@nameで名前を付けるだけです。

レビュアーは、レビュー中に変更をリクエストしたり、質問したりすることがあります。テストケース、ドキュメントなどの提供方法がわからない場合は、レビュー中にガイダンスを求めてください。フィードバックに対処し、更新されたバージョンのパッチを再投稿してください。このサイクルは、すべてのリクエストとコメントが対処され、レビュアーが問題ありませんまたはLGTMでパッチを受け入れるまで続きます。それが完了すると、変更をコミットできます。コミットアクセス権がない場合は、レビュー中に知らせてください。誰かがあなたに代わってコミットする必要があります。

1週間パッチにコメントがない場合は、「Ping」でGitHub PRに「ping」を送信してレビューをリクエストできます。一般的な「ping」の頻度は週に1回です。他のプロの開発者から貴重な時間を求めていることを忘れないでください。

LLVMのコードレビュープロセスの詳細については、LLVMコードレビューポリシーとプラクティスを参照してください。

開発者がGitから変更をコミットする場合

パッチがレビューされたら、GitHubウェブインターフェースの「Squash and merge」ボタンを選択できます。リポジトリにプッシュする前に、変更をリベースする必要がある場合があります。

LLVMは現在、線形履歴ポリシーを採用しており、マージコミットは許可されていません。 githubのllvm-projectリポジトリは、マージを含むプッシュを拒否するように設定されているため、上記のgit rebase手順が必要です。

特定のgitワークフローで問題が発生している場合は、ヘルプを求めてください。

Git pre-push hook

プッシュしようとしているリビジョンに対していくつかのサニティチェックを実行し、一度に複数のコミットをプッシュする場合に確認を求めるオプションのプッシュ前フックが含まれています。リポジトリルートから実行することで設定できます(Unixシステムの場合)

% ln -sf ../../llvm/utils/git/pre-push.py .git/hooks/pre-push

ln -s utils/git/pre-push .git/hooks/

LLVMに関する役立つ情報

LLVMのドキュメントは、LLVMの内部構造とさまざまなユーザーガイドに関する豊富な情報を提供しています。以下にリストされているページは、LLVMの高レベル設計とその内部構造の概要を理解するのに役立ちます

LLVMシステム入門

LLVMインフラストラクチャをすぐに使い始める方法について説明します。ディストリビューションの解凍とコンパイルから、いくつかのツールの 실행まで、すべてを網羅しています。

LLVM言語リファレンスマニュアル

LLVM中間表現を定義します。

LLVMプログラマーマニュアル

LLVMソースベースの一般的なレイアウト、重要なクラスとAPI、およびいくつかのヒントとコツを紹介します。

大学院生のためのLLVM

これはAdrian SampsonによるLLVMインフラストラクチャの紹介です。大学院生向けに書かれていますが、LLVMのアーキテクチャ、LLVMのIR、および新しいパスの書き方について、わかりやすくコンパクトな概要が示されています。

LLVM入門