Observação: esta seção é destinada a desenvolvedores do Bazel e não é necessária para autores de regras.
Várias classes do SkyFunction implementam o processo de resolução do conjunto de ferramentas:
RegisteredToolchainsFunction
eRegisteredExecutionPlatformsFunction
encontram os conjuntos de ferramentas e plataformas de execução disponíveis com base na configuração e no arquivo WORKSPACE atuais.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 para usar com base nos seguintes critérios:- Certifique-se de que o conjunto de ferramentas e a plataforma de destino sejam compatíveis verificando
o atributo
target_compatible_with
. - Verifique se o conjunto de ferramentas e a plataforma de execução são compatíveis
verificando o atributo
exec_compatible_with
. - Se sobrar vários conjuntos de ferramentas, escolha o de maior prioridade (aquele que foi registrado primeiro).
- Certifique-se de que o conjunto de ferramentas e a plataforma de destino sejam compatíveis verificando
o atributo
ToolchainResolutionFunction
chamaSingleToolchainResolutionFunction
para cada tipo de conjunto de ferramentas solicitado e, em seguida, 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 sobrar mais de uma plataforma de execução, escolha a de maior prioridade (aquela 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 a mesma para ambos. Apesar do nome
"transição de conjunto de ferramentas", ela não é implementada 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
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 tenha a prioridade mais alta.
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 do destino), a plataforma de execução válida de maior prioridade será usada.