我正在尝试使用bazel restricted_to 属性进行测试。
我希望测试只能在特定的cpu = build上运行。
为了使这更复杂,cpu类型在我们的
中定义/tools/cpp/CROSSTOOL file (cpu=armhf-debian).
我没有运气猜测restricted_to参数的语法
(我的第一个猜测是//cpu:armhf-debian
,它只是寻找一个cpu包)
任何建议?
答案 0 :(得分:3)
还没有很多关于restricted_to的文档,以及它使用的其他规则,environment和environment_group。这主要是因为它们用于的用例非常特定于Google的存储库设置,我们正在使用更灵活的系统替换它们。
要使用restricted_to,您需要定义几个环境规则,并使用environment_group来包含它们,然后指定测试限制在哪个环境中,最后始终使用" - target_environment"用于指定当前环境组的标志。这看起来像这样:
environment(name = "x86")
environment(name = "ppc")
environment_group(
name = "cpus",
defaults = [":x86"],
environments = [
":x86",
":ppc",
])
cc_test(
name = "test",
other config
restricted_to = [":ppc"],)
然后你可以这样运行测试:
bazel test --target_environment=//:ppc //:test
进行环境检查。
这并不是非常有用,因为无论谁运行测试,还必须记住设置" - target_environment"正常。
使用当前支持的代码禁用测试的更好方法是使用config_setting和select,如下所示:
config_setting(
name = "k8",
values = {"cpu": "k8"})
config_setting(
name = "ppc",
values = {"cpu":, "ppc")
cc_test(
name = "test",
other config
srcs = [other sources] +
select({
"//:x86": ["x86_test_src.cpp"],
"//:ppc": ["ppc_test_src.cpp"],
"//conditions:default": ["default_test_src.cpp"],
})
config_setting将根据当前" - cpu"取一个值。旗。通过更改select中包含的文件,您可以控制每个cpu设置的测试中包含的文件。
显然,这些不必在同一个包中,并且适用通常的Bazel可见性规则。有关config_setting的示例,请参阅Bazel的src/BUILD;有关在select中使用它的示例,请参阅src/test/cpp/BUILD。
我们正在平台上努力工作,这是描述和查询Bazel执行环境的更好方式,我们确保发布文档和博客帖子。准备让人们测试。