Detalhes de implementação da resolução do conjunto de ferramentas

Informar um problema Mostrar fonte Por noite · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

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:

  1. RegisteredToolchainsFunction e RegisteredExecutionPlatformsFunction encontrar os conjuntos de ferramentas e plataformas de execução disponíveis com base e o arquivo WORKSPACE.

  2. 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:

    1. Verificar se o conjunto de ferramentas e a plataforma de destino são compatíveis o atributo target_compatible_with.
    2. Garantir que o conjunto de ferramentas e a plataforma de execução sejam compatíveis: verificando o atributo exec_compatible_with.
    3. Se mais de um conjunto de ferramentas ficar, escolha o de prioridade mais alta (o ou seja, aquele que foi registrado primeiro).
  3. Chamadas do ToolchainResolutionFunction SingleToolchainResolutionFunction para cada tipo de conjunto de ferramentas solicitado e e determina a melhor plataforma de execução para usar.

    1. Primeiro, remova qualquer plataforma de execução que não tenha uma para cada tipo de conjunto de ferramentas solicitado.
    2. Se sobrar mais de uma plataforma de execução, escolha a de maior prioridade um (aquele que foi registrado primeiro).
      1. 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.