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

注意:本節是用於 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 的強制執行平台有效,即使其並非最高優先順序,仍也會使用。

注意:如果強制執行平台無效 (因為沒有有效的工具鍊,或者因為規則或目標的執行限制),則優先程度最高的有效執行作業系統將改用這個平台。