使用非gcc类编译器进行交叉编译

时间:2017-06-12 08:09:27

标签: bazel

(来自https://groups.google.com/d/msg/bazel-discuss/LQfL6c-6Wqg/uinZMCTYCgAJ

您好 -

是否可以使用bazel使用工具链进行交叉编译,其中编译器标志不是远程类似gcc的?

例如,bazel似乎想/需要使用-MD -MF foo.d,但是我的工具链不支持这些标志,我不知道从编译调用中过滤这些标志的方法

我能想到的唯一一件事就是将CROSSTOOL指向一些包装脚本来解决所有参数。

- 罗布

1 个答案:

答案 0 :(得分:2)

理想情况下,CROSSTOOL会封装所有工具链/平台特定的标志,而Bazel不会硬编码任何特定于gcc / linux的标志。我们到了那里,虽然速度比预期慢得多(这是一个非常痛苦的过程)。

所以你应该能够编写自己的crosstool(或生成类似于bazel does it的一个),它不会发出-MD -MF foo.d.由于我们正在迁移许多内部的crosstools,Bazel正试图变得聪明并且会增加你的crosstool缺失的功能。检查CppConfiguration.javaCppLinkActionConfigs.java是否有这些“补丁”。

关于包装器脚本,这就是bazel为MSVC构建所做的工作,将类似gcc的命令行转换为cl.exe样式。我们正在慢慢地从这些脚本中删除逻辑,因为crosstool更强大(例如Bazel @head现在根本不使用包装脚本进行链接)。