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

問題を報告 ソースを表示

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

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

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

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

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

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

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

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