基于Bazel与Buildfarm的跨编译测试工作流配置咨询
Bazel + Buildfarm 跨编译测试工作流补充配置方案
问题概述
- 已实现:基于x86_64 Worker和交叉工具链,完成x86_64到arm64的C++交叉编译,Buildfarm集群包含1台服务器、1台x86_64 Worker、1台arm64 Worker(默认配置)。
- 待解决:让交叉编译生成的arm64测试二进制在arm64 Worker上原生运行,需明确如何按构建/测试阶段通过Platform的
exec_properties调度Bazel动作。
现有配置片段
platform( name = "linux_arm64", constraint_values = [ "@platforms//os:linux", "@platforms//cpu:arm64", ], ) toolchain( name = "arm64_linux_toolchain", … exec_compatible_with = [ "@platforms//os:linux", "@platforms//cpu:x86_64", ], target_compatible_with = [ "@platforms//os:linux", "@platforms//cpu:arm64", ], )
所需额外配置步骤
1. 标记Arm64 Worker的执行属性
修改Arm64 Worker的配置文件(如worker.config),添加专属执行属性,让Buildfarm能识别其架构:
worker: properties: cpu_arch: "arm64" os_family: "linux"
(可选:给x86_64 Worker也添加cpu_arch: "x86_64"的标记,方便后续更精准的调度)
2. 扩展Platform定义,添加执行属性匹配规则
新建或修改现有Platform,将其与Arm64 Worker的属性绑定,确保测试动作能匹配到对应Worker:
platform( name = "linux_arm64_test_exec", constraint_values = [ "@platforms//os:linux", "@platforms//cpu:arm64", ], exec_properties = { "cpu_arch": "arm64", }, )
3. 指定测试目标的执行平台
有两种配置方式可选:
全局配置(所有测试生效)
在项目根目录的.bazelrc中添加规则,强制所有测试动作使用Arm64执行平台:
test --test_execution_platform=//:linux_arm64_test_exec
局部目标配置(仅指定测试生效)
在cc_test规则中直接指定执行平台,适合需要单独配置的测试目标:
cc_test( name = "my_arm64_test", srcs = ["test.cpp"], # 指定测试动作的执行平台 execution_platform = "//:linux_arm64_test_exec", # 也可直接用约束替代:exec_compatible_with = ["@platforms//os:linux", "@platforms//cpu:arm64"] )
4. 确认Buildfarm服务器的匹配配置
检查服务器配置文件(如server.config),确保允许通过exec_properties进行Worker匹配:
worker_match_settings: allow_exec_properties: true
(默认配置通常已开启此选项,若未开启需手动添加)
5. 验证调度结果
运行测试时添加--verbose_failures或--subcommands参数,查看测试动作是否被调度到Arm64 Worker:
bazel test //:my_arm64_test --remote_executor=grpc://<buildfarm-server-ip>:8980 --verbose_failures
内容的提问来源于stack exchange,提问作者Sent_
相关产品推荐
相关产品推荐

