额外操作规则

规则

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)

警告: 额外操作已被弃用。请改用 方面

An action_listener 规则本身不会产生任何输出。 相反,它允许工具开发者通过提供从操作到 extra_action 的映射,将 extra_action 插入到 build 系统中。

此规则的实参将操作助记符映射到 extra_action 规则。

通过指定选项 --experimental_action_listener=<label>, build 将使用指定的 action_listenerextra_action 插入到 build 图中。

示例

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 应添加到 build 图中的 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)

警告: 额外操作已被弃用。请改用 方面

extra_action 规则指定为常规 build 目标时,不会产生任何有意义的输出 。相反,它允许工具开发者 将额外的操作插入到 build 图中,以替代现有操作。

如需详细了解如何启用 extra_actions,请参阅 action_listener

extra_action 以命令行形式运行。命令行工具可以访问一个文件,该文件包含一个协议缓冲区,其中包含有关它所替代的原始操作的详细信息,格式为 $(EXTRA_ACTION_FILE)。它还可以访问原始操作可以访问的所有输入文件。 如需详细了解协议缓冲区内存储的数据,请参阅extra_actions_base.proto 。每个 proto 文件 都包含一个 ExtraActionInfo 消息。

与其他所有操作一样,额外操作也是沙盒化的,并且应设计为能够处理这种情况。

实参

属性
name

名称;必需

此目标的唯一名称。

您可以在 action_listener 规则的 extra_actions 实参中通过 label 引用此规则。
cmd

字符串;必需

要运行的命令。

genrule cmd 属性类似,但存在以下 区别:

  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 依赖项列表。

如需了解详情,请参阅依赖项的定义。

build 系统会确保在运行 extra_action 命令之前构建这些前提条件;它们是使用 exec配置, 因为它们必须在 build 期间作为工具运行。可以使用 $(location //x:y) 获取单个 tools 目标 //x:y 的路径。

所有工具及其数据依赖项都整合到单个树中 命令可以在其中使用相对路径。工作目录将 是该统一树的根。