如何为具有许多源代码文件和巨大 Makefile(例如 memcached)的大型程序生成 llvm 位码?

How to generate llvm bitcode for large programs with many source code files and a huge Makefile (e.g. memcached)?

我有我在玩具程序上测试过的通行证,现在我想 运行 它在大型程序上,其中许多是开源程序,如 memcached。这些程序有自己的 Makefile 和复杂的编译过程。我想为这些程序生成一个位码文件,让我的通行证对它们起作用。帮助和建议将不胜感激!

如果您将 -emit-llvm 添加到您的 clang 标志,它将发出 BC 文件而不是目标文件或 LL 文件而不是程序集。

您可能需要对 makefile 进行更多修改,这样您就可以朝着正确的方向开始。

根据您通过的考试,您可以:

  • 使用 LTO 构建:将 -flto 添加到 CFLAGS 并使用您自己构建的链接器插件构建您的应用程序从构建系统的角度来看是非常无缝的。但是,它需要了解如何设置 LTO。
  • 使用您自己构建的 clang 进行构建:将您的传递静态添加到 LLVM 管道并使用您自己构建的 clang。根据构建系统,导出指向您安装的 clang 的 CC/CXX 环境变量就足够了。
  • 通过将您的通行证动态加载到 clang 中来构建,例如,这就是 Polly 正在(可选)做的事情。