ツールチェーンの解決の実装の詳細

注: このセクションは Bazel デベロッパーを対象としており、ルールの作成者が行う必要はありません。

SkyFunction クラスの中には、ツールチェーンの解決プロセスを実装するものがあります。

  1. RegisteredToolchainsFunctionRegisteredExecutionPlatformsFunction は、現在の構成と WORKSPACE ファイルに基づいて、使用可能なツールチェーンと実行プラットフォームを見つけます。

  2. SingleToolchainResolutionFunction は、すべての実行プラットフォームに対して単一のツールチェーン タイプを解決します。つまり、すべての実行プラットフォームについて、以下の基準に基づいて最適なツールチェーンが使用できるようになっています。

    1. target_compatible_with 属性をチェックして、ツールチェーンとターゲット プラットフォームに互換性があることを確認します。
    2. exec_compatible_with 属性をチェックして、ツールチェーンと実行プラットフォームに互換性があることを確認します。
    3. 複数のツールチェーンが残っている場合は、優先度の最も高いツールチェーン(最初に登録したツールチェーン)を選択します。
  3. ToolchainResolutionFunction は、リクエストされたツールチェーンのタイプごとに SingleToolchainResolutionFunction を呼び出し、使用する最適な実行プラットフォームを決定します。

    1. まず、リクエストされたツールチェーンのタイプごとに有効なツールチェーンのない実行プラットフォームを削除します。
    2. 実行プラットフォームが複数ある場合は、優先度の最も高いプラットフォーム(最初に登録したもの)を選択します。
      1. 実行プラットフォームがツールチェーンの移行によってすでに設定されている場合は、以下で説明するように、最初に選択されます。

ツールチェーンと構成で説明したように、ターゲットからツールチェーンへの依存関係には、特別な構成が使用され、実行プラットフォームを両方とも同じにします。これは「ツールチェーン遷移」という名前ですが、構成遷移として実装されるのではなく、特別なサブクラスとして実装されます。ConfiguredTargetKeyToolchainDependencyConfiguredTargetKey 。 このサブクラスは、ConfiguredTargetKey の他のデータに加えて、実行プラットフォームのラベルも保持します。ToolchainResolutionFunction がどの実行プラットフォームを使用するかを検討する場合、ToolchainDependencyConfiguredTargetKey の強制実行プラットフォームが有効であれば、優先度が最も高くなくても使用されます。

注: 有効なツールチェーンがないか、ルールまたはターゲットからの実行の制約により、強制実行プラットフォームが有効でない場合は、優先度が最も高い有効な実行になります。プラットフォームが使用されます。