【发布时间】:2020-05-02 23:54:49
【问题描述】:
目标
我正在使用 Bazel 构建一个多平台 C++ 客户端(iOS、OSX、Android、Windows)。
iOS 和 OSX 是在我的 Mac 上本地构建的(非必要)。 Android 和 Windows 构建在 Docker 容器中。
在构建结束时,我有一个 Bazel 规则,它采用每个平台的每个 cc_binary 规则并将它们放在 .zip 中。
我想利用 Bazel 的远程执行 API 在容器中构建我的一些二进制文件并在本地构建其他二进制文件,然后引用共享缓存将它们整理在一起——所有这些都使用一个 bazel build 命令。
Bazel 支持
Bazel 声称这些类型的 multiplatform 构建 - 其中 host (OSX x64)、execution (Linux x64) 和 target 平台(许多)都是不同的 - 是可能的。
见https://docs.bazel.build/versions/master/platforms.html
我的经历
但是,我遇到了这个确切的问题:https://github.com/bazelbuild/bazel/issues/5397(其中docker-sandbox 是remote 构建的正确代理。)
这与下面的 Github 问题一起,让我质疑 Bazel 关于 multiplatform 构建的说法。
https://github.com/bazelbuild/bazel/issues/5309
从根本上说,这些问题似乎表明一个平台(例如 OSX)的本地目标不能与另一个平台(例如 Linux)上的远程目标一起构建。
问题
我想知道:
(1) 我试图做的事情与 Bazel 的设计根本不一致吗?如果是这样,Bazel 是multiplatform 是什么意思?
(2) 有没有我可以采用的解决方法来保持封闭性并保留在 Bazel 构建系统中?可以挂载一个 Docker 卷,然后编写一个脚本,将 Docker 缓存与我的本地缓存结合起来,但似乎 Bazel 是为处理我的用例而构建的。我在这里遗漏了什么吗?
相关问题:Does bazel support remote execution on different platforms?(没有满意的答案。)
【问题讨论】:
标签: bazel