如何使用编译数据库为文件生成LLVM比特码
How to generate LLVM bitcode for a file using a compilation database?
我想生成大量C源文件的LLVM比特代码,我为其提供了一个编译数据库。是否可以调用clang
,以便它读取编译数据库并使用适当的标志?
背景
对于玩具程序,生成LLVM比特码的命令很简单:
clang -emit-llvm -c foo.c -o foo.bc
但是,大型项目中的源文件需要许多其他编译标志,包括-I
S和-D
S和Whatnot。
我想编写一个脚本,该脚本在大量源文件上迭代,并在每个源文件上调用clang -emit-llvm ...
以生成LLVM比特码。困难是每个clang -emit-llvm ...
命令必须具有特定于该源文件的标志。我有一个针对这些源文件的汇编数据库,该数据库完美地捕获了每个源文件所需的标志。有没有办法使clang -emit-llvm ...
了解我的汇编数据库?
我想到的一种解决方案是自己解析编译数据库,并为每个源文件找到适当的条目,然后将command
条目修改为(a)包括-emit-llvm
和(b)将-o foo.o
更改为-o foo.bc
,然后运行命令。这可能起作用,但似乎有些骇人。
代替自己解析编译数据库,您可以依靠python绑定来做到这一点。从绑定的测试套件来看,您可以做类似的事情:
cdb = CompilationDatabase.fromDirectory(kInputsDir)
cmds = cdb.getAllCompileCommands()
,然后稍微更新cmds
的内容。
相关文章:
- 编译 llvm 插件时出现问题:llvm/Config/llvm-config.h:没有这样的文件或目录
- 如何检查函数是否在LLVM Instrumentation pass的ModulePass的系统头文件中定义?
- MacOS 上的 LLVM - 标准文件 iosfwd 中未知类型名称'template'
- 编写一个将 LLVM IR 文件作为命令行参数的程序
- 通过命令行参数获取llvm ir文件时面临问题
- 编译包含LLVM API标头的C++文件时出错
- llvm 9在10.15之前的mac版本上支持std::文件系统吗
- 当给定 IR 文件时,如何使 LLVM 选择输出 IR 文件
- LLVM:如何将 IR 写入文件并运行它
- 找不到 'llvm/IR/Constants.h' 文件
- 如何从ifstream加载LLVM比特代码文件
- gpuocelot llvm/insembly/parser.h:没有这样的文件或目录
- 如何使用编译数据库为文件生成LLVM比特码
- 如何从llvm::模块生成可执行文件
- 如何将llvm::out()重定向到文件
- 将LLVM添加到我的Cmake项目中:为什么LLVM的Cmake文件中有硬编码路径?
- 在apt-get安装后没有找到LLVM头文件
- 编译 llvm/clang 时出现致命错误 - 找不到'cstddef'文件
- 除了 clang 之外,"clang -S -emit-llvm file.cpp"运行任何其他可执行文件吗?
- 使用LLVM的可执行文件的动态符号解析