使用[bazel] restricted_to属性

时间:2017-07-28 19:39:53

标签: c++ bazel

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

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

为了使这更复杂,cpu类型在我们的

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

我没有运气猜测restricted_to参数的语法 (我的第一个猜测是//cpu:armhf-debian,它只是寻找一个cpu包)

任何建议?

1 个答案:

答案 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执行环境的更好方式,我们确保发布文档和博客帖子。准备让人们测试。