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

注: このセクションは 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 からの強制実行プラットフォームが有効であれば、優先度が最も高くなくても使用されます。

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