如何使用LLVM为不同的目标体系结构编译程序

how to compile a program using LLVM for different target architecture?

本文关键字:目标 体系结构 编译程序 何使用 LLVM      更新时间:2023-10-16

我想使用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-打印目标三重

叮当声-打印目标