Bazel无法识别自定义添加的armv6k CPU约束值求助
问题:添加armv6k CPU约束值时的Bazel平台引用错误
背景
需在bazel-toolchain仓库中添加armv6k CPU约束值,用于创建树莓派Zero的交叉编译平台,实现同一项目同时支持x86-64本地编译与树莓派交叉编译。
操作代码
在仓库分支的platforms/BUILD.bazel中定义约束值:
constraint_value( name = "armv6k", constraint_setting = "@platforms//cpu:cpu", )
随后在同一文件中定义平台:
platform( name = "linux-armv6k", constraint_values = [ "@platforms//os:linux", "@platforms//cpu:armv6k", ], )
错误信息
执行构建时触发如下错误:
ERROR: /home/ubuntu/.cache/bazel/_bazel_1000/a08c2e4811c846650b733c6fc815a920/external/com_grail_bazel_toolchain/platforms/BUILD.bazel:38:9: no such target '@platforms//cpu:armv6k': target 'armv6k' not declared in package 'cpu' defined by /home/ubuntu/.cache/bazel/_bazel_1000/a08c2e4811c846650b733c6fc815a920/external/platforms/cpu/BUILD (did you mean 'armv7k'? Tip: use `query "@platforms//cpu:*"` to see all the targets in that package) and referenced by '@com_grail_bazel_toolchain//platforms:linux-armv6k'
执行bazel query @platforms//cpu:*后,未查询到armv6k约束值。
环境信息
- Bazel版本:6.2.1
- 构建环境:使用2023年7月11日的
gcr.io/bazel-public/bazel:latestLinux镜像 - 宿主机系统:Windows
问题原因与修正方法
错误根源是约束值的引用路径错误:armv6k约束值定义在@com_grail_bazel_toolchain//platforms包中,而非官方@platforms//cpu包。定义平台时需使用本地包的引用路径,修正后的代码如下:
platform( name = "linux-armv6k", constraint_values = [ "@platforms//os:linux", ":armv6k", # 也可使用完整路径@com_grail_bazel_toolchain//platforms:armv6k ], )
内容的提问来源于stack exchange,提问作者baver
相关产品推荐
相关产品推荐

