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

回報問題 查看原始碼 夜間 7.2 7.1 7.0 6.5 6.4

注意:本節僅適用於 Bazel 開發人員, 規則作者。

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

  1. RegisteredToolchainsFunctionRegisteredExecutionPlatformsFunction 根據目前的 設定檔和 WORKSPACE 檔案

  2. SingleToolchainResolutionFunction 解析了每個執行平台的單一工具鍊類型。也就是說, 每個執行平台會尋找最適合的註冊工具鍊 並符合下列條件:

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

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

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

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