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