铛:如何列出支持的目标架构? [英] clang: how to list supported target architectures?
问题描述
目前,我一般和专门的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屋!