注意:本節適用於 Bazel 開發人員,而規則作者不需要。
部分 SkyFunction 類別會實作工具鍊解析度程序:
RegisteredToolchainsFunction
和RegisteredExecutionPlatformsFunction
會根據目前的設定和 WORKSPACE 檔案,尋找可用的工具鍊和執行平台。SingleToolchainResolutionFunction
會解析每個執行平台的單一工具鍊類型。也就是說,每個執行平台都會根據下列條件,找出最適合使用的註冊工具鍊:- 請檢查
target_compatible_with
屬性,確認工具鍊與目標平台相容。 - 檢查
exec_compatible_with
屬性,確認工具鍊和執行平台相容。 - 如果保留多個工具鍊,請選擇最高優先順序的工具鍊 (先註冊的工具鍊)。
- 請檢查
ToolchainResolutionFunction
會對每個要求的工具鍊類型呼叫SingleToolchainResolutionFunction
,然後判斷最適合使用的執行平台。- 首先,請針對各個要求的工具鍊類型,移除所有未包含有效工具鍊的執行平台。
- 如果保留多個執行平台,請選擇最高優先順序 (先註冊的平台)。
- 如果工具鍊轉換已設定執行平台,系統會先按照下列方式選取執行平台。
如工具鍊與設定中所述,從目標到工具鍊的依附元件會採用特殊設定,強制兩者的執行平台都相同。雖然名為「工具鍊轉換」的意思,但這並不是做為設定轉換的實作,而是做為 ConfiguredTargetKey
的特殊子類別,稱為 ToolchainDependencyConfiguredTargetKey
。除了 ConfiguredTargetKey
中的其他資料外,這個子類別也會保留執行平台的標籤。當 ToolchainResolutionFunction
考慮要使用哪個執行平台時,如果來自 ToolchainDependencyConfiguredTargetKey
的強制執行平台有效,即使並非最高優先順序,系統也會使用該執行平台。
注意:如果強制執行平台無效 (原因是沒有有效的工具鍊,或是因規則或目標的執行限制所致),系統會改用優先順序最高的有效執行平台。