【问题标题】:Can I use LLVM to accelerate a build and reduce GCC compile time?我可以使用 LLVM 来加速构建并减少 GCC 编译时间吗?
【发布时间】:2014-08-22 10:48:36
【问题描述】:

我正在尝试减少 HHVM 的编译时间,这可能需要两个小时。

我在某处读到LLVM 可以充当gcc 的预处理器并大大减少内存使用和编译时间?

不幸的是,我似乎无法直接用clang 编译HHVM,因为我得到了像'array' file not found 这样的奇怪致命错误,即使我尝试将CXXFLAGS 设置为-std=c++11-std=gnu++11 模式,但运气不好。

我已经阅读了有关 dragonegg 的信息,但不确定如何使用它或者它是否是我正在寻找的?

【问题讨论】:

  • 我认为它应该适用于 clang,至少这里有一些 clang 修复:github.com/facebook/hhvm/pull/2905
  • 你能显示你得到的确切错误吗?我想直接使用 clang 会比其他可能性容易得多。
  • c11gnu11 是 C 方言,而不是 C++。你想要c++11gnu++11
  • @sepp2k 抱歉我说错了,我试过-std=c++11-std=gnu++11
  • @JanRüegg 如果您想将其分解为答案,您的评论对我有特别帮助吗?解决方案是 in that patch that facebook never applied 到 HHVM,您必须从 HPHPCompiler.cmake 中删除 -stdlib=libc++。我仍然在 clang 下编译,但它已经比我上次尝试让它工作的最后几次吐槽之前做得更远了。

标签: c++ gcc clang llvm


【解决方案1】:

无论如何,我认为直接使用 clang 会容易得多。因此,请尝试找出 clang 不适用于该项目的原因,并为此找到补丁/修复程序。

例如,申请this patch 可能是一个好的开始。

【讨论】:

  • 就是这样,至少它让我走得更远,基本上从HPHPCompiler.cmake中删除-stdlib=libc++。 Facebook 从未应用该补丁。如果编译实际完成,将标记为答案。即使是叮当声,到目前为止也需要一个小时。
  • 啊 drats,它走得更远,但在 libgd hhvm/hphp/runtime/ext/gd/libgd/gd_webp.cpp:75:20: error: expected ')'hhvm/hphp/runtime/ext/gd/libgd/gd_webp.cpp:75:10: error: cast from pointer to smaller type 'unsigned int' loses information temp = (unsigned uint8*) gdRealloc(filedata, size+GD_WEBP_ALLOC_STEP); 上中断了我想知道它是否只是后备箱中的一个错误。
  • 现在尝试使用Wno-error使其成为非致命错误
【解决方案2】:

dragonegg 是一个用于 gcc 的 LLVM 代码生成插件,因此它与您正在寻找的相反。

我不知道有什么方法可以将 Clang 插入到现在支持的 gcc 前面。也就是说,如果您可以使用 gcc 构建项目,那么使用 Clang 构建它应该不难。如今,即使是 Linux 内核也可以使用 Clang 构建,并带有一些小补丁。 HVVM 开发人员很可能也使用 Clang 构建它,并且他们可能为此提供了一些补丁。

但标题中问题的答案是否定的。

【讨论】:

    【解决方案3】:

    我在某处读到 LLVM 可以充当 gcc 的预处理器

    我认为您阅读的内容实际上是关于预处理的。事实上,我自己隐约记得有人称 Clang 的预处理器比 GCC 的要快。对我们来说很遗憾,您的回答没有提供指向您信息来源的链接,因此无法检查实际声明是什么。

    您可以使用clang -E file.c -o file.i 预处理您的 C 文件。在此之后,您可以使用 GCC 编译 file.i,并且 GCC 将能够省略其(假定较慢)预处理器。对你来说不幸的是,预处理是编译 C 文件的最简单的步骤,我怀疑它占总时间的 3% 以上,这意味着即使将预处理所花费的时间减半也最多可以改善编译时间减少 1.5%。

    除了可以从 Clang 输出并输入 GCC 以加快任何速度的预处理 C 之外,我没有看到任何其他语言,这两个编译套件之间共有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多