铛:如何列出支持的目标架构? [英] clang: how to list supported target architectures?

查看:307
本文介绍了铛:如何列出支持的目标架构?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目前,我一般和专门的iPhone / Android的目标感兴趣的ARM。但我只是想知道更多关于铛,因为它认为在未来数年中发挥重要的作用来。

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 years to come.

我试过

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)

我知道铛具有-triplet参数,但我怎么能列出所有可能的值呢?
我发现,铛是关于GCC非常不同的交叉编译,在GCC世界里,你应该有一切单独的二进制,像PLATFORM_make或PLATFORM_ld(我* 86-PC-cygwin的我* 86 - * - Linux的GNU等。<一个href=\"http://git.savannah.gnu.org/cgit/libtool.git/tree/doc/PLATFORMS\">http://git.savannah.gnu.org/cgit/libtool.git/tree/doc/PLATFORMS)

在世界哗,这只是一个二进制(正如我在一些论坛读)。但我怎么得到支持的目标名单?如果我的目标是不支持我的发行版(Linux / Windows的/ MacOS的/不管)我怎么能得到更多的支持平台之一?

in clang world, it's only one binary (as I read on some forums). But how do I get the list of supported targets? And if my target it not supported on my distro(linux/windows/macos/whatever) how can I get the one that supports more platform?

如果我SVN最新铛是这样的:

if I SVN latest clang like this:

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

我会得到大多数的平台?
它看起来像锵并未充分考虑交叉编译建向右走,但由于它是基于LLVM应该在理论上非常交叉友好吗?谢谢!

will I get most of platforms? It looks like Clang was not built with cross compiling in mind right away, but since it's llvm based it should be very cross-friendly in theory? thank you!

推荐答案

我使用铛3.3,我认为得到的答案最好的方法就是阅读源$ C ​​$ C。
在LLVM / ADT / Triple.h(<一个href=\"http://llvm.org/docs/doxygen/html/Triple_8h_source.html\">http://llvm.org/docs/doxygen/html/Triple_8h_source.html):

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/docs/doxygen/html/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
  };

和在铛/ lib目录/驱动器/ ToolChains.cpp,有关于ARM某事。

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

static const char *GetArmArchForMArch(StringRef Value) {
  return llvm::StringSwitch<const char*>(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<const char *>(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);
}

这篇关于铛:如何列出支持的目标架构?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆