我正在尝试生成可以重新生成IR代码的LLVM API代码。正如我通过诸如this question之类的各种问题所发现的那样,在某种程度上可以采取以下措施来实现这一目标:
clang++ -S -O0 -emit-llvm MyFile.cpp -o MyIR.ll
llc -march=cpp MyIR.ll -o MyIR_Maker.cpp
但是我收到以下错误: llc:错误:无效的目标'cpp'。 进一步的研究告诉我,在版本3.1中删除c后端时,早期版本的LLVM中the same issue occurred。然而,我使用cpp,这使我相信由于某种原因,在我的llvm版本中不存在cpp后端。
所以我真正想知道的是:如果我的分析到目前为止是正确的,我如何启用cpp后端或以其他方式使我的公司成为我可以按照我想要的方式使用它的状态?当然如果我错了,或者还有其他办法,我会对此持开放态度。
我们选择使用的版本是LLVM 3.6,这是通过OS X上的brew安装的。提前谢谢。
编辑:This question被指向可能类似的问题。然而,在LLVM 3.2的特定上下文中提出了这个问题,因为我的版本涉及3.6版本中的当前情况,因为此时可能存在真正的解决方案。该问题的唯一答案指向一般的外部资源,并没有非常彻底地解释实际解决方案是什么。
答案 0 :(得分:0)
启用cpp后端的正确方法似乎是下载LLVM源并自行构建,以下是该过程对我有用的方法:
cd
到你刚提取的文件夹,它的格式应为“llvm-x.x.x.src”,其中x.x.x是你的版本号mkdir build
cd build
brew install cmake
(如果您还没有cmake)cmake -G Xcode ..
(这会生成一个可以构建LLVM的Xcode项目)open LLVM.xcodeproj
现在你应该能够按照预期的方式运行以下命令,假设你正在使用合适的clang版本,并且你的路径不包含一组不同的llvm二进制文件:
clang++ -S -O0 -emit-llvm MyFile.cpp -o MyIR.ll
llc -march=cpp MyIR.ll -o MyIR_Maker.cpp
答案 1 :(得分:0)
正如Generate LLVM C++ API code as backend中所述,此功能(-march=cpp
)似乎已于2016年5月左右从LLVM中删除。