145 votes

clang : comment lister les architectures cibles supportées ?

Actuellement, je m'intéresse à ARM en général et plus particulièrement aux cibles iphone/Android. Mais je veux juste en savoir plus sur clang, car il semble jouer un rôle important dans les années à venir.

J'ai essayé

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)

Je sais que clang a un paramètre -triplet, mais comment puis-je lister toutes les valeurs possibles pour ce paramètre ? J'ai découvert que clang est très différent de gcc en ce qui concerne la compilation croisée, dans le monde de GCC vous devriez avoir un binaire séparé pour tout, comme PLATFORM_make ou PLATFORM_ld (i*86-pc-cygwin i*86-*-linux-gnu etc.). http://git.savannah.gnu.org/cgit/libtool.git/tree/doc/PLATFORMS )

dans le monde clang, il n'y a qu'un seul binaire (comme je l'ai lu sur certains forums). Mais comment puis-je obtenir la liste des cibles supportées ? Et si ma cible n'est pas supportée sur ma distro (linux/Windows/macos/quelque chose) comment puis-je obtenir celle qui supporte plus de plateforme ?

si je fais la dernière version SVN de clang comme ceci :

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

Est-ce que j'obtiendrai la plupart des plateformes ? Il semble que Clang n'ait pas été construit avec la compilation croisée à l'esprit dès le départ, mais comme il est basé sur llvm, il devrait être très convivial en théorie ? merci !

0voto

jw_ Points 1157

Seul le premier (architecture du CPU) doit être exact, les autres paramètres sont traités de manière intelligente et complexe, vous pouvez utiliser "clang++ ... --verbose ..." pour voir le résultat traité, par exemple :

Command Line Input      After triple processing
x86_64                  x86_64
x86_64-foo              x86_64-foo
x86_64-windows          x86_64-unknown-windows-msvc19.28.29335
x86_64-windows-bar      x86_64-unknown-windows-msvc19.28.29335
x86_64-foo-windows-bar  x86_64-foo-windows-msvc19.28.29335
x86_64-foo-bar-foobar   x86_64-foo-bar-foobar

En général, les paramètres, à l'exception du premier, n'ont d'effet que lorsqu'ils sont corrects (après le triple processus de traitement qui peut rendre un paramètre incorrect correct de manière intelligente), par exemple, "Windows" aura un effet sur le code :

/// Tests whether the OS is Windows.
bool isOSWindows() const {
    return getOS() == Triple::Win32;
}

Cette méthode est utilisée par d'autres codes dans Clang/LLVM pour affecter le résultat compilé, elle ne renvoie que vrai quand le paramètre est "Windows" et renvoie faux si c'est n'importe quelle autre chose comme "foo".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X