我希望 clang 将我的 C/C++ 代码编译为 LLVM 位码,而不是二进制可执行文件。我怎样才能做到这一点?
如果我有 LLVM 位码,如何进一步将其编译为二进制可执行文件?
在编译为二进制可执行文件之前,我想将一些我自己的代码添加到 LLVM 位码。
给定一些 C/C++ 文件foo.c:
foo.c
> clang -S -emit-llvm foo.c
生成foo.llLLVM IR 文件。
foo.ll
该-emit-llvm选项也可以直接传递给编译器前端,而不是通过以下方式传递给驱动程序-cc1:
-emit-llvm
-cc1
> clang -cc1 foo.c -emit-llvm
foo.ll使用 IR生成。-cc1添加了一些很酷的选项,例如-ast-print. 查看-cc1 --help更多详情。
-ast-print
-cc1 --help
要进一步编译 LLVM IR 以进行组装,请使用以下llc工具:
llc
> llc foo.ll
与装配一起生产foo.s(默认为您运行它的机器架构)。llc是 LLVM 工具之一 -这是它的文档。
foo.s