注意:本節僅適用於 Bazel 開發人員, 規則作者。
部分 SkyFunction 類別會實作工具鍊解析度程序:
RegisteredToolchainsFunction
和RegisteredExecutionPlatformsFunction
。 根據目前的 設定檔和 WORKSPACE 檔案SingleToolchainResolutionFunction
敬上 解析了每個執行平台的單一工具鍊類型。也就是說, 每個執行平台會尋找最適合的註冊工具鍊 並符合下列條件:- 檢查目標平台,確認工具鍊與目標平台相容
target_compatible_with
屬性。 - 確定工具鍊與執行平台相容,方法是:
檢查
exec_compatible_with
屬性。 - 如果保留多個工具鍊,請選擇優先順序最高的其中一項工具鍊 ( 最先註冊的 ID)。
- 檢查目標平台,確認工具鍊與目標平台相容
ToolchainResolutionFunction
呼叫 每個要求的工具鍊類型為SingleToolchainResolutionFunction
,而 接著會決定最適合使用的執行平台- 首先,請移除所有無效的執行平台 每個要求的工具鍊類型建立一個工具鍊。
- 如果保留多個執行平台,請選擇最高優先順序
也就是最先註冊的 ID
- 如果執行平台已由工具鍊設定 但系統會先按照下列說明選取。
如工具鍊和設定中所述,
從目標到工具鍊的依附元件會使用特殊設定
會強制讓兩者的執行平台相同。除名稱外
「工具鍊轉換」,這並不是做為設定實作
而是做為
ConfiguredTargetKey
,呼叫
ToolchainDependencyConfiguredTargetKey
。
除了 ConfiguredTargetKey
中的其他資料以外,這個子類別也會保留
執行平台的標籤ToolchainResolutionFunction
為
考慮要使用哪個執行平台 (如果強制執行平台)
就會使用 ToolchainDependencyConfiguredTargetKey
就不會是優先級最高的委刊項
注意:如果強制執行平台無效 (因為沒有 有效工具鍊,或是因規則或目標的執行限製而產生), 那麼就會改用優先順序最高的有效執行平台。