Bonjour,
je suis en train de compiler gcc pour Cortex-A9. J'ai déjà compilé binutils avec succès :
mkdir build-arm-cortexa9-elf && cd build-arm-cortexa9-elf
../configure --target="arm-cortexa9-elf" --prefix="/usr/local/ngpdev" --disable-werror
Ensuite je compile gcc :
make
make install
mkdir build-arm-cortexa9-elf && cd build-arm-cortexa9-elf
../configure --target="arm-cortexa9-elf" --prefix="/usr/local/ngpdev" --enable-languages="c" --with-newlib --with-gmp --with-mpfr --without-headers --disable-libssp
make
[...]
checking generated-files-in-srcdir... no
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
config.status: executing default-1 commands
Adding multilib support to Makefile in ../../../../libquadmath
with_multisubdir=fpu
make[1]: quittant le répertoire « /home/terbaddo/gcc-4.6.1/build-arm-cortexa9-elf »
make: *** [all] Erreur 2
Et voilà, j'arrive pas à localiser l'erreur.
Merci ;)
EDIT : Je compile un cross-compilateur Linux vers ARM Cortex-A9, et je compile ce cross-compilateur à partir de Linux ;)
# euh
Posté par nomorsad . Évalué à -2.
juste pour ma culture, comment on compile gcc sans compilateur?
Tu as déjà un autre compilateur installé?
Autrement dit, tu as installé l’œuf ou la poule? ^_^
[^] # Re: euh
Posté par FreeB5D . Évalué à 1.
Avec un cross-compilateur par hasard ? Le compilateur système, lui, est installé vu que notre cher auteur a déjà réussi à compiler binutils pour ARM.
# cross-compilateur ou compilateur natif ?
Posté par ymorin . Évalué à 1.
D'après le sujet de ton message, il n'est pas très clair de savoir si tu veux générer :
* un compilateur croisé qui s'exécute sur ton PC, et cible de l'ARM;
* un compilateur natif qui s'exécute sur ARM, et génère de l'ARM.
Je te conseille de jeter un œil à crosstool-NG.
C'est un outil qui permet de générer des chaînes de cross-compilation. Tu précises les composants que tu veux utiliser, leurs versions, leurs options, et crosstool-NG télécharge, extrait, patch, configure, compile et installe le tout, avec les bonnes options, dans le bon ordre. Pour info, il y a des 'samples', dont un sait deja générer une chaîne de compilation croisée pour ARM Cortex-A8 (passer à du A9 est trivial).
Et puisque j'en suis le mainteneur, je ne peux qu'en dire du bien! ;-) Il y a sur le site toutes les infos pour commencer, et nous contacter (liste de diffusion, canal IRC).
Hop,
Moi.
PS. Je me disais qu'un jour j'allais faire un petit article (journal ou dépêche) qui rentre dans les détails de la génération de chaînes de compilation, croisée, native, canadienne et cross-native. Je vais voir à libérer quelques heures pour ca s'il y a de l'intérêt...
[^] # Re: cross-compilateur ou compilateur natif ?
Posté par ymorin . Évalué à 1.
Ah, déjà, un petit aperçu de ce que ca donne en anglais :
How is a toolchain constructed
# Re : Compiler gcc pour ARM Cortex-A9
Posté par Terbaddo . Évalué à -2.
Bonjour,
c'est un cross-compilateur Linux vers ARM Cortex-A9.
[^] # Re: Re : Compiler gcc pour ARM Cortex-A9
Posté par ymorin . Évalué à 0.
Ce n'est pas suffisant comme infos.
Premièrement, 'Linux' c'est l'OS ; il tourne sur plusieurs architectures. Donc on ne sait pas sur quelle type de machine tu veux compiler. Est-ce que tu veux compiler sur un x86 vers ARM, ou d'un MIPS vers un ARM? Ou d'un PowerPC vers un ARM?
Ensuite, 'ARM' c'est une architecture ; on peut y faire tourner plusieurs OS, voire pas du tout (eg. bootloader). Est-ce que tu veux y faire tourner un Windows CE (TM)? Un Linux ? Ou rien de tout ca, juste du bare-metal ?
Par exemple, dire :
est déjà plus parlant. ;-)
Hop,
Moi.
[^] # Re: Re : Compiler gcc pour ARM Cortex-A9
Posté par Terbaddo . Évalué à 0.
Bonjour,
c'est un Linux i686 32 bits, j'ai jugé pas très utile de le préciser :/
J'ai fais ce cross-compilateur pour la PlayStation Vita (console portable de Sony), que j'ai créé pour servir de base à un éventuel futur SDK de création de homebrews (=applications non officielles). Tout seul il ne sert à rien ;)
Je ne sais pas sous quel OS il tournera. Ce sera un OS propriétaire qu'on connait pas. Donc on reste sur le "pas du tout".
Si vous voulez plus de précisions, voici les versions des outils du toolchain que je suis en train de créer :
- binutils 2.21.1
- gcc 4.6.1
- newlib 1.9.0
Ce sont les dernières versions, enfin, normalement ;) Le target est arm-cortexa9-elf, j'ai rien modifié aux sources pour le moment.
[^] # Re: Re : Compiler gcc pour ARM Cortex-A9
Posté par Terbaddo . Évalué à -1.
Voila j'ai résolu le problème. J'ai réussi à compiler binutils, la première étape de gcc et newlib. Voici ce que j'ai à la deuxième étape de gcc, quand je fais make install : http://pastebin.com/V5bbBFyZ
Voici mon script install.sh qui s'occupe de tout ça : http://pastebin.com/HnU8GBZp
Quand je fais make all-gcc à la place de make, et make install-gcc à la place de make install, la compilation se termine, aucune erreur visible. Seulement, quand on compile, il ne trouve pas -lgcc .
[^] # Re: Re : Compiler gcc pour ARM Cortex-A9
Posté par Nicolas Boulay (site web personnel) . Évalué à 0.
/home/terbaddo/gcc-4.6.1/build-arm-cortexa9-elf-2/./gcc/include/stdint.h:3:26: erreur fatale: stdint.h : Aucun fichier ou dossier de ce type
On dirait qu'il manque des headers. Il doit te manquer une dépendance.
"La première sécurité est la liberté"
[^] # Re: Re : Compiler gcc pour ARM Cortex-A9
Posté par Terbaddo . Évalué à 0.
Non, c'est juste que ma version de newlib était trop ancienne.
# Pistes...
Posté par ymorin . Évalué à 2.
Bon, il n'y a pas assez d'infos pour resoudre le probleme.
Ceci dit, quelques pistes :
Generer une chaine de compilation croisee n'est pas de tout repos, crois-en ma (tres) grand experience. Si c'est ta premiere chaine de compilation croisee, je te conseille fortement d'utiliser un outil qui automatise tout ca. Ensuite, tu peux regarder ce que cet outil fait, dans quel ordre il le fait, avec quelles options, et ensuite essayer de reproduire 'a-la-main'.
Mais franchement, pour que les devs de gcc et (surtout) glibc disent (en substance) :
( Je ne retrouve pas le pointeur, mais c'est encore du grand Ulrich... )
Meme si tu utilises newlib, cette remarque reste valide.
A noter, avec crosstool-NG, j'ai genere une chaine de compilation croisee pour 'arm-cortex_a9-elf' sans souci. La difference avec ta config, c'est just binutils-2.21 et newlib-1.18.0. J'ai passe 5 minutes dans le menu de configuration, et environ 10 minutes de compilation (mais ma machine est tres rapide). Sur une machine plus modeste, compte environ 20-30 minutes. Je peux te fournir le fichier de config si tu veux. Viens nous rejoindre sur IRC et la liste de diffucsion ! ;-)
Hop,
Moi.
# Merci
Posté par Terbaddo . Évalué à 1.
Bonjour,
j'ai mis newlib 1.19.0 et ça marche. Merci ;)
# Compilation canadienne Linux x86 => Cygwin x86 => ARM Cortex-A9
Posté par Terbaddo . Évalué à 0.
Bonjour,
maintenant que j'ai fini mon cross-compilateur, j'aimerais bien le faire marcher sur Windows, Cygwin x86 plus précisément (dites moi si on peut nativement sans trop de difficultés). Je voudrais avoir un compilateur, tournant sur Cygwin, générant du code ARM Cortex-A9, et je voudrais compiler ce compilateur sur mon Linux x86.
Pour le moment, je n'ai que :
- Un compilateur Linux x86 (i686-linux-gnu-gcc)
- Un cross-compilateur Linux x86 => ARM Cortex-A9 (arm-cortexa9-elf-gcc)
J'ai donc commencé la compilation d'un cross-compilateur Linux x86 => Cygwin x86.
Ceci marche très bien pour compiler binutils :
mkdir build-i686-cygwin && cd build-i686-cygwin
../configure --target="i686-cygwin"
make
make install
Mais j'ai ça pour gcc :
mkdir -p build-i686-cygwin-1 && cd build-i686-cygwin-1
../configure --target="i686-cygwin" --enable-languages="c" --with-mpfr="/usr/local" --with-gmp="/usr/local" --with-newlib --without-headers
make -j 2
In file included from /home/terbaddo/gcc-4.6.1/build-i686-cygwin-1/./gcc/include-fixed/syslimits.h:7:0,
from /home/terbaddo/gcc-4.6.1/build-i686-cygwin-1/./gcc/include-fixed/limits.h:34,
from ../../../libgcc/../gcc/libgcc2.c:1689:
/home/terbaddo/gcc-4.6.1/build-i686-cygwin-1/./gcc/include-fixed/limits.h:169:61: erreur: aucun chemin d'inclusion dans lequel on pourrait repérer limits.h
make[2]: *** [_fixunssfsi.o] Erreur 1
make[2]: *** Attente des tâches non terminées....
make[2]: quittant le répertoire « /home/terbaddo/gcc-4.6.1/build-i686-cygwin-1/i686-cygwin/libgcc »
make[1]: *** [all-target-libgcc] Erreur 2
make[1]: quittant le répertoire « /home/terbaddo/gcc-4.6.1/build-i686-cygwin-1 »
make: *** [all] Erreur 2
C'est bizarre, j'ai mis "--without-headers"
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.