如何使用编译数据库为文件生成LLVM bitcode?

时间:2015-05-13 21:05:47

标签: c++ clang llvm llvm-clang

我想为我拥有compilation database 的大量C源文件生成LLVM bitcode。有没有办法调用clang,以便它读取编译数据库并使用适当的标志?

背景

对于玩具程序,生成LLVM bitcode的命令很简单:

clang -emit-llvm -c foo.c -o foo.bc

但是,大型项目中的源文件需要大量额外的编译标记,包括-I-D以及诸如此类的内容。

我想编写一个脚本,迭代大量的源文件并在每个源文件上调用clang -emit-llvm ...来生成LLVM bitcode。困难在于每个clang -emit-llvm ...命令必须具有特定于该源文件的标志。我有一个这些源文件的编译数据库,它可以完美地捕获每个源文件所需的标志。 有没有办法让clang -emit-llvm ...知道我的编译数据库?

我想到的一个解决方案是自己解析编译数据库并找到每个源文件的相应条目,并将command条目修改为(a)包括-emit-llvm和( b)将-o foo.o更改为-o foo.bc,然后运行该命令。这可能有用,但看起来有点笨拙。

1 个答案:

答案 0 :(得分:0)

您可以依靠Python绑定来代替自己解析编译数据库。从绑定的test suite来判断,您可以执行以下操作:

cdb = CompilationDatabase.fromDirectory(kInputsDir)
cmds = cdb.getAllCompileCommands()

然后稍微更新cmds的内容。