我使用以下 LLVM 工具将写入多个文件的 cpp 项目转换为“ONE”单个程序集文件。
clang *.cpp -S -emit-llvm
llvm-link *.s -S -o all.s
llc all.s -march=mips
在 GCC 中有没有办法做到这一点?特别是,有没有办法将 GCC 生成的程序集文件链接到一个程序集文件中?即,LLVM-LINK 的等价物是什么?
也许LTO(链接时间优化)是您想要的。
gcc -flto
然后,使用例如编译每个编译单元
gcc -flto -O -Wall -c src1.c
g++ -flto -O -Wall -c src2.cc
并使用-flto
(和相同的优化)来链接它们:
g++ -flto -O src1.o src2.o -lsomething
LTO 通过在每个生成的程序集文件和目标文件中放入内部 GCC 表示(如 Gimple)的一些表示来在 GCC 中工作。查看它的文档
您可能想使用MELT来定制 GCC(或者只是使用它的探针来理解 Gimple,或者尝试一下gcc -fdump-tree-all
)。