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

問題を報告する ソースを表示 Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

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

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

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

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

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

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

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