Observação: esta seção é destinada a desenvolvedores do Bazel e não é necessária para os autores das regras.
Várias classes SkyFunction implementam o processo de resolução de conjunto de ferramentas:
RegisteredToolchainsFunction
eRegisteredExecutionPlatformsFunction
encontram conjuntos de ferramentas e plataformas de execução disponíveis, com base na configuração atual e no arquivo WORKSPACE.SingleToolchainResolutionFunction
resolve um único tipo de conjunto de ferramentas para cada plataforma de execução. Ou seja, para cada plataforma de execução, ele encontra o melhor conjunto de ferramentas registrado a ser usado com base nos seguintes critérios:- Verifique se o conjunto de ferramentas e a plataforma de destino são compatíveis verificando
o atributo
target_compatible_with
. - Verifique o conjunto de ferramentas e a plataforma de execução verificando o atributo
exec_compatible_with
. - Se houver vários conjuntos de ferramentas restantes, escolha o que tiver a prioridade mais alta (o que foi registrado primeiro).
- Verifique se o conjunto de ferramentas e a plataforma de destino são compatíveis verificando
o atributo
O
ToolchainResolutionFunction
chamaSingleToolchainResolutionFunction
para cada tipo de conjunto 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 um conjunto de ferramentas válido para cada tipo de conjunto de ferramentas solicitado.
- Se houver várias plataformas de execução restantes, escolha a que tiver a prioridade mais alta (a que foi registrada primeiro).
- Se a plataforma de execução já estiver definida pela transição do conjunto de ferramentas, ela será selecionada primeiro, conforme descrito abaixo.
Conforme discutido em Conjuntos de ferramentas e configurações,
a dependência de um destino para um conjunto de ferramentas usa uma configuração especial que
força a plataforma de execução a ser igual para ambos. Apesar do nome
"Transição de conjunto de ferramentas", não é implementado como uma transição de
configuração, mas como uma subclasse especial de
ConfiguredTargetKey
, chamada
ToolchainDependencyConfiguredTargetKey
.
Além dos outros dados do ConfiguredTargetKey
, essa subclasse também contém
o rótulo da plataforma de execução. Quando ToolchainResolutionFunction
estiver
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á conjuntos de ferramentas válidos ou devido a restrições de execução da regra ou destino), a plataforma de execução válida de maior prioridade será usada.