Nota: Esta sección está destinada a desarrolladores de Bazel, y los autores de las reglas no la necesitan.
Varias clases de SkyFunction implementan el proceso de resolución de la cadena de herramientas:
RegisteredToolchainsFunction
yRegisteredExecutionPlatformsFunction
encuentran cadenas de herramientas y plataformas de ejecución disponibles, según la configuración actual 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 para usar según los siguientes criterios:- Verifica el atributo
target_compatible_with
para asegurarte de que la cadena de herramientas y la plataforma de destino sean compatibles. - Asegúrate de que la cadena de herramientas y la plataforma de ejecución sean compatibles. Para ello, verifica el atributo
exec_compatible_with
. - Si quedan varias cadenas de herramientas, elige la de mayor prioridad (la que se registró primero).
- 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 puede 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 explicó en Cadenas de herramientas y configuraciones, la dependencia de un destino 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", esta 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
considera qué plataforma de ejecución usar, si la plataforma de ejecución forzada de ToolchainDependencyConfiguredTargetKey
es válida, se usará incluso si no tiene la prioridad más alta.
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 objetivo), se usará en su lugar la plataforma de ejecución válida de mayor prioridad.