其他動作規則

回報問題 查看原始碼 Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

規則

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

action_listener 規則本身不會產生任何輸出內容。相反地,它允許工具開發人員透過提供從動作到 extra_action 的對應,將 extra_action 插入建構系統。

這個規則的引數會將動作助憶法對應至 extra_action 規則。

指定 --experimental_action_listener=<label> 選項後,建構作業會使用指定的 action_listenerextra_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

名稱 (必填)

這個目標的專屬名稱。

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

extra_action 規則指定為一般建構目標時,不會產生任何有意義的輸出內容。而是允許工具開發人員在建構圖中插入額外動作,以便遮蔽現有的動作。

如要進一步瞭解如何啟用 extra_action,請參閱 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),這個 ID 可用來唯一識別 extra_action。用於產生專屬的輸出檔案。

requires_action_output

布林值;預設值為 False

表示此 extra_action 要求原始動作的輸出內容必須做為此 extra_action 的輸入內容。

如果為 True (預設為 False),extra_action 可假設原始動作輸出內容可做為輸入內容的一部分。

tools

標籤清單;預設為 []

此規則的 tool 依附元件清單。

詳情請參閱依附元件的定義。

建構系統會確保在執行 extra_action 指令前建構這些必要條件;這些必要條件會使用 exec 設定檔建構,因為必須在建構期間以工具形式執行。您可以使用 $(location //x:y) 取得個別 tools 目標 //x:y 的路徑。

所有工具及其資料依附元件都會整合為單一樹狀結構,其中的指令可使用相對路徑。工作目錄將是該統一樹狀結構的根目錄。