使用CROSSTOOL构建ARM时{Prune Bazel -I标记

时间:2017-08-03 16:24:41

标签: c++ bazel

我编写了一个自定义CROSSTOOL文件,该文件调用了我的Cortex-M目标的arm-gcc编译器。我通过-isystem指定了我的标志,包括sysroot。

我看到Bazel用一堆额外的-I标志扩充了我对gcc的调用。这似乎没问题,b / c Bazel正在为构建期间生成的文件添加路径等等。

我看到Bazel还添加了-isystem,我没有指定:

-isystem external/bazel_tools/tools/cpp/gcc3

我无法弄清楚如何让Bazel压制这个,因为通过观察" gcc3" in the code,看起来它试图引入特定的STL。

我可以告诉Bazel不要添加吗?它充其量是无害的,但可能是阴险的。

1 个答案:

答案 0 :(得分:1)

首先让我回答一个更普遍的问题:如何强迫Bazel停止修补我的水壶?这可以通过在您的crosstool中定义no_legacy_features功能来完成,只需将其放入所有相关的toolchain消息中即可:

feature { name: "no_legacy_features" }

使用该功能,Bazel不会修补您的crosstool,因此它不会添加-isystem标志。但它也将停止添加所有其他标志,如-D define,-l libs等。您可以在CppActionConfigs中看到bazel添加到您的crosstool的所有内容。另一个问题是我现在每天都会引入新功能和新的构建变量,所以如果你想在将来升级bazel,你肯定需要更新crosstool。如果您不使用action_configs并且未定义no_legacy_features,则您的套期工具将继续有效。最终我在crosstool上的工作将完成,crosstool将稳定。现在情况并非如此。

现在第二个问题是为什么bazel在那里添加-isystem旗帜,我不知道。因此我提交了an issue