追加のアクション ルール

ルール

action_listener

ルールのソースを表示
action_listener(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, extra_actions, features, licenses, mnemonics, restricted_to, tags, target_compatible_with, testonly, visibility)

警告: 追加アクションは非推奨です。アスペクトを使用してください。 aspects instead.

action_listener ルール自体は出力を生成しません。 代わりに、ツール デベロッパーは、アクションから extra_action へのマッピングを提供することで、ビルドシステムに extra_action を挿入できます。

このルールの引数は、アクションのニーモニックを extra_action ルールにマッピングします。

オプションを指定すると、ビルドは指定された action_listener を使用して、ビルドグラフに extra_action を挿入します。--experimental_action_listener=<label>

action_listener(
    name = "index_all_languages",
    mnemonics = [
        "Javac",
        "CppCompile",
        "Python",
    ],
    extra_actions = [":indexer"],
)

action_listener(
    name = "index_java",
    mnemonics = ["Javac"],
    extra_actions = [":indexer"],
)

extra_action(
    name = "indexer",
    tools = ["//my/tools:indexer"],
    cmd = "$(location //my/tools:indexer)" +
          "--extra_action_file=$(EXTRA_ACTION_FILE)",
)

引数

属性
name

名前(必須)

このターゲットの一意の名前。

extra_actions

ラベルのリスト(必須)

この action_listener がビルドグラフに追加する extra_action ターゲットのリスト。例: [ "//my/tools:analyzer" ].
mnemonics

文字列のリスト(必須)

この action_listener がリッスンするアクションのニーモニックのリスト(例: [ "Javac" ])。

ニーモニックはパブリック インターフェースではありません。 ニーモニックとそのアクションが変更されないという保証はありません。

extra_action

ルールのソースを表示
extra_action(name, data, cmd, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, out_templates, requires_action_output, restricted_to, tags, target_compatible_with, testonly, toolchains, tools, visibility)

警告: 追加アクションは非推奨です。アスペクトを使用してください。 aspects instead.

extra_action ルールは、通常のビルドターゲットとして指定しても意味のある出力を生成しません 。代わりに、ツール デベロッパーは、既存のアクションをシャドウする追加のアクションをビルドグラフに挿入できます。

action_listener を有効にする方法については、 をご覧ください。 extra_action

extra_action はコマンドラインとして実行されます。コマンドライン ツールは、シャドウしている元のアクションの詳細情報を含むプロトコル バッファを含むファイルに $(EXTRA_ACTION_FILE) としてアクセスできます。 また、元のアクションがアクセスできるすべての入力ファイルにもアクセスできます。 プロトコル バッファに保存されるデータの詳細については、extra_actions_base.proto をご覧ください。各 proto ファイル には ExtraActionInfo メッセージが含まれています。

他のすべてのアクションと同様に、追加アクションはサンドボックス化されるため、その処理に対応するように設計する必要があります。

引数

属性
name

名前(必須)

このターゲットの一意の名前。

このルールは、 action_listener ルールの extra_actions 引数で label を使用して参照できます。
cmd

文字列(必須)

実行するコマンド。

genrule cmd attribute と同様ですが、次の点が異なります。

  1. ヒューリスティック ラベルの展開はありません。$(location ...) を使用するラベルのみが展開されます。

  2. 文字列に追加のパスが適用され、 から作成された出力のすべての出現箇所が置き換えられます。out_templates$(output out_template) のすべての出現箇所は、label で示されるファイルのパスに置き換えられます。

    たとえば、out_template $(ACTION_ID).analysis$(output $(ACTION_ID).analysis). と一致します。

    実際には、これは $(location) と同じ置換ですが、スコープが異なります。

out_templates

文字列のリスト(デフォルトは []

extra_action コマンドによって生成されるファイルのテンプレートのリスト。

テンプレートでは、次の変数を使用できます。

  • $(ACTION_ID)。この extra_action を一意に識別する ID。 一意の出力ファイルを生成するために使用されます。

requires_action_output

ブール値(デフォルトは False

この extra_action では、元のアクションの出力がこの extra_action の入力として存在する必要があることを示します。

true の場合(デフォルトは false)、extra_action は、元のアクションの出力が入力の一部として使用可能であることを前提とできます。

tools

ラベルのリスト(デフォルトは[]

このルールの tool 依存関係のリスト。

詳細については、依存関係の定義をご覧ください。

ビルドシステムは、 extra_action コマンドを実行する前に、これらの前提条件がビルドされるようにします。これらは、ビルド自体でツールとして実行する必要があるため、 exec構成を使用してビルドされます。個々の tools ターゲット //x:y のパスは、 $(location //x:y) を使用して取得できます。

すべてのツールとそのデータ依存関係は、コマンドが相対パスを使用できる単一のツリー に統合されます。作業ディレクトリは、その統合ツリーのルートになります。