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

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

いくつかの SkyFunction クラスがツールチェーン解決プロセスを実装しています。

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

  2. SingleToolchainResolutionFunction は、実行プラットフォームごとに 1 つのツールチェーン タイプを解決します。つまり、実行プラットフォームごとに、次の条件に基づいて使用する最適な登録済みツールチェーンを見つけます。

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

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

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

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