Nota: Esta sección está destinada a los desarrolladores de Bazel y no es necesaria para los autores de reglas.
Varias clases de SkyFunction implementan el proceso de resolución de la cadena de herramientas:
RegisteredToolchainsFunctionyRegisteredExecutionPlatformsFunctionencuentran las cadenas de herramientas y las plataformas de ejecución disponibles, según la configuración actual y el archivo WORKSPACE.SingleToolchainResolutionFunctionresuelve un solo tipo de cadena de herramientas para cada plataforma de ejecución. Es decir, para cada plataforma de ejecución, encuentra la mejor cadena de herramientas registrada para usar según los siguientes criterios:- Verifica que la cadena de herramientas y la plataforma de destino sean compatibles. Para ello, consulta
el
target_compatible_withatributo. - Verifica que la cadena de herramientas y la plataforma de ejecución sean compatibles. Para ello, consulta el
exec_compatible_withatributo. - Si quedan varias cadenas de herramientas, elige la de mayor prioridad (la que se registró primero).
- Verifica que la cadena de herramientas y la plataforma de destino sean compatibles. Para ello, consulta
el
ToolchainResolutionFunctionllama aSingleToolchainResolutionFunctionpara cada tipo de cadena de herramientas solicitada y luego, determina la mejor plataforma de ejecución para usar.- Primero, quita cualquier plataforma de ejecución que no tenga una cadena de herramientas válida para cada tipo de cadena de herramientas solicitada.
- Si quedan varias plataformas de ejecución, elige la de mayor prioridad (la que se registró primero).
- Si la transición de la cadena de herramientas ya configuró la plataforma de ejecución, se seleccionará primero como se describe a continuación.
Como se explica en Cadenas de herramientas y configuraciones,
la dependencia de un destino a una cadena de herramientas usa una configuración especial que
obliga a que la plataforma de ejecución sea la misma para ambos. A pesar del nombre
"transición de la cadena de herramientas", esto no se implementa como una transición de configuración, sino como una subclase especial de
ConfiguredTargetKey, llamada
ToolchainDependencyConfiguredTargetKey.
Además de los otros datos en ConfiguredTargetKey, esta subclase también contiene
la etiqueta de la plataforma de ejecución. Cuando ToolchainResolutionFunction está
considerando qué plataforma de ejecución usar, si la plataforma de ejecución forzada
de ToolchainDependencyConfiguredTargetKey es válida, se usará incluso
si no es la de mayor prioridad.
Nota: Si la plataforma de ejecución forzada no es válida (porque no hay cadenas de herramientas válidas o debido a restricciones de ejecución de la regla o el destino), se usará la plataforma de ejecución válida de mayor prioridad.