Detalles de la implementación de la resolución de la cadena de herramientas

Informar un problema Ver fuente Por la noche · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

Nota: Esta sección está destinada a desarrolladores de Bazel y no la necesitan autores de reglas.

Varias clases de SkyFunction implementan el proceso de resolución de la cadena de herramientas:

  1. RegisteredToolchainsFunction y RegisteredExecutionPlatformsFunction encontrar cadenas de herramientas y plataformas de ejecución disponibles, en función del y el archivo WORKSPACE.

  2. SingleToolchainResolutionFunction resuelve un solo tipo de cadena de herramientas para cada plataforma de ejecución. Es decir, por en cada plataforma de ejecución encuentra la mejor cadena de herramientas registrada para usar según según los siguientes criterios:

    1. Asegúrate de que la cadena de herramientas y la plataforma de destino sean compatibles. Para ello, verifica el atributo target_compatible_with.
    2. Asegúrate de que la cadena de herramientas y la plataforma de ejecución sean compatibles. Para ello, haz lo siguiente: verificar el atributo exec_compatible_with
    3. Si quedan varias cadenas de herramientas, elige la de mayor prioridad (el uno que se haya registrado primero).
  3. ToolchainResolutionFunction llamadas SingleToolchainResolutionFunction para cada tipo de cadena de herramientas solicitado y, luego, determina la mejor plataforma de ejecución para usar.

    1. Primero, quita cualquier plataforma de ejecución que no tenga una para cada tipo de cadena de herramientas solicitada.
    2. Si quedan varias plataformas de ejecución, elige la de mayor prioridad uno (el que se registró primero).
      1. Si la cadena de herramientas ya estableció la plataforma de ejecución se seleccionará primero tal como se describe a continuación.

Como se explica en Cadenas de herramientas y configuraciones, la dependencia de un objetivo a una cadena de herramientas usa una configuración especial que obliga a la plataforma de ejecución a ser la misma para ambas. A pesar del nombre "transición de la cadena de herramientas", esto no se implementa como una configuración sino como una subclase especial de ConfiguredTargetKey, llamado ToolchainDependencyConfiguredTargetKey Además de los otros datos en ConfiguredTargetKey, esta subclase también contiene la etiqueta de la plataforma de ejecución. Cuando ToolchainResolutionFunction sea considerar qué plataforma de ejecución usar, si la plataforma de ejecución forzada del ToolchainDependencyConfiguredTargetKey es válido, se usará incluso si no es la de mayor prioridad.

Nota: Si la plataforma de ejecución forzada no es válida (porque cadenas de herramientas válidas, o debido a restricciones de ejecución de la regla o el objetivo), entonces, se usará la plataforma de ejecución válida de mayor prioridad.