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

回報問題 查看原始碼 夜間 7.4 ,直接在 Google Cloud 控制台實際操作。 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

幾個 SkyFunction 類別會實作工具鏈解析程序:

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

  2. SingleToolchainResolutionFunction 解析了每個執行平台的單一工具鍊類型。也就是說,對於每個執行平台,它會根據下列條件找出最佳的已註冊工具鏈:

    1. 檢查目標平台,確認工具鍊與目標平台相容 target_compatible_with 屬性。
    2. 確定工具鍊與執行平台相容,方法是: 檢查 exec_compatible_with 屬性。
    3. 如果留下多個工具鏈,請選擇優先順序最高的工具鏈 (即最先註冊的工具鏈)。
  3. ToolchainResolutionFunction 呼叫 每個要求的工具鍊類型為 SingleToolchainResolutionFunction,而 接著會決定最適合使用的執行平台

    1. 首先,請移除所有無效的執行平台 每個要求的工具鍊類型建立一個工具鍊。
    2. 如果保留多個執行平台,請選擇最高優先順序 也就是最先註冊的 ID
      1. 如果執行平台已由工具鏈轉換程序設定,系統會先選取該平台,如下所述。

工具鏈和設定一文所述,從目標到工具鏈的依附元件會使用特殊設定,強制執行平台與目標的執行平台相同。除名稱外 「工具鍊轉換」,這並不是做為設定實作 而是做為 ConfiguredTargetKey,呼叫 ToolchainDependencyConfiguredTargetKey。 除了 ConfiguredTargetKey 中的其他資料外,這個子類別還會保留執行平台的標籤。ToolchainResolutionFunction為 考慮要使用哪個執行平台 (如果強制執行平台) 就會使用 ToolchainDependencyConfiguredTargetKey 就不會是優先級最高的委刊項

注意:如果強制執行平台無效 (因為沒有 有效工具鍊,或是因規則或目標的執行限製而造成) 那麼就會改用優先順序最高的有效執行平台。