有没有办法让Clang输出LLVM IR和可执行文件?

时间:2019-01-15 17:23:30

标签: compilation clang clang++ llvm-clang llvm-ir

我知道您可以使用-emit-llvm选项使clang输出LLVM IR,但这使它成为唯一的输出。

我想知道是否有一些编译器选项组合可以使clang像以前一样完全起作用,但还会产生.ll文件作为副产品?

我现在面临的问题是一个基于cmake的构建非常复杂的项目,对此我只能更改clang编译选项。我想为其生成llvm IR文件,但是不幸的是,如果我仅通过-emit-llvm,CMake就会失败,因为它的编译器测试/健全性检查未通过(因为生成了.ll文件而不是有效的可执行文件)

有什么方法可以让clang生成exe / object和.ll文件吗?还是以其他方式解决此问题?

1 个答案:

答案 0 :(得分:1)

至少有两种方法可以实现这一目标:

  1. -flto:您将得到一个LLVM位代码文件,而不是每个目标文件(从程序集编译的文件除外,它们仍将是目标文件)。
  2. -fembed-bitcode:clang将在最终可执行文件中添加另一部分,其中包含所有LLVM位代码文件(同样,除了汇编文件之外,它们仍将是目标文件)。然后,您可以使用LibEBC提取所有这些文件。

无论采用哪种方法,都必须使用llvm-dis工具将LLVM位代码文件转换为LLVM IR文件。

希望对您有帮助。