【问题标题】:How to generate llvm bitcode for large programs with many source code files and a huge Makefile (e.g. memcached)?如何为具有许多源代码文件和巨大 Makefile(例如 memcached)的大型程序生成 llvm 位码?
【发布时间】:2017-01-09 12:50:48
【问题描述】:

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

【问题讨论】:

    标签: llvm llvm-clang llvm-ir


    【解决方案1】:

    根据你所通过的,你可以做什么:

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

    【讨论】:

    • 谢谢乔基!所以我需要做这三个选项之一?前 2 个选项是否有任何现有示例?
    • 我不这么认为,但选项 2 并不难设置,也许是其中最少的一个。如果你有通行证,只需将其添加到 PassManagerBuilder.cpp 中的正确位置并构建 clang。
    • 所以我所做的是编辑 Makefile 并将 clang 和相关标志放置到位以替换 gcc/g++ 以便我的通行证适用于代码。我的 pass 通过添加一个函数调用来检测程序,该函数位于另一个 .c 文件中。但是我从铿锵声中得到未定义的参考错误。我把这个问题贴在这里:stackoverflow.com/questions/41650417/…你能看一下吗?非常感谢!
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的回复。所以你认为我必须修改那些程序现有的 Makefile 并用 bc 标志手动替换 gcc ?任何现有的工具?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    相关资源
    最近更新 更多