首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bazel:将Linux远程执行平台与Mac本地平台混合使用

Bazel:将Linux远程执行平台与Mac本地平台混合使用
EN

Stack Overflow用户
提问于 2020-05-02 23:54:49
回答 1查看 1.3K关注 0票数 4

目标

我正在使用Bazel构建一个多平台C++客户端(iOS、OSX、Android )。

iOS和OSX是在我的Mac上本地构建的(出于必要)。Android和Windows都是在Docker容器中构建的。

在构建结束时,我有一个Bazel规则,它为每个平台获取每个cc_binary规则,并将它们放入一个.zip中。

我想利用Bazel的远程执行API在容器中构建我的一些二进制文件,并在本地构建其他二进制文件,然后引用一个共享缓存将它们整理在一起--所有这些都使用一个bazel build命令。

Bazel支架

巴泽尔声称,这些类型的multiplatform构建--在host (OSX x64)、execution (Linuxx64)和target平台(许多)都不同的地方--是可能的。

请参阅https://docs.bazel.build/versions/master/platforms.html

我的经历

但是,我遇到了一个确切的问题:https://github.com/bazelbuild/bazel/issues/5397 (其中docker-sandboxremote构建的正确代理)。

这一点,加上下面的Github问题,让我对Bazel关于multiplatform构建的说法提出质疑。

https://github.com/bazelbuild/bazel/issues/5309

从根本上说,这些问题似乎表明,一个平台(例如OSX)的本地目标不能与另一个平台(例如Linux)上的远程目标一起构建。

问题

我在想:

(1)我试图做的与巴泽尔的设计根本不一致吗?如果是,那么Bazel是multiplatform是什么意思?

(2)是否有一个解决办法,我可以采取的办法,以保持精神错乱,并停留在Bazel的建设系统?可以挂载Docker卷,然后编写一个将Docker缓存与本地缓存结合起来的脚本,但Bazel似乎是为处理我的用例而构建的。我是不是漏掉了什么?

相关问题:bazel是否支持不同平台上的远程执行? (没有令人满意的答案)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-03 12:56:11

(1)我试图做的与巴泽尔的设计根本不一致吗?

理论上不,在实践中是的。Bazel提供的功能允许用户支持您的用例,但它不是默认实现的。

具体来说,正如链接Bazel问题中所描述的: Bazel规则目前假设主机和目标平台之间的关系在您的情况下是不成立的,例如,它将自动检测主机上的JDK文件(macOS),然后默认在所有Java操作中使用这些JDK文件--不管目标平台如何。

如果是,那么Bazel是多平台意味着什么?

实际上,这意味着您可以在多个平台上运行bazel build ...,并期望Bazel将您的输入转换为与当前平台兼容的输出。

(2)是否有一个解决办法,我可以采取的办法,以保持精神错乱,并停留在Bazel的建设系统?

是的,您可以在Windows或Docker容器中运行bazel build ...。这是巴泽尔团队在我问这个问题时推荐的解决办法。

相关高级Bazel功能:

  • 如果希望使用一次Bazel调用为多个目标平台构建,请查看Bazel用户定义的转换 (这将允许您同时为多个平台(例如iOS和macOS )构建相同的规则,但需要编写自己的规则)。
  • 如果不希望在容器/VM中运行bazel build,可以编写自己的C++工具链。在其核心,Bazel为每个操作提供一个沙箱,其中包含所有依赖的文件,并保证它将执行特定的命令。在定制的C++工具链中,您可以告诉Bazel调用脚本而不是clang,后者接受命令+文件并在VM或容器中执行它们。这可能是很多工作,但绝对是可能的。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61567876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档