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