工具鍊解決方案實作詳細資料

回報問題 查看來源

注意:本節適用於 Bazel 開發人員,而規則作者不需要。

部分 SkyFunction 類別會實作工具鍊解析度程序:

  1. RegisteredToolchainsFunctionRegisteredExecutionPlatformsFunction 會根據目前的設定和 WORKSPACE 檔案,尋找可用的工具鍊和執行平台。

  2. SingleToolchainResolutionFunction 會解析每個執行平台的單一工具鍊類型。也就是說,每個執行平台都會根據下列條件,找出最適合使用的註冊工具鍊:

    1. 請檢查 target_compatible_with 屬性,確認工具鍊與目標平台相容。
    2. 檢查 exec_compatible_with 屬性,確認工具鍊和執行平台相容。
    3. 如果保留多個工具鍊,請選擇最高優先順序的工具鍊 (先註冊的工具鍊)。
  3. ToolchainResolutionFunction 會對每個要求的工具鍊類型呼叫 SingleToolchainResolutionFunction,然後判斷最適合使用的執行平台。

    1. 首先,請針對各個要求的工具鍊類型,移除所有未包含有效工具鍊的執行平台。
    2. 如果保留多個執行平台,請選擇最高優先順序 (先註冊的平台)。
      1. 如果工具鍊轉換已設定執行平台,系統會先按照下列方式選取執行平台。

工具鍊與設定中所述,從目標到工具鍊的依附元件會採用特殊設定,強制兩者的執行平台都相同。雖然名為「工具鍊轉換」的意思,但這並不是做為設定轉換的實作,而是做為 ConfiguredTargetKey 的特殊子類別,稱為 ToolchainDependencyConfiguredTargetKey。除了 ConfiguredTargetKey 中的其他資料外,這個子類別也會保留執行平台的標籤。當 ToolchainResolutionFunction 考慮要使用哪個執行平台時,如果來自 ToolchainDependencyConfiguredTargetKey 的強制執行平台有效,即使並非最高優先順序,系統也會使用該執行平台。

注意:如果強制執行平台無效 (原因是沒有有效的工具鍊,或是因規則或目標的執行限制所致),系統會改用優先順序最高的有效執行平台。