Observação: esta seção é destinada a desenvolvedores do Bazel e não é necessária para autores de regras.
Várias classes SkyFunction implementam o processo de resolução da cadeia de ferramentas:
RegisteredToolchainsFunctioneRegisteredExecutionPlatformsFunctionencontram cadeias de ferramentas e plataformas de execução disponíveis com base na configuração atual e no arquivo WORKSPACE.SingleToolchainResolutionFunctionresolve um único tipo de cadeia de ferramentas para cada plataforma de execução. Ou seja, para cada plataforma de execução, ele encontra a melhor cadeia de ferramentas registrada para uso com base nos seguintes critérios:- Verifique se a cadeia de ferramentas e a plataforma de destino são compatíveis conferindo
o
target_compatible_withatributo. - Verifique se a cadeia de ferramentas e a plataforma de execução são compatíveis conferindo o atributo
exec_compatible_with. - Se várias cadeias de ferramentas forem deixadas, escolha a de maior prioridade (a que foi registrada primeiro).
- Verifique se a cadeia de ferramentas e a plataforma de destino são compatíveis conferindo
o
ToolchainResolutionFunctionchamaSingleToolchainResolutionFunctionpara cada tipo de cadeia de ferramentas solicitado e determina a melhor plataforma de execução a ser usada.- Primeiro, remova qualquer plataforma de execução que não tenha uma cadeia de ferramentas válida para cada tipo de cadeia de ferramentas solicitado.
- Se várias plataformas de execução forem deixadas, escolha a de maior prioridade (a que foi registrada primeiro).
- Se a plataforma de execução já estiver definida pela transição da cadeia de ferramentas , ela será selecionada primeiro, conforme descrito abaixo.
Conforme discutido em Cadeias de ferramentas e configurações,
a dependência de um destino para uma cadeia de ferramentas usa uma configuração especial que
força a plataforma de execução a ser a mesma para ambos. Apesar do nome
"transição da cadeia de ferramentas", isso não é implementado como uma transição
de configuração, mas como uma subclasse especial de
ConfiguredTargetKey, chamada
ToolchainDependencyConfiguredTargetKey.
Além dos outros dados em ConfiguredTargetKey, essa subclasse também contém
o rótulo da plataforma de execução. Quando ToolchainResolutionFunction está
considerando qual plataforma de execução usar, se a plataforma de execução forçada
do ToolchainDependencyConfiguredTargetKey for válida, ela será usada mesmo
que não seja a de maior prioridade.
Observação: se a plataforma de execução forçada não for válida (porque não há cadeias de ferramentas válidas ou devido a restrições de execução da regra ou do destino), a plataforma de execução válida de maior prioridade será usada.