如何使用LLVM为不同的目标体系结构编译程序
how to compile a program using LLVM for different target architecture?
我想使用LLVM/Clang将基本程序hello.c编译到本机x86架构,以生成中间程序和程序集。我使用了以下命令:
clang -O3 -emit-llvm hello.c -c -o hello.bc
llc hello.bc -o hello.s
它工作得很好。我如何为其他体系结构(比如SPARC32位)生成代码?clang中是否使用了任何标志来指定体系结构?
您可以运行llc --version
来获取支持的目标列表。来自我的机器:
$ llc --version
LLVM (http://llvm.org/):
LLVM version 3.2svn
Optimized build with assertions.
Built Aug 30 2012 (23:29:11).
Default target: mipsel-sde-elf
Host CPU: corei7-avx
Registered Targets:
arm - ARM
cellspu - STI CBEA Cell SPU [experimental]
cpp - C++ backend
hexagon - Hexagon
mblaze - MBlaze
mips - Mips
mips64 - Mips64 [experimental]
mips64el - Mips64el [experimental]
mipsel - Mipsel
msp430 - MSP430 [experimental]
nvptx - NVIDIA PTX 32-bit
nvptx64 - NVIDIA PTX 64-bit
ppc32 - PowerPC 32
ppc64 - PowerPC 64
sparc - Sparc
sparcv9 - Sparc V9
thumb - Thumb
x86 - 32-bit X86: Pentium-Pro and above
x86-64 - 64-bit X86: EM64T and AMD64
xcore - XCore
在您的情况下,您可能想要llc -march=sparc
。
您可以在指定特定目标的情况下构建clang/lilvm。默认情况下,在不指定LLVM_TARGETS_TO_BUILD的情况下,它将构建所有目标,如下所示https://github.com/llvm-mirror/llvm/blob/master/CMakeLists.txt#L269
我知道这是旧的,但它在谷歌搜索结果中很高,可能会使用一些与clang 13.x有关的信息。
以下命令提供了有用的信息,尤其是在不包括通常提到的llc程序的Windows版本上。
clang-打印有效的三重
叮当声-打印目标
clang-print多体系
clang-打印支持cpus
clang-打印目标三重
叮当声-打印目标
相关文章:
- vscode g++链路故障:体系结构x86_64的未定义符号
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 体系结构x86_64的未定义符号:链接器错误
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 未使用的 asm() 在不受支持的体系结构上的行为
- 用于本地网络运行的客户端服务器体系结构
- 生成文件:体系结构x86_64的未定义符号
- Xcode"体系结构x86_64的未定义符号"
- 有了memory_order_relaxed,原子变量的总修改顺序如何在典型体系结构上得到保证
- 体系结构x86_64的未定义符号:找不到原因
- 在OSx:ld上使用CMake构建C++项目:找不到体系结构x86_64的符号
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- 如何根据目标体系结构将共享库链接到另一个共享库
- 编译错误 - 必须定义目标体系结构
- 如何使用LLVM为不同的目标体系结构编译程序
- AddQtAndroidApk检测到错误的目标体系结构
- 找不到体系结构i386的目标C和C++符号