我使用以下LLVM工具将以多个文件编写的cpp项目转换为“ONE”单个汇编文件。
clang *.cpp -S -emit-llvm
llvm-link *.s -S -o all.s
llc all.s -march=mips
在GCC中有没有办法做到这一点?特别是,有没有办法将GCC生成的汇编文件链接到一个汇编文件中?即什么是LLVM-LINK的等价物?
答案 0 :(得分:0)
或许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中工作。见its documentation
您可能希望使用MELT来自定义GCC(或只是使用其探针来理解Gimple,或只尝试gcc -fdump-tree-all
)。