clang: how to list supported target architectures?

后端 未结 9 740
南旧
南旧 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:06

    I am using Clang 3.3, I think the best way to get the answer is reading the source code. in llvm/ADT/Triple.h (http://llvm.org/doxygen/Triple_8h_source.html):

      enum ArchType {
        UnknownArch,
    
        arm,     // ARM: arm, armv.*, xscale
        aarch64, // AArch64: aarch64
        hexagon, // Hexagon: hexagon
        mips,    // MIPS: mips, mipsallegrex
        mipsel,  // MIPSEL: mipsel, mipsallegrexel
        mips64,  // MIPS64: mips64
        mips64el,// MIPS64EL: mips64el
        msp430,  // MSP430: msp430
        ppc,     // PPC: powerpc
        ppc64,   // PPC64: powerpc64, ppu
        r600,    // R600: AMD GPUs HD2XXX - HD6XXX
        sparc,   // Sparc: sparc
        sparcv9, // Sparcv9: Sparcv9
        systemz, // SystemZ: s390x
        tce,     // TCE (http://tce.cs.tut.fi/): tce
        thumb,   // Thumb: thumb, thumbv.*
        x86,     // X86: i[3-9]86
        x86_64,  // X86-64: amd64, x86_64
        xcore,   // XCore: xcore
        mblaze,  // MBlaze: mblaze
        nvptx,   // NVPTX: 32-bit
        nvptx64, // NVPTX: 64-bit
        le32,    // le32: generic little-endian 32-bit CPU (PNaCl / Emscripten)
        amdil,   // amdil: amd IL
        spir,    // SPIR: standard portable IR for OpenCL 32-bit version
        spir64   // SPIR: standard portable IR for OpenCL 64-bit version
      };
    

    and in clang/lib/Driver/ToolChains.cpp , there is sth about arm.

    static const char *GetArmArchForMArch(StringRef Value) {
      return llvm::StringSwitch(Value)
        .Case("armv6k", "armv6")
        .Case("armv6m", "armv6m")
        .Case("armv5tej", "armv5")
        .Case("xscale", "xscale")
        .Case("armv4t", "armv4t")
        .Case("armv7", "armv7")
        .Cases("armv7a", "armv7-a", "armv7")
        .Cases("armv7r", "armv7-r", "armv7")
        .Cases("armv7em", "armv7e-m", "armv7em")
        .Cases("armv7f", "armv7-f", "armv7f")
        .Cases("armv7k", "armv7-k", "armv7k")
        .Cases("armv7m", "armv7-m", "armv7m")
        .Cases("armv7s", "armv7-s", "armv7s")
        .Default(0);
    }
    
    static const char *GetArmArchForMCpu(StringRef Value) {
      return llvm::StringSwitch(Value)
        .Cases("arm9e", "arm946e-s", "arm966e-s", "arm968e-s", "arm926ej-s","armv5")
        .Cases("arm10e", "arm10tdmi", "armv5")
        .Cases("arm1020t", "arm1020e", "arm1022e", "arm1026ej-s", "armv5")
        .Case("xscale", "xscale")
        .Cases("arm1136j-s", "arm1136jf-s", "arm1176jz-s", "arm1176jzf-s", "armv6")
        .Case("cortex-m0", "armv6m")
        .Cases("cortex-a8", "cortex-r4", "cortex-a9", "cortex-a15", "armv7")
        .Case("cortex-a9-mp", "armv7f")
        .Case("cortex-m3", "armv7m")
        .Case("cortex-m4", "armv7em")
        .Case("swift", "armv7s")
        .Default(0);
    }
    

提交回复
热议问题