このページでは、さまざまなレベルで C++ ルールと統合する方法について説明します。
C++ ツールチェーンにアクセスする
@rules_cc//cc:find_cc_toolchain.bzl
で使用可能なヘルパー関数を使用して、Starlark ルールから CC ツールチェーンに依存する必要があります。
ルールで C++ ツールチェーンに依存するには、toolchains パラメータを use_cc_toolchain() に設定します。次に、ルール実装で
find_cpp_toolchain(ctx) を使用して
CcToolchainInfo を取得します。完全な動作
例は、rules_cc
の例で確認できます。
C++ ツールチェーンを使用してコマンドラインと環境変数を生成する
通常、C++ ルールと同じコマンドライン フラグを使用するために、C++ ツールチェーンと統合しますが、C++ アクションは直接使用しません。 これは、独自のアクションを作成する場合、C++ ツールチェーンと一貫した動作をする必要があるためです。たとえば、C++ コンパイラをバックグラウンドで呼び出すツールに C++ コマンドライン フラグを渡す場合などです。
C++ ルールでは、機能 構成に基づいてコマンドラインを構築する特別な方法を使用します。コマンドラインを構築するには、次のものが必要です。
featuresとaction_configs\- これらはCcToolchainConfigInfoにカプセル化されます。CcToolchainInfoFeatureConfiguration- cc_common.configure_features によって返されます。- cc ツールチェーン構成変数 - cc_common.create_compile_variables または cc_common.create_link_variablesによって返されます。
compiler_executable など、ツール固有のゲッターはまだ存在します。
ツール固有のゲッターは最終的に削除されるため、これらよりも get_tool_for_action を使用することをおすすめします。
完全な動作例は、 rules_cc の例で確認できます。
C++ ルールに依存する Starlark ルール、または C++ ルールが依存できる Starlark ルールを実装する
ほとんどの C++ ルールは
CcInfoを提供します。これは
CompilationContext
と
LinkingContextを含むプロバイダです。
これらを通じて、リンクするすべての推移的なヘッダーやライブラリなどの情報にアクセスできます。CcInfo と CcToolchainInfo から、カスタム Starlark ルールは必要なすべての情報を取得できます。
カスタム Starlark ルールが CcInfo を提供する場合、C++ ルールもそれに依存できることを示します。ただし、注意が必要です。CcInfo をグラフを通じてバイナリ ルールに伝播させるだけで、そのバイナリ ルールがそれを使用する場合は、CcInfo を別のプロバイダでラップします。たとえば、java_library ルールがネイティブ依存関係を java_binary に伝播させる場合、CcInfo を直接提供しないでください(java_library に依存する cc_binary は意味がありません)。たとえば、JavaCcInfo でラップする必要があります。
完全な動作例は、 rules_cc の例で確認できます。
C++ ルールのロジックとアクションを再利用する
まだ安定していません。このセクションは、API が安定したら更新されます。最新情報については、 #4570 をご覧ください。