Правила дополнительных действий

Правила

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)

ВНИМАНИЕ! Дополнительные действия не рекомендуются. Вместо этого используйте аспекты .

Правило action_listener само по себе не производит никакого вывода. Вместо этого он позволяет разработчикам инструментов вставлять extra_action в систему сборки, предоставляя сопоставление между action и extra_action .

Аргументы этого правила сопоставляют мнемонику действий с правилами extra_action .

Указав параметр --experimental_action_listener=<label> , сборка будет использовать указанный action_listener для вставки extra_action в граф сборки.

Пример

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

Name ; required

Уникальное имя для этой цели.

extra_actions

List of labels ; required

Список целей extra_action , которые этот action_listener должен добавить в граф построения. Например [ "//my/tools:analyzer" ] .
mnemonics

List of strings; required

Список мнемоник действий, которые этот action_listener должен прослушивать, например [ "Javac" ] .

Мнемоники не являются общедоступным интерфейсом. Нет никакой гарантии, что мнемоники и их действия не изменятся.

экстра_действие

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 не дает никаких значимых результатов, если указано как обычная цель сборки. Вместо этого он позволяет разработчикам инструментов вставлять дополнительные действия в граф построения, которые затеняют существующие действия.

См. action_listener для получения подробной информации о том, как включить extra_action s.

extra_action запускаются как командная строка. Инструмент командной строки получает доступ к файлу, содержащему буфер протокола как $(EXTRA_ACTION_FILE) с подробной информацией об исходном действии, которое он затеняет. Он также имеет доступ ко всем входным файлам, к которым имеет доступ исходное действие. Дополнительные сведения о данных, хранящихся в буфере протокола, см. в разделе extra_actions_base.proto . Каждый прото-файл содержит сообщение ExtraActionInfo.

Как и все другие действия, дополнительные действия изолированы и должны быть разработаны с учетом этого.

Аргументы

Атрибуты
name

Name ; required

Уникальное имя для этой цели.

Вы можете ссылаться на это правило по label в аргументе extra_actions правил action_listener .
cmd

String; required

Команда для запуска.

Подобно атрибуту genrule cmd со следующими отличиями:

  1. Нет эвристического расширения метки. Расширяются только метки, использующие $(location...).

  2. К строке применяется дополнительный проход для замены всех вхождений выходных данных, созданных из атрибута out_templates . Все вхождения $(output out_template ) заменяются путем к файлу, обозначенному label .

    Например, out_template $(ACTION_ID).analysis можно сопоставить с $(output $(ACTION_ID).analysis) .

    По сути, это та же замена, что и $(location) , но с другой областью действия.

out_templates

List of strings; optional

Список шаблонов для файлов, сгенерированных командой extra_action .

Шаблон может использовать следующие переменные:

  • $(ACTION_ID), идентификатор, однозначно идентифицирующий это extra_action . Используется для создания уникального выходного файла.

requires_action_output

Boolean; optional; default is False

Указывает, что это extra_action требует, чтобы выходные данные исходного действия присутствовали в качестве входных данных для этого extra_action .

Если задано значение true (по умолчанию — false), extra_action может предположить, что исходные выходные данные действия доступны как часть его входных данных.

tools

List of labels ; optional

Список зависимостей tool для этого правила.

См. определение зависимостей для получения дополнительной информации.

Система сборки гарантирует, что эти предварительные условия будут собраны до запуска команды extra_action ; они создаются с использованием конфигурации host , поскольку они должны запускаться как инструмент во время самой сборки. Путь к отдельной цели tools //x:y можно получить с помощью $(location //x:y) .

Все инструменты и их зависимости данных объединены в единое дерево, внутри которого команда может использовать относительные пути. Рабочий каталог будет корнем этого единого дерева.