注: このセクションは Bazel デベロッパーを対象としており、ルール作成者には必要ありません。
いくつかの SkyFunction クラスが ツールチェーン解決 プロセスを実装しています。
RegisteredToolchainsFunctionとRegisteredExecutionPlatformsFunctionは、現在の 構成と WORKSPACE ファイルに基づいて、使用可能なツールチェーンと実行プラットフォームを検索します。SingleToolchainResolutionFunctionは、実行プラットフォームごとに 1 つのツールチェーン タイプを解決します。つまり、実行プラットフォームごとに、次の条件に基づいて使用する最適な登録済みツールチェーンを検索します。target_compatible_with属性を確認して、ツールチェーンとターゲット プラットフォームに互換性があることを確認します。exec_compatible_with属性を確認して、ツールチェーンと実行プラットフォームに互換性があることを確認します。- 複数のツールチェーンが残っている場合は、優先度の高いもの(最初に登録されたもの)を選択します。
ToolchainResolutionFunctionは、リクエストされたツールチェーン タイプごとにSingleToolchainResolutionFunctionを呼び出し、 使用する最適な実行プラットフォームを決定します。- まず、リクエストされたツールチェーン タイプごとに有効なツールチェーンがない実行プラットフォームを削除します。
- 複数の実行プラットフォームが残っている場合は、優先度の高いもの(最初に登録されたもの)を選択します。
- ツールチェーンの移行によって実行プラットフォームがすでに設定されている場合は、後述のように最初に選択されます。
ツールチェーンと構成で説明したように、
ターゲットからツールチェーンへの依存関係では、両方の実行プラットフォームを同じにする特別な構成が使用されます。「ツールチェーンの移行」という名前ですが、これは構成の移行として実装されるのではなく、ConfiguredTargetKeyというToolchainDependencyConfiguredTargetKeyの特別なサブクラスとして実装されます。このサブクラスには、ConfiguredTargetKey
の他のデータに加えて、実行プラットフォームのラベルも含まれます。ToolchainResolutionFunction
が使用する実行プラットフォームを検討している場合、ToolchainDependencyConfiguredTargetKey
からの強制実行プラットフォームが有効であれば、優先度が最も高くなくても使用されます。
注: 強制実行プラットフォームが無効な場合(有効なツールチェーンがない場合、またはルールやターゲットの実行制約が原因の場合)、代わりに優先度の高い有効な実行プラットフォームが使用されます。