注意:本部分面向 Bazel 开发者, 规则作者。
RegisteredToolchainsFunction
和RegisteredExecutionPlatformsFunction
根据当前的 配置和 WORKSPACE 文件。SingleToolchainResolutionFunction
为每个执行平台解析单个工具链类型。也就是说, 它都会根据每个执行平台找到要使用的最佳注册工具链, 包括:- 通过检查代码,确保工具链和目标平台兼容
target_compatible_with
属性。 - 确保工具链和执行平台兼容,方法是
检查
exec_compatible_with
属性。 - 如果保留了多个工具链,请选择优先级最高的工具链( 一个是最先注册的)。
- 通过检查代码,确保工具链和目标平台兼容
ToolchainResolutionFunction
调用 为所请求的每个工具链类型创建SingleToolchainResolutionFunction
,以及 然后确定要使用的最佳执行平台。- 首先,移除所有没有有效 每个请求的工具链类型的工具链。
- 如果有多个执行平台,请选择优先级最高的
一个(最先注册的那个)。
- 如果执行平台已由工具链设置 系统会先选择此项,如下所述。
如工具链和配置中所述,
从目标到工具链的依赖项使用一种特殊配置,
会强制两者的执行平台相同。尽管名称
“工具链转换”功能,则不会以配置的形式实现
而是作为一个特殊的子类
ConfiguredTargetKey
,调用
ToolchainDependencyConfiguredTargetKey
。
除了 ConfiguredTargetKey
中的其他数据之外,此子类还存储
执行平台的标签。当ToolchainResolutionFunction
:
考虑使用哪个执行平台、如果强制执行平台
来自 ToolchainDependencyConfiguredTargetKey
才有效,即使
如果不是最高优先级,则会发生此错误。
注意:如果强制执行平台无效(因为没有 有效工具链,或者由于来自规则或目标的执行限制), 则将使用优先级最高的有效执行平台。