C++ ルールとの統合

問題を報告する ソースを表示 ナイトリー · 7.4 .

このページでは、さまざまなレベルで C++ ルールと統合する方法について説明します。

C++ ツールチェーンへのアクセス

Starlark ルールの CC ツールチェーンに依存するには、@rules_cc//cc:find_cc_toolchain.bzl で利用可能なヘルパー関数を使用する必要があります。

ルールで C++ ツールチェーンに依存するには、toolchains パラメータを use_cc_toolchain() に設定します。次に、ルールの実装で find_cpp_toolchain(ctx) を使用して CcToolchainInfo を取得します。動作する完全な例は、rules_cc の例で確認できます。

C++ ツールチェーンを使用してコマンドラインと環境変数を生成する

通常は、C++ ツールチェーンと統合して C++ ルールと同じコマンドライン フラグを設定しますが、C++ アクションを直接使用しません。これは、独自のアクションを作成するときに、C++ ツールチェーンと整合した動作をさせる必要があるためです。たとえば、C++ コマンドライン フラグを、バックグラウンドで C++ コンパイラを呼び出すツールに渡すなどです。

C++ ルールは、特徴の構成に基づいてコマンドラインを特別な方法で構築します。コマンドラインを作成するには、以下が必要です。

compiler_executable など、ツール固有のゲッターは引き続き存在します。ツール固有のゲッターは最終的に削除されるため、これらの代わりに get_tool_for_action を使用することをおすすめします。

完全な動作例については、rules_cc の例をご覧ください。

C++ ルールに依存する Starlark ルール、または C++ ルールが依存できる Starlark ルールを実装する

ほとんどの C++ ルールは、CompilationContextLinkingContext を含むプロバイダである CcInfo を提供します。これにより、リンクするすべての参照ヘッダーやライブラリなどの情報にアクセスできます。CcInfoCcToolchainInfo のカスタム Starlark ルールから、必要な情報をすべて取得できる必要があります。

Starlark のカスタムルールで CcInfo が指定されている場合は、C++ ルールにも依存できるというシグナルになります。ただし、CcInfo をグラフからバイナリルールに伝播し、バイナリルールで使用する場合のみ、CcInfo を別のプロバイダでラップしてください。たとえば、java_library ルールでネイティブ依存関係を java_binary まで伝播する場合、CcInfo を直接指定しないでください(java_library に依存する cc_binary は意味がありません)。JavaCcInfo などでラップする必要があります。

完全な動作例については、rules_cc の例をご覧ください。

C++ ルールのロジックとアクションを再利用する

まだ安定していません。API が安定したら、このセクションを更新します。最新情報については、#4570 をフォローしてください。