2017-07-28 34 views
1

我正在尝试使用bazel restricted_to属性进行测试。使用[bazel] restricted_to属性

我希望测试只能在特定的cpu = build上运行。

为了使这个稍微复杂一些,CPU类型在我们

/tools/cpp/CROSSTOOL file (cpu=armhf-debian). 

我已经没有运气猜测restricted_to参数 的语法(我的第一个猜测是//cpu:armhf-debian定义,它只是看着对于CPU封装)

有什么建议吗?

回答

2

关于restricted_to以及其他适用于environment_group和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和选择,像这样:

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的执行环境,我们将确保发布文档和博客文章,以便人们可以测试。