clang: how to list supported target architectures?

后端 未结 9 722
南旧
南旧 2020-12-07 08:57

Currently I am interested in ARM in general and specifically iphone/android targets. But I just want to know more about clang, since it feels to play important role in the y

相关标签:
9条回答
  • 2020-12-07 09:17

    clang -march=dont-know empty.c

    error: unknown target CPU 'dont-know'

    note: valid target CPU values are: nocona, core2, penryn, bonnell, atom, silvermont, slm, goldmont, goldmont-plus, tremont, nehalem, corei7, westmere, sandybridge, corei7-avx, ivybridge, core-avx-i, haswell, core-avx2, broadwell, skylake, skylake-avx512, skx, cascadelake, cooperlake, cannonlake, icelake-client, icelake-server, tigerlake, knl, knm, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, x86-64

    0 讨论(0)
  • 2020-12-07 09:19

    One hint you can do: if you're trying to find a particular target triple, is to install llvm on that system then do a

    $ llc --version | grep Default
      Default target: x86_64-apple-darwin16.1.0
    

    or alternatively:

    $ llvm-config --host-target
    x86_64-apple-darwin16.0.0
    or
    $ clang -v 2>&1 | grep Target
    Target: x86_64-apple-darwin16.1.0
    

    Then you know how to target it when cross compiling anyway.

    Apparently there are "lots" of targets out there, here's a list, feel free to add to it, community wiki style:

    arm-none-eabi
    armv7a-none-eabi
    arm-linux-gnueabihf 
    arm-none-linux-gnueabi
    i386-pc-linux-gnu 
    x86_64-apple-darwin10
    i686-w64-windows-gnu # same as i686-w64-mingw32
    x86_64-pc-linux-gnu # from ubuntu 64 bit
    x86_64-unknown-windows-cygnus # cygwin 64-bit
    x86_64-w64-windows-gnu # same as x86_64-w64-mingw32
    i686-pc-windows-gnu # MSVC
    x86_64-pc-windows-gnu # MSVC 64-BIT
    

    Here's what the docs list anyway (apparently it's a quadruple [or quintuple?] instead of a triple these days):

    The triple has the general format <arch><sub>-<vendor>-<sys>-<abi>, where:
    arch = x86, arm, thumb, mips, etc.
    sub = for ex. on ARM: v5, v6m, v7a, v7m, etc.
    vendor = pc, apple, nvidia, ibm, etc.
    sys = none, linux, win32, darwin, cuda, etc.
    abi = eabi, gnu, android, macho, elf, etc.
    

    and you can even fine tune specify a target cpu beyond this, though it uses a sensible default for the target cpu based on the triple.

    Sometimes targets "resolve" to the same thing, so to see what a target is actually treated as:

     $ clang -target x86_64-w64-mingw32 -v 2>&1 | grep Target
     Target: x86_64-w64-windows-gnu
    
    0 讨论(0)
  • 2020-12-07 09:25

    According to Jonathan Roelofs in this talk “Which targets does Clang support?”:

    $ llc --version
    LLVM (http://llvm.org/):
      LLVM version 3.6.0
      Optimized build with assertions.
      Built Apr  2 2015 (01:25:22).
      Default target: x86_64-apple-darwin12.6.0
      Host CPU: corei7-avx
    
      Registered Targets:
        aarch64    - AArch64 (little endian)
        aarch64_be - AArch64 (big endian)
        amdgcn     - AMD GCN GPUs
        arm        - ARM
        arm64      - ARM64 (little endian)
        armeb      - ARM (big endian)
        cpp        - C++ backend
        hexagon    - Hexagon
        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
        ppc64le    - PowerPC 64 LE
        r600       - AMD GPUs HD2XXX-HD6XXX
        sparc      - Sparc
        sparcv9    - Sparc V9
        systemz    - SystemZ
        thumb      - Thumb
        thumbeb    - Thumb (big endian)
        x86        - 32-bit X86: Pentium-Pro and above
        x86-64     - 64-bit X86: EM64T and AMD64
        xcore      - XCore
    

    Future versions of Clang may provide the following. They are listed as "proposed" though not yet available at least as of v 3.9.0:

    $ clang -target <target_from_list_above> --print-multi-libs
    $ clang -print-supported-archs
    $ clang -march x86 -print-supported-systems 
    $ clang -march x86 -print-available-systems 
    
    0 讨论(0)
提交回复
热议问题