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
encontrar os conjuntos de ferramentas e plataformas de execução disponíveis com base e o arquivo WORKSPACE.SingleToolchainResolutionFunction
Resolve um único tipo de conjunto de ferramentas para cada plataforma de execução. Ou seja, para para cada plataforma de execução, ele encontra o melhor conjunto de ferramentas registrado para usar com base com os seguintes critérios:- Verificar se o conjunto de ferramentas e a plataforma de destino são compatíveis
o atributo
target_compatible_with
. - Garantir que o conjunto de ferramentas e a plataforma de execução sejam compatíveis:
verificando o atributo
exec_compatible_with
. - Se mais de um conjunto de ferramentas ficar, escolha o de prioridade mais alta (o ou seja, aquele que foi registrado primeiro).
- Verificar se o conjunto de ferramentas e a plataforma de destino são compatíveis
o atributo
Chamadas do
ToolchainResolutionFunction
SingleToolchainResolutionFunction
para cada tipo de conjunto de ferramentas solicitado e e determina a melhor plataforma de execução para usar.- Primeiro, remova qualquer plataforma de execução que não tenha uma para cada tipo de conjunto de ferramentas solicitado.
- Se sobrar mais de uma plataforma de execução, escolha a de maior prioridade
um (aquele que foi registrado primeiro).
- Se a plataforma de execução já estiver definida pelo 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 do conjunto de ferramentas", não é implementado como uma configuração
transição, mas como uma subclasse especial de
ConfiguredTargetKey
, chamado
ToolchainDependencyConfiguredTargetKey
Além dos outros dados em ConfiguredTargetKey
, essa subclasse também contém
o rótulo da plataforma de execução. Quando ToolchainResolutionFunction
for
considerar qual plataforma de execução usar, se a plataforma de execução forçada
do ToolchainDependencyConfiguredTargetKey
é válido, ele vai ser usado mesmo
se não tiver 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.