自動実行グループ(AEG)

自動実行グループによる実行プラットフォームの選択 各ツールチェーンで異なります。つまり、1 つのターゲットに複数の異なる 実行グループを定義せずに実行プラットフォームに アクセスできます

要約

自動実行グループはツールチェーンと密接に関係しています。以下を使用している場合: 影響を受けるアクション( 実行可能ファイルまたはツールチェーンのツール)に toolchain パラメータを追加します。次に例を示します。

ctx.actions.run(
    ...,
    executable = ctx.toolchain['@bazel_tools//tools/jdk:toolchain_type'].tool,
    ...,
    toolchain = '@bazel_tools//tools/jdk:toolchain_type',
)

アクションがツールチェーンのツールや実行可能ファイルを使用せず、Blaze が 検出されない場合(エラーが発生)は、次のプロパティを設定できます。 toolchain = None

1 つの実行プラットフォームで複数のツールチェーン(アクション 実行ファイルまたは 2 つ以上のツールチェーンのツールを使用する場合)は、 exec_groups を定義( カスタム exec_group を使用するタイミング セクションを参照)。

履歴

AEG が登場する前は、ルールレベルで実行プラットフォームを選択していました。例:

my_rule = rule(
    _impl,
    toolchains = ['//tools:toolchain_type_1', '//tools:toolchain_type_2'],
)

ルール my_rule は 2 つのツールチェーン タイプを登録します。つまり、ツールチェーンは、 使用した解像度 両方のツールチェーン タイプをサポートする実行プラットフォームを見つけます。選択した ルール内で登録された各アクションに、実行プラットフォームが使用されていました。 exec_groups で異なる値を指定することだけです。 つまり、以前はルール内のすべてのアクションが 1 回ずつ実行されていました。 異なるツールチェーン(実行プラットフォーム)のツールを など)が含まれます。そのため、通知が届かなかったときに 実行プラットフォームに 対応しています

現在の状態

AEG では、ツールチェーン タイプごとに実行プラットフォームが選択されます。「 上記の例 my_rule の実装関数は次のようになります。

def _impl(ctx):
    ctx.actions.run(
      mnemonic = "First action",
      executable = ctx.toolchain['//tools:toolchain_type_1'].tool,
      toolchain = '//tools:toolchain_type_1',
    )

    ctx.actions.run(
      mnemonic = "Second action",
      executable = ctx.toolchain['//tools:toolchain_type_2'].tool,
      toolchain = '//tools:toolchain_type_2',
    )

このルールでは 2 つのアクションが作成されます。First action は、 //tools:toolchain_type_1Second action は、 //tools:toolchain_type_2。AEG が発生する前は、どちらのアクションも実行されていました。 両方のツールチェーン タイプをサポートする単一の実行プラットフォーム上で実行できます。AEG では アクション内に toolchain パラメータを追加すると、各アクションは次の場所で実行されます。 ツールチェーンを提供する実行プラットフォームです。アクションは 実行する方法を学びました

同じことが、toolchainctx.actions.run_shell の場合にも有効です。 tools がツールチェーンからのものである場合、パラメータを追加する必要があります。

カスタム実行グループと自動実行グループの違い

その名前が示すように、AEG とは、システムごとに ツールチェーン タイプを示しています。手動で指定する必要はありません。 生成 AI のありません

カスタム exec_group を使用するタイミング

カスタム exec_groups は、複数のツールチェーンで 単一の実行プラットフォームで実行できます。それ以外の場合は、すべての カスタム exec_groups を定義します。例:

def _impl(ctx):
    ctx.actions.run(
      ...,
      executable = ctx.toolchain['//tools:toolchain_type_1'].tool,
      tools = [ctx.toolchain['//tools:toolchain_type_2'].tool],
      exec_group = 'two_toolchains',
    )
my_rule = rule(
    _impl,
    exec_groups = {
        "two_toolchains": exec_group(
            toolchains = ['//tools:toolchain_type_1', '//tools:toolchain_type_2'],
        ),
    }
)

AEG の移行

google3 内部では、Blaze はすでに AEG を使用しています。 外部では、Bazel による移行が進行中です。一部のルールですでに 使用できます(Java ルールや C++ ルールなど)。

この移行をサポートしている Bazel バージョン

AEG は Bazel 7 以降で完全にサポートされています。

AEG を有効にする方法

--incompatible_auto_exec_groups を true に設定します。 フラグの詳細 GitHub の問題をご覧ください。

特定のルール内で AEG を有効にするにはどうすればよいですか?

ルールに _use_auto_exec_groups 属性を設定します。

my_rule = rule(
    _impl,
    attrs = {
      "_use_auto_exec_groups": attr.bool(default = True),
    }
)

これにより、my_rule でのみ AEG が有効になり、そのアクションは新しいロジックを使用して開始されます。 選択します互換性のないフラグが次でオーバーライドされます 属性です。

エラーが発生した場合に AEG を無効にする方法

AEG を完全に無効にするには、--incompatible_auto_exec_groups を false に設定します。 プロジェクト(フラグの GitHub の問題)を使用するか、特定のルールを無効にする _use_auto_exec_groups 属性を False に設定する (属性の詳細)。

AEG への移行中のエラー メッセージ

ツールが暗黙的な依存関係からのものか、ツールチェーンからのものかを特定できませんでした。ツールチェーン パラメータを設定してください。ツールチェーンを使用していない場合は、「None」に設定します。

  • この場合、エラーが発生する前にスタックされた呼び出しを取得し、 ツールチェーン パラメータが必要なアクションを明確に確認できます。次を確認する ツールチェーンを使用してアクションを実行し、ツールチェーン パラメータで設定します。「いいえ」の場合 ツールチェーンがツールまたは実行可能ファイルのアクション内で使用されている場合は、 None

存在しないツールチェーン「[ツールチェーン タイプ]」に対してアクションが宣言されています。

  • これは、アクションにツールチェーン パラメータを設定したものの、 ルールに登録します。ツールチェーンを登録するか、アクション内で None を設定します。

その他の資料

詳細については、設計ドキュメントをご覧ください。 ツールチェーンの自動実行グループ