所有 .bzl 檔案都提供全域方法。
成員
- analysis_test_transition
- aspect
- configuration_field
- depset
- exec_group
- exec_transition
- module_extension
- 供應商
- repository_rule
- rule
- 選取
- subrule
- tag_class
- 能見度
analysis_test_transition
transition analysis_test_transition(settings)
建立要套用至分析測試規則依附元件的設定轉換。這項轉換作業僅適用於含有 analysis_test = True
的規則屬性。這類規則在功能中受到限制 (例如依附元件樹狀結構的大小有限),因此相較於使用 transition()
建立的轉場效果,使用這個函式建立的轉場效果可能受限。
這個函式主要用於協助分析測試架構核心程式庫。如需最佳做法,請參閱說明文件 (或實作方式)。
參數
參數 | 說明 |
---|---|
settings
|
dict;
必要 包含設定資訊的字典,這些設定應透過此設定轉換作業設定。鍵是建構設定標籤,值則是新的轉換後值。所有其他設定則維持不變。用於宣告分析測試必須設定的特定設定,才能通過測試。 |
切面
Aspect aspect(implementation, attr_aspects=[], toolchains_aspects=[], attrs={}, required_providers=[], required_aspect_providers=[], provides=[], requires=[], fragments=[], host_fragments=[], toolchains=[], incompatible_use_toolchain_transition=False, doc=None, *, apply_to_generating_rules=False, exec_compatible_with=[], exec_groups=None, subrules=[])建立新的面向。此函式的結果必須儲存在全域值中。詳情請參閱切面簡介。
參數
參數 | 說明 |
---|---|
implementation
|
function;必要 實作這個切面的 Starlark 函式,其中包含兩個參數:Target (套用切面的目標) 和 ctx (目標建立來源的規則結構定義)。目標屬性可透過 ctx.rule 欄位使用。這個函式會在分析階段評估,每次將某個面向套用至目標時都會評估。 |
attr_aspects
|
字串序列;預設為 [] 。屬性名稱清單。此面向會沿著目標屬性中指定的依附元件 (使用這些名稱) 傳播。常見的值包括 deps 和 exports 。清單也可以包含單一字串 "*" ,以便沿著目標的所有依附元件傳播。 |
toolchains_aspects
|
sequence;預設為 [] 。工具鍊類型的清單。切面會套用至符合這些工具鍊類型的目標工具鍊。 |
attrs
|
dict;
預設為 {} 宣告各個面向的所有屬性的字典。它會將屬性名稱對應至屬性物件,例如 attr.label 或 attr.string (請參閱 attr 模組)。實作函式可使用面向實體屬性做為 ctx 參數的欄位。以 明確屬性必須包含 宣告的屬性會將 |
required_providers
|
sequence;預設為 [] 。 這個屬性可讓切面限制其傳播範圍,只限於規則宣傳其必要供應器的目標。這個值必須是清單,且只能包含個別供應商或供應商清單,不能同時包含兩者。例如, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] 是有效值,而 [FooInfo, BarInfo, [BazInfo, QuxInfo]] 無效。未巢狀的供應商清單會自動轉換為包含一個供應商清單的清單。也就是說, 如要讓部分規則 (例如 |
required_aspect_providers
|
sequence;預設值為 [] 。 這個屬性可讓這個面向檢查其他面向。值必須是包含個別供應商或供應商清單的清單,但不能同時包含兩者。舉例來說, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] 是有效值,而 [FooInfo, BarInfo, [BazInfo, QuxInfo]] 則不是有效值。未巢狀的供應商清單會自動轉換為包含一個供應商清單的清單。也就是說, 如要讓其他面向 (例如 |
provides
|
sequence;
預設為 [] implementation 函式必須傳回的供應器清單。 如果實作函式省略傳回值中列出的任何提供者類型,則會發生錯誤。不過,實作函式可能會傳回此處未列出的其他供應工具。 清單的每個元素都是 |
requires
|
切面的序列;預設為 [] 。 必須在這個切面之前傳播的切面清單。 |
fragments
|
字串的序列;預設值為 [] 。 列出子項在目標設定中所需的設定片段名稱。 |
host_fragments
|
字串的序列;預設值為 [] 。 主機設定中,此面向主機的元素所需的設定片段名稱清單。 |
toolchains
|
sequence;預設值為 [] 。如果已設定,則此面向所需的工具鍊組合。清單可包含字串、標籤或 StarlarkToolchainTypeApi 物件,且可任意組合。系統會檢查目前的平台,並透過 ctx.toolchain 將工具鍊提供給面向實作。 |
incompatible_use_toolchain_transition
|
bool;預設值為 False 。已淘汰,不再使用,應予以移除。 |
doc
|
string 或 None ;
預設為 None 說明說明文件產生工具可擷取的層面。 |
apply_to_generating_rules
|
bool;
預設為 False 如果為 true,則在套用至輸出檔案時,會改為套用至輸出檔案的產生規則。 舉例來說,假設某個層面會透過屬性 `deps` 傳播,並套用至目標 `alpha`。假設 `alpha` 有 `deps = [':beta_output']`,其中 `beta_output` 是目標 `beta` 的已宣告輸出內容。假設 `beta` 有目標 `charlie` 做為其中一個 `deps`。如果層面為 `apply_to_generating_rules=True`,則層面會透過 `alpha`、`beta` 和 `charlie` 傳播。如果為 False,則層面只會傳播至 `alpha`。 預設為 False。 |
exec_compatible_with
|
字串的序列;
預設為 [] 執行平台的限制清單,適用於此層面的所有執行個體。 |
exec_groups
|
dict 或 None ;預設為 None 。執行群組名稱 (字串) 與 exec_group 的字典。如果設定這個項目,讓切面在單一執行個體內的多個執行平台中執行動作。詳情請參閱執行群組說明文件。 |
subrules
|
子規則的序列;
預設為 [] (實驗功能):這個面向使用的子規則清單。 |
configuration_field
LateBoundDefault configuration_field(fragment, name)參照 label 類型屬性的延遲繫結預設值。如果必須先建構設定才能判斷值,則值為「延遲」。任何使用此值做為值的屬性都必須是私有屬性。
以下是範例使用方式:
定義規則屬性:
'_foo': attr.label(default=configuration_field(fragment='java', name='toolchain'))
在規則實作中存取:
def _rule_impl(ctx): foo_info = ctx.attr._foo ...
參數
參數 | 說明 |
---|---|
fragment
|
string;必要 包含延遲值的設定片段名稱。 |
name
|
string;
必填 從設定片段取得的值名稱。 |
depset
depset depset(direct=None, order="default", *, transitive=None)建立 depset。
direct
參數是 depset 的直接元素清單,而 transitive
參數則是 depset 的清單,其中元素會成為所建立 depset 的間接元素。order
參數會指定將 depset 轉換為清單時,元素的傳回順序。詳情請參閱「Depset 總覽」。依據 type(x)
運算式取得的 depset 所有元素 (直接和間接) 都必須屬於相同類型。
由於以雜湊為基礎的集合會在疊代期間用於消除重複項目,因此 depset 的所有元素都應可雜湊。不過,目前並未在所有建構函式中一致檢查此不變量。使用 --incompatible_always_check_depset_elements 標記啟用一致檢查功能,這將成為日後版本的預設行為;請參閱 Issue 10313。
此外,元素目前必須是不可變動的,但這項限制日後會放寬。
建立的 depset 順序應與其 transitive
depset 順序相容。"default"
順序與任何其他順序相容,所有其他順序只與自身相容。
參數
參數 | 說明 |
---|---|
direct
|
sequence 或 None ;預設為 None 。depset 的直接元素清單。 |
order
|
string;
預設為 "default" 。 新 depset 的遍歷策略。如要查看可能的值,請參閱這裡。 |
transitive
|
depset 的序列;或 None ;
預設為 None depset 清單,其元素會成為 depset 的間接元素。 |
exec_group
exec_group exec_group(toolchains=[], exec_compatible_with=[])建立執行群組,可用於在規則導入期間為特定執行平台建立動作。
參數
參數 | 說明 |
---|---|
toolchains
|
sequence;預設為 [] 。這個執行群組所需的工具鍊組合。清單中可包含 String、Label 或 StarlarkToolchainTypeApi 物件,任意組合。 |
exec_compatible_with
|
字串的序列;預設值為 [] 。 執行平台的限制清單。 |
exec_transition
transition exec_transition(implementation, inputs, outputs)用於定義執行轉換的
transition()
專用版本。如需最佳做法,請參閱說明文件 (或實作方式)。只能透過 Bazel 內建項目使用。
參數
參數 | 說明 |
---|---|
implementation
|
可呼叫的函式;
必填 |
inputs
|
字串序列;
必要 |
outputs
|
字串序列;
必要 |
module_extension
unknown module_extension(implementation, *, tag_classes={}, doc=None, environ=[], os_dependent=False, arch_dependent=False)建立新的模組擴充功能。將其儲存在全域值中,以便匯出並在
use_extension
的 MODULE.bazel 檔案中使用。
參數
參數 | 說明 |
---|---|
implementation
|
可呼叫;必要 實作此模組擴充功能的函式。必須採用單一參數 module_ctx 。系統會在建構作業開始時呼叫這個函式一次,以判斷可用的套件集。 |
tag_classes
|
dict;預設為 {} 。這是用來宣告擴充功能所使用的所有標記類別的字典。它會將標記類別名稱對應至 tag_class 物件。 |
doc
|
字串或 None ;預設為 None 。 說明模組擴充功能,可由說明文件產生工具擷取。 |
environ
|
字串的 sequence;預設值為 [] 提供這個模組擴充功能依附的環境變數。如果清單中的環境變數有所變更,擴充功能就會重新評估。 |
os_dependent
|
bool;
預設值為 False 指出這個擴充功能是否會依作業系統而異 |
arch_dependent
|
bool;
預設值為 False 指出這個擴充功能是否會依架構而異 |
供應商
unknown provider(doc=None, *, fields=None, init=None)定義供應者符號。這個函式產生的值必須儲存在全域值中,才能在規則或切面實作中使用。您可以將產生的值做為函式來呼叫,藉此將提供者例項化,也可以直接將該值做為索引鍵,從目標中擷取該提供者的例項。示例:
MyInfo = provider() ... def _my_library_impl(ctx): ... my_info = MyInfo(x = 2, y = 3) # my_info.x == 2 # my_info.y == 3 ...
如需使用供應器的完整指南,請參閱「規則 (供應器)」。
如果未指定 init
,則傳回 Provider
可呼叫的值。
如果指定 init
,則會傳回 2 個元素的元組:Provider
可呼叫值和原始建構函式可呼叫值。詳情請參閱「 規則 (自訂供應者的自訂初始化)」一文,以及下方 init
參數的討論內容。
參數
參數 | 說明 |
---|---|
doc
|
字串或 None ;
預設值為 None 提供者說明,可由文件產生工具擷取。 |
fields
|
字串的序列;或 字典;或 None ;預設為 None 。 如果指定,則會限制允許的欄位集。 可能的值包括:
|
init
|
可叫用的函式;或 None ;
預設值為 None 在例項化期間,用於預先處理及驗證提供者欄位值的選用回呼。如果指定 init ,provider() 會傳回 2 個元素的元組:一般提供者符號和原始建構函式。具體說明如下。如需一目了然的討論和用途,請參閱「規則 (自訂供應商初始化)」一文。 讓
init 回呼的情況下,呼叫符號 P 本身會做為對預設建構函式函式 c 的呼叫;換句話說,P(*args, **kwargs) 會傳回 c(*args, **kwargs) 。舉例來說,MyInfo = provider() m = MyInfo(foo = 1)會直接將 m 設為含有 m.foo == 1 的 MyInfo 例項。但如果指定
注意:上述步驟表示如果 因此, 指定 MyInfo, _new_myinfo = provider(init = ...) |
repository_rule
callable repository_rule(implementation, *, attrs=None, local=False, environ=[], configure=False, remotable=False, doc=None)建立新的存放區規則。將其儲存在全域值中,以便從
module_extension()
實作函式載入及呼叫,或由 use_repo_rule()
使用。
參數
參數 | 說明 |
---|---|
implementation
|
可呼叫的函式;
必填 實作此規則的函式。必須有單一參數 repository_ctx 。系統會在每個規則執行個體的載入階段呼叫這個函式。 |
attrs
|
dict 或 None ;預設為 None 。用來宣告存放區規則的所有屬性。會從屬性名稱對應至屬性物件 (請參閱 attr 模組)。開頭為 _ 的屬性為私有,可用於在檔案中新增對標籤的隱含依附元件 (存放區規則無法依附產生的構件)。系統會隱含新增 name 屬性,因此不必指定。宣告的屬性會將 |
local
|
bool;
預設值為 False 表示此規則會從本機系統擷取所有內容,並應在每次擷取時重新評估。 |
environ
|
字串的序列;預設值為 [] 。已淘汰。這個參數已淘汰。請改為遷移至 repository_ctx.getenv 。會提供此存放區規則依附的環境變數清單。如果清單中的環境變數發生變更,系統會重新擷取存放區。 |
configure
|
bool;
預設值為 False 表示存放區會檢查系統以便設定 |
remotable
|
bool;預設值為 False 。實驗功能。這個參數仍在實驗階段,可能隨時變更。請勿依賴這項功能。您可以設定 --experimental_repo_remote_exec Compatible with remote execution,以實驗方式啟用這項功能。 |
doc
|
字串或 None ;預設為 None 。 Repository 規則的說明,可由說明文件產生工具擷取。 |
規則
callable rule(implementation, *, test=unbound, attrs={}, outputs=None, executable=unbound, output_to_genfiles=False, fragments=[], host_fragments=[], _skylark_testable=False, toolchains=[], incompatible_use_toolchain_transition=False, doc=None, provides=[], dependency_resolution_rule=False, exec_compatible_with=[], analysis_test=False, build_setting=None, cfg=None, exec_groups=None, initializer=None, parent=None, extendable=None, subrules=[])建立新規則,可從 BUILD 檔案或巨集呼叫,用於建立目標。
您必須將規則指派給 .bzl 檔案中的全域變數,全域變數的名稱為規則名稱。
測試規則的名稱必須以 _test
結尾,但所有其他規則不得使用這個後置字串。(這項限制僅適用於規則,不適用於規則的目標)。
參數
參數 | 說明 |
---|---|
implementation
|
function;必要 實作這項規則的 Starlark 函式只能包含一個參數:ctx。系統會在分析階段為每個規則例項呼叫這項函式。可存取使用者提供的屬性。必須建立動作,產生所有宣告的輸出內容。 |
test
|
bool;預設值為 unbound 。是否為測試規則,也就是是否可成為 blaze test 指令的主體。系統會自動將所有測試規則視為可執行;因此,不必 (且不建議) 為測試規則明確設定 executable = True 。預設值為 False 。詳情請參閱 規則頁面。 |
attrs
|
dict;
預設值為 {} 這是宣告規則所有屬性的字典。它會將屬性名稱對應至屬性物件 (請參閱 attr 模組)。以 _ 開頭的屬性為私有,可用於在標籤上新增隱含的依附元件。系統會隱含新增 name 屬性,因此您不需要指定。以隱含方式新增 visibility 、deprecation 、tags 、testonly 和 features 屬性,且無法覆寫。大部分規則只需要幾個屬性。為限制記憶體用量,可宣告的屬性數量設有上限。宣告的屬性會將 |
outputs
|
字典;或 None ;或函式;預設為 None 。已淘汰。此參數已淘汰,並將在近期內移除。請勿依賴這項功能。 --incompatible_no_rule_outputs_param 會停用。請使用這個標記確認您的程式碼是否與即將移除的程式碼相容。這個參數已淘汰。遷移規則,改為使用 OutputGroupInfo 或 attr.output 。用於定義預先宣告輸出的結構定義。與 這個引數的值是字典,或是產生字典的回呼函式。回呼的運作方式與計算依附元件屬性類似:函式的參數名稱會與規則的屬性進行比對,舉例來說,如果您傳遞 字典中的每個項目都會建立預先宣告的輸出內容,其中索引鍵是 ID,值則是決定輸出標籤的字串範本。在規則的實作函式中,ID 會成為欄位名稱,用於存取
實際上,最常見的替換預留位置是 |
executable
|
bool;預設值為 unbound 指出這項規則是否為執行檔,亦即是否屬於 blaze run 指令。預設值為 False 。詳情請參閱「 規則」頁面。 |
output_to_genfiles
|
bool;預設值為 False 。 如果為 true,檔案會在 genfiles 目錄中產生,而非 bin 目錄。除非您需要為現有規則提供相容性 (例如產生 C++ 標頭檔案時),否則請勿設定此標記。 |
fragments
|
序列共 字串;預設值為 [] 規則所需的設定片段名稱清單,在目標設定中加入規則。 |
host_fragments
|
序列共 字串;預設值為[] 規則所需的設定片段名稱清單。 |
_skylark_testable
|
bool;
預設為 False (實驗功能) 如果為 true,則此規則會公開其動作,供依附於此的規則透過 Actions 供應器進行檢查。您也可以透過呼叫 ctx.created_actions(),讓規則本身使用提供者。這項功能僅應用於測試 Starlark 規則的分析時間行為。這個標記日後可能會移除。 |
toolchains
|
sequence;預設為 [] 如果已設定,則此規則需要的一系列工具鍊。清單可包含字串、標籤或 StarlarkToolchainTypeApi 物件,且可任意組合。系統會檢查目前的平台來尋找工具鏈,並透過 ctx.toolchain 將其提供給規則實作。 |
incompatible_use_toolchain_transition
|
bool;預設值為 False 。已淘汰,不再使用,應予以移除。 |
doc
|
string 或 None ;預設為 None 。 說明規則,可供文件產生工具擷取。 |
provides
|
sequence;預設值為 [] 這是實作函式必須傳回的提供者清單。 如果實作函式在傳回值中略過此處列出的供應者類型,就會發生錯誤。不過,實作函式可能會傳回此處未列出的其他供應工具。 清單的每個元素都是 |
dependency_resolution_rule
|
bool;預設值為 False 。如果設定此值,規則可透過在 Materializers 中標示為可用的屬性,成為依附元件。設定此標記的規則中,每個屬性都必須標示為在 Materializers 中可用。這樣一來,標示為「已過時」的規則就不會依附未標示為「已過時」的規則。 |
exec_compatible_with
|
字串的序列;預設為 [] 。 執行平台的限制清單,適用於此規則類型的所有目標。 |
analysis_test
|
bool;
預設值為 False 如果為 true,則系統會將此規則視為分析測試。 注意:分析測試規則主要使用核心 Starlark 程式庫提供的基礎架構定義。如需相關指南,請參閱「測試」一節。 如果將規則定義為分析測試規則,則可對其屬性使用透過 analysis_test_transition 定義的設定轉換,但選擇加入一些限制:
|
build_setting
|
BuildSetting;或 None ;
預設為 None 如果已設定,則會說明此規則是哪種 build setting 。請參閱 config 模組。如果設定此值,系統會自動將名為「build_setting_default」的必要屬性新增至此規則,類型則會對應至此處傳入的值。
|
cfg
|
預設為 None 如果已設定,則會指向規則在分析前套用至自身設定的設定轉換。 |
exec_groups
|
dict 或 None ;預設為 None 。執行群組名稱 (字串) 與 exec_group 的字典。如果設為 true,規則就能在單一指定目標內執行多個執行平台的動作。詳情請參閱執行群組說明文件。 |
initializer
|
預設為 None Experimental:Stalark 函式會初始化規則的屬性。 系統會在載入時為每個規則例項呼叫這個函式。這個方法會使用 必須傳回從屬性名稱到所需值的字典。未傳回的屬性則不受影響。如果傳回的值為 系統會先評估初始化項目,再評估屬性定義中指定的預設值。因此,如果初始化的簽章中包含預設值的參數,就會覆寫屬性定義中的預設值 (除非傳回 同樣地,如果初始化器簽章中的參數沒有預設值,該參數就會變成必要參數。在這種情況下,建議您省略屬性定義的預設/必要設定。 對於未處理的屬性,建議使用 在延伸規則的情況下,所有初始化器都會從子項開始,依序呼叫上層。每個初始化器只會傳遞其瞭解的公開屬性。 |
parent
|
預設為 None Experimental:擴充的 Stalark 規則。設定後,系統會合併公開屬性和宣傳的供應商。這項規則符合父項的 executable 和 test 。系統會合併 fragments 、toolchains 、exec_compatible_with 和 exec_groups 的值。您可能無法設定舊版或已淘汰的參數。父項的傳入設定轉換 cfg 會在 thisrule 的傳入設定後套用。 |
extendable
|
bool;或標籤;或字串;或 None ;預設為 None 實驗功能:允許清單的標籤,定義哪些規則可以擴充此規則。您也可以將其設為 True/False,一律允許/禁止延長。Bazel 預設一律允許擴充功能。 |
subrules
|
子規則的序列;預設值為 [] 。 (實驗功能):這項規則使用的子規則清單。 |
選取
unknown select(x, no_match_error='')
select()
是使規則屬性「可設定」的輔助函式。詳情請參閱建構百科全書。
參數
參數 | 說明 |
---|---|
x
|
dict;必要 將設定條件對應至值的 指示。每個鍵都是 標籤或標籤字串,用於識別 config_setting 或 constraint_value 例項。如要瞭解何時應使用標籤而非字串,請參閱 巨集說明文件。 |
no_match_error
|
字串;預設為 '' 。 如果沒有任何條件符合,可選擇回報自訂錯誤。 |
子規則
Subrule subrule(implementation, attrs={}, toolchains=[], fragments=[], subrules=[])建構子規則的新例項。這個函式的結果必須儲存在全域變數中,才能使用。
參數
參數 | 說明 |
---|---|
implementation
|
function;
必要 Starlark 函式,用於實作此子規則 |
attrs
|
dict;
預設為 {} 用於宣告子規則的所有 (私人) 屬性的字典。 子規則只能包含標籤類型 (例如標籤或標籤清單) 的私人屬性。與這些標籤相對應的已解析值會由 Bazel 自動傳遞至子規則的實作函式,並做為命名引數使用 (因此,實作函式必須接受與屬性名稱相符的命名參數)。這些值的類型如下:
|
toolchains
|
sequence;
預設為 [] 如果已設定,則為此子規則所需的工具鍊組合。清單可包含字串、標籤或 StarlarkToolchainTypeApi 物件,且可任意組合。系統會檢查目前的平台,並透過 ctx.toolchains 將工具鍊提供給子規則實作。請注意,如果設定此參數,就必須為消耗規則啟用 AEG。如果尚未遷移至 AEG,請參閱 https://bazel.build/extending/auto-exec-groups#migration-aegs。
|
fragments
|
字串的序列;預設為 [] 。 列出子規則在目標設定中所需的設定片段名稱。 |
subrules
|
子規則的序列;預設值為 [] 。 列出這個子規則所需的其他子規則。 |
tag_class
tag_class tag_class(attrs={}, *, doc=None)建立新的 tag_class 物件,為類別的代碼定義屬性架構,這些代碼是模組擴充功能可使用的資料物件。
參數
參數 | 說明 |
---|---|
attrs
|
dict;
預設為 {} 用於宣告此標記類別的所有屬性的字典。它會將屬性名稱對應至屬性物件 (請參閱 attr 模組)。 請注意,與 |
doc
|
string 或 None ;預設為 None 。 可由說明文件產生工具擷取的標記類別說明。 |
顯示設定
None
visibility(value)
設定目前正在初始化的 .bzl 模組的載入可見度。
模組的載入可見度會決定其他 BUILD 和 .bzl 檔案是否可以載入該模組。(這與基礎 .bzl 來源檔案的目標瀏覽權限不同,用於管理該檔案是否顯示為其他目標的依附元件)。載入可見度會在套件層級運作:如要載入模組,進行載入的檔案必須位於已授予模組可見度的套件中。無論可見性為何,模組一律會在其自身套件中載入。
每個 .bzl 檔案只能呼叫 visibility()
一次,且只能在頂層 (而非函式中) 呼叫。建議的樣式是將此呼叫放在 load()
陳述式下方,以及確定引數所需的任何簡短邏輯下方。
如果 --check_bzl_visibility
旗標設為 false,載入瀏覽權限違規事件時,系統會發出警告,但不會失敗版本。
參數
參數 | 說明 |
---|---|
value
|
必要 package_specification_strings 清單或單一 package_specification_string。 套件規格採用與
不允許使用「@」語法;所有規格都會相對於目前模組的存放區進行解讀。 如果 請注意,旗標 |