使用 Bazel-Skylark 检查架构

Checking architecture with Bazel-Skylark

我正在尝试在最近的一次提交中从源代码在 ppc64le 中构建 Tensorflow,但我遇到了来自 bazebuild/rules_closure.

的一些问题 (https://github.com/tensorflow/tensorflow/issues/10306 and https://github.com/bazelbuild/rules_closure/issues/207)

主要是我需要检查目标机器是否是 ppc64le(是否有任何本机 Bazel 方法 运行 类似 uname -m 的东西?)。然后我们不应该将“-client”传递给 JVM 调用 - 不幸的是,截至今天,openjdk8 中的 C1(客户端)编译器不支持 ppc64le。

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

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

为什么需要 -client 标志?是否可以为所有架构删除它? Bazel 调整 JDK 配置的内置方式是 java_toolchain() rule (you can see the default java_toolchain Bazel 在源存储库中使用的)。如果某些平台确实需要该标志,而其他平台不需要,则应添加 java_toolchain 并提供它,不支持该标志的平台可以使用没有该标志的自定义工具链。

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

我正在积极开发一项名为 Platforms for Bazel 的新功能(design doc is publically available). This will allow projects such as TensorFlow or rules_closure to define the platforms they support, and provide different toolchains and configurations, eventually including things like protoc binaries and JDK flags. Unfortunately, while development is going well, updating the native Java rules will take some time. You can track the progress on Github at issue #2219