将Bazel目标限制为特定平台

时间:2019-02-15 13:39:31

标签: bazel

我有一个只能在Linux上构建的目标(在这种情况下,因为它取决于仅在Linux上可用的syscalls,并且没有尝试创建此跨平台的愿望)。如何在BUILD文件中表达这一点?

我从Platforms documentation看到存在一个@bazel_tools//platforms:linux的Linux平台定义,但是我不清楚如何利用它来限制目标。尝试在compatible_with中指定它会导致如下错误:

(13:27:09) ERROR: /foo/BUILD:4:1: in compatible_with attribute of go_library rule //foo:go_default_library: constraint_value rule '@bazel_tools//platforms:linux' is misplaced here (expected environment). Since this rule was created by the macro 'go_library_macro', the error might have been caused by the macro implementation in /foo/BUILD:4:1

所以我有几个相关问题:

  • 该错误似乎表明我为compatible_with提供了错误的规则类型。什么是environment?如何提供? (我一直在努力寻找有关此文档的信息)
  • 我认为到平台的迁移可能尚未完成,并且rules_go可能尚未更新。如果平台无法实现,是否有“旧方法”来代替?
  • 理想情况下,在不同的(非Linux)平台上运行bazel test //:all之类的命令时,我希望这样做不会导致构建错误。我希望只排除这些或其他内容。这可能吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

结果证明这是一个未解决的问题。解决此问题后,我认为应该可以:https://github.com/bazelbuild/bazel/issues/3780