Forum Programmation.c Compiler gcc pour ARM Cortex-A9

Posté par  .
Étiquettes : aucune
-1
3
juil.
2011

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  . É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  . É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  . É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 : Compiler gcc pour ARM Cortex-A9

    Posté par  . Évalué à -2.

    Bonjour,
    c'est un cross-compilateur Linux vers ARM Cortex-A9.

    • [^] # Re: Re : Compiler gcc pour ARM Cortex-A9

      Posté par  . Évalué à 0.

      c'est un cross-compilateur Linux vers ARM Cortex-A9.

      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 :

      C'est un compilateur qui :

      • est généré sur mon PC x86_64 sous OS Linux
      • s'éxecute sur mon PC x86_64 sous OS Linux
      • génère du code ARM sous OS Linux

      est déjà plus parlant. ;-)

      Hop,
      Moi.

      • [^] # Re: Re : Compiler gcc pour ARM Cortex-A9

        Posté par  . É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  . É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 .

  • # Pistes...

    Posté par  . Évalué à 2.

    Bon, il n'y a pas assez d'infos pour resoudre le probleme.

    Ceci dit, quelques pistes :

    • il est deconseille de compiler dans un sous-repertoire des sources, il vaut mieux remonter d'un cran :

    ls -1
    gcc-4.6.1
    mkdir build-gcc
    cd build-gcc
    ../gcc-4.6.1/configure --bla-bla...
    
    • ensuite, tu peux voir plus d'explications sur les erreurs en allant dans le repertoire incrimine, et en regardant le fichier 'config.log':

    cd libquadmath
    less config.log
    
    • dernier petit point : newlib-1.9.0 a maintenant plus de 10 ans (sortie en fevrier 2001) ! Alors que la 1.18.0 a 1.5 ans, et la 1.19.0 a 7 mois.

    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) :

    Ne compilez pas vous-meme glibc, c'est trop complique; utilisez celle de votre distrib.

    ( 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  . É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  . É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.