使用Bazel-Skylark检查架构

时间:2017-06-05 19:14:53

标签: tensorflow powerpc bazel

我正在尝试在相当近的提交中从源代码构建ppc64le中的Tensorflow但是我遇到了来自bazebuild / rules_closure的一些问题(https://github.com/tensorflow/tensorflow/issues/10306https://github.com/bazelbuild/rules_closure/issues/207)。

大多数情况下,我需要检查目标机器是否为ppc64le(是否有任何原生Bazel方式运行uname -m?)。然后我们不应该将'-client'传递给JVM调用 - 遗憾的是,截至今天,在openjdk8中对于ppc64le没有支持C1(客户端)编译器。

还有一些预构建的x64二进制文件(nodejs和protoc)在构建rules_closure时会被下载 - 这比可移植性早。我想知道是否有办法绕过这个问题,例如添加到包含ppcle64二进制文件的存储库的链接或者回退到系统的二进制文件。

(我也在bazel讨论邮件列表中问过这个问题)

1 个答案:

答案 0 :(得分:1)

为什么需要-client标志呢?是否可以删除所有架构? Bazel调整JDK配置的内置方法是java_toolchain() rule(您可以看到Bazel在源存储库中使用的default java_toolchain)。如果在某些平台上确实需要该标志而在其他平台上不需要,那么应该添加一个java_toolchain,并且不支持该标志的平台可以使用没有标志的自定义工具链。

就二进制文件而言,现在唯一可以选择使用select()规则,检查host_cpu设置,选择可在本地平台上运行的二进制文件。

我正在积极开发名为Platforms for Bazel的新功能(design doc已公开发布)。这将允许诸如TensorFlow或rules_closure之类的项目定义它们支持的平台,并提供不同的工具链和配置,最终包括protoc二进制文件和JDK标志之类的东西。不幸的是,虽然开发进展顺利,但更新本机Java规则还需要一些时间。您可以在问题#2219上跟踪Github上的进度。