1. ホーム
  2. clang

[解決済み] clang: サポートするターゲットアーキテクチャをリストアップするには?

2022-09-18 22:28:43

質問

現在、私はARM全般、特にiphone/androidのターゲットに興味を持っています。しかし、私は、それが今後数年間で重要な役割を果たすと思われるので、clangについてもっと知りたいと思います。

私は試してみました。

clang -cc1 --help|grep -i list
clang -cc1 --help|grep arch|grep -v search
clang -cc1 --help|grep target

 -triple <value>         Specify target triple (e.g. i686-apple-darwin9)

clangに-tripletパラメータがあることは知っていますが、どのようにしてそのパラメータに指定できるすべての値をリストアップすることができますか? GCCの世界ではPLATFORM_makeやPLATFORM_ld (i*86-pc-cygwin i*86-*-linux-gnu etc.)のようにすべてに対して別々のバイナリを持っているはずです。 http://git.savannah.gnu.org/cgit/libtool.git/tree/doc/PLATFORMS )

clangの世界では、(いくつかのフォーラムで読んだように)バイナリは1つだけです。しかし、サポートされているターゲットのリストはどのように取得するのでしょうか?そして、もし私のターゲットが私のディストロ(linux/windows/macos/whatever)でサポートされていない場合、どのようにしてより多くのプラットフォームをサポートするものを手に入れることができるでしょうか?

もし私がこのように最新のclangをSVNした場合。

svn co http://llvm.org/svn/llvm-project/cfe/trunk clang

は、ほとんどのプラットフォームを手に入れることができるのでしょうか? Clangはすぐにクロスコンパイルを意識して作られたわけではないようですが、llvmベースなので理論的には非常にクロスフレンドリーであるはずです? ありがとうございます

どのように解決するのですか?

Clang 11 (trunk) からは、サポートされているターゲットアーキテクチャのリストを、新しく追加された -print-targets のフラグを立てます。

$ clang-11 -print-targets
  Registered Targets:
    aarch64    - AArch64 (little endian)
    aarch64_32 - AArch64 (little endian ILP32)
    aarch64_be - AArch64 (big endian)
    amdgcn     - AMD GCN GPUs
    arm        - ARM
    arm64      - ARM64 (little endian)
    arm64_32   - ARM64 (little endian ILP32)
    armeb      - ARM (big endian)
    avr        - Atmel AVR Microcontroller
    bpf        - BPF (host endian)
    bpfeb      - BPF (big endian)
    bpfel      - BPF (little endian)
    hexagon    - Hexagon
    lanai      - Lanai
    mips       - MIPS (32-bit big endian)
    mips64     - MIPS (64-bit big endian)
    mips64el   - MIPS (64-bit little endian)
    mipsel     - MIPS (32-bit little endian)
    msp430     - MSP430 [experimental]
    nvptx      - NVIDIA PTX 32-bit
    nvptx64    - NVIDIA PTX 64-bit
    ppc32      - PowerPC 32
    ppc64      - PowerPC 64
    ppc64le    - PowerPC 64 LE
    r600       - AMD GPUs HD2XXX-HD6XXX
    riscv32    - 32-bit RISC-V
    riscv64    - 64-bit RISC-V
    sparc      - Sparc
    sparcel    - Sparc LE
    sparcv9    - Sparc V9
    systemz    - SystemZ
    thumb      - Thumb
    thumbeb    - Thumb (big endian)
    wasm32     - WebAssembly 32-bit
    wasm64     - WebAssembly 64-bit
    x86        - 32-bit X86: Pentium-Pro and above
    x86-64     - 64-bit X86: EM64T and AMD64
    xcore      - XCore

参考文献 LLVM PR , LLVMコミット , Clang 11のドキュメント .