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:
RegisteredToolchainsFunction
yRegisteredExecutionPlatformsFunction
encontrar cadenas de herramientas y plataformas de ejecución disponibles, en función de la y el archivo WORKSPACE.SingleToolchainResolutionFunction
resuelve 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 que se puede usar según los siguientes criterios:- Asegúrate de que la cadena de herramientas y la plataforma de destino sean compatibles. Para ello, verifica
el atributo
target_compatible_with
. - Para asegurarte de que la cadena de herramientas y la plataforma de ejecución sean compatibles, verifica el atributo
exec_compatible_with
. - Si quedan varias cadenas de herramientas, elige la que tenga la prioridad más alta (la que se registró primero).
- Asegúrate de que la cadena de herramientas y la plataforma de destino sean compatibles. Para ello, verifica
el atributo
ToolchainResolutionFunction
llama aSingleToolchainResolutionFunction
para cada tipo de cadena de herramientas solicitada y, luego, determina la mejor plataforma de ejecución que se debe 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
uno (el que se registró primero).
- 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 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 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 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.