如何为包含许多源代码文件和大型Makefile(例如memcached)的大型程序生成llvm bitcode?

问题描述:

我有我的通行证,我测试玩具程序,现在我想运行它的大型程序,其中许多是像memcached开源程序。这样的程序有自己的Makefile和一个复杂的编译过程。我想为这些程序生成一个位码文件,让我的通行证在他们身上工作。帮助和建议将不胜感激!如何为包含许多源代码文件和大型Makefile(例如memcached)的大型程序生成llvm bitcode?

取决于你在做什么通正在做,你可以:

  • 建立与LTO:添加-flto到CFLAGS和建设有自己的内置连接插件应用程序是从构建系统点相当无缝看法。但是它需要了解如何设置LTO。
  • 使用您自己的内置铛声创建:将静态添加到LLVM管道并使用您自己的内置铛声。根据构建系统的不同,导出CC/CXX环境变​​量指向已安装的clang应该足够了。
  • 通过将您的通行证动态加载到叮当中来构建,例如,这是Polly(可选)正在执行的操作。
+0

谢谢Joky!所以我需要做这3个选项中的一个?前两种选择有没有现有的例子? –

+0

我不这么认为,但选项2不难设置,也许这​​是最少的。如果您有通行证,只需将其添加到PassManagerBuilder.cpp中的正确位置并构建叮。 – Joky

+0

所以我所做的就是编辑Makefile,并将clang和相关的标志替换为gcc/g ++,这样我的通行代码就可以工作。我的通行证通过添加一个函数调用该程序,该函数位于另一个.c文件中。但是我得到了来自clang的未定义参考错误。我在这里发布了这个问题: http://stackoverflow.com/questions/41650417/clang-linking-error-undefined-reference-to-function-calls-added-by-llvm-pass 你可以看一下吗?非常感谢! –

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

你可能需要修改一下makefile文件,这会让你开始朝正确的方向发展。

+0

感谢您的回复。所以你认为我将不得不修改这些程序的现有Makefile,并用bc标志手动将gcc替换为clang?任何现有的工具? –