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