Comment créer une chaîne d'outils GCC 4.7 pour la compilation croisée?

82

J'ai déjà posé cette question sur Stack Overflow, mais j'aimerais savoir si quelqu'un a réussi à créer une chaîne d'outils GCC 4.7 pour la compilation croisée ARM (pour un hôte Linux x86 / x86-64). Il existe de nombreuses instructions pour construire GCC à partir des sources et de nombreux compilateurs croisés disponibles pour les versions de GCC antérieures à la version 4.7, mais pas les plus récentes.

Compiler sur Rasp Pi lui-même fonctionne bien, mais c'est un peu trop lent pour des raisons pratiques.

Je suis impatient de compiler et j'aimerais utiliser les outils les plus récents et les meilleurs.

tlhIngan
la source
Cela semble aller dans le sens de ce que je dois faire aussi. Nous développons pour un ARM5 sous Arch Linux. Le développement est sous Ubuntu Linux 10.04 LTS (aujourd'hui, nous pouvons peut-être mettre à jour cela demain, je ne sais pas encore). Nous utilisons actuellement GCC 4.4, mais ce que je dois faire sera utile si GCC 4.7 (minimum) n'est pas requis, sinon GCC 4.8 (si nous pouvons le gérer), pour les fonctionnalités du langage C ++ 11. Il semble que toutes les chaînes d'outils disponibles pour ARM (5 ou autre) soient obsolètes. Est-il possible de construire une chaîne d'outils de compilateur croisés à partir de la source et de prendre en charge le GCC que nous voulons?
mwpowellhtx
J'ai un petit problème dans la deuxième étape. en fait, j'ai fait le ./configure et faire des commandes. Tout fonctionne bien. mais quand j'ai incliné "installer", j'ai reçu un message d'erreur disant: install: opérande de fichier manquant
Voir aussi: raspberrypi.stackexchange.com/q/14587/5538 J'ai dit que c'était une dupe, mais je pensais qu'il valait la peine de créer un lien ici, car la réponse acceptée y est fournie avec des détails considérables qui ne sont pas inclus ici.
goldilocks

Réponses:

60

J'ai trouvé ces instructions Comment construire un compilateur croisé pour votre Raspberry Pi . C’est une excellente méthode pour utiliser un crosstool-ngoutil qui simplifie la configuration d’un compilateur croisé construit A BEAUCOUP (il a une belle interface à base de curses) et supporte GCC 4.7.

J'ai suivi ces étapes et abouti à la construction réussie d'un compilateur croisé 4.7.

Pré - requis: Les packages suivants sont requis: bison , flex , gperf , bouche bée , libtool , automake , g ++ , vérifiez qu'ils sont installés avant de poursuivre.

  1. Premier téléchargement à crosstool-ngpartir d' ici (j'ai utilisé la version 1.15.2).
  2. Déballez la distribution et faites un ./configure/ make/install
  3. Créez un nouveau répertoire quelque part dans le système de fichiers pour y être intégré cd.
  4. Courez ct-ng menuconfig. Vous serez présenté avec un bel ensemble de menus pour configurer votre construction.
  5. Allez dans les chemins et les options diverses. Activer les fonctions d’essai marquées EXPERIMENTAL.
  6. Choisissez un répertoire préfixe approprié . Ceci est le répertoire dans lequel votre compilateur et vos bibliothèques seront installés (tout fonctionne normalement, assurez-vous simplement que le répertoire est vide).

    • REMARQUE: il est également important que vous ayez un accès en écriture au dossier choisi.
  7. Allez dans le menu d' options de cible .

    • Architecture cible: bras
    • Endianité: petit endien
    • Bitness: 32 bits
  8. Vous pouvez également vouloir définir le paramètre virgule flottante sur softfp (voir ceci pour plus d’informations), mais hardfp est plus approprié pour Raspbian.

  9. Allez dans le menu Système d'exploitation et changez l' OS cible en Linux .
  10. Allez dans le menu du compilateur C et choisissez la version 4.7.0 de gcc (l’article recommande Linaro, mais j’ai réussi à le faire fonctionner avec vanilla gcc). Choisissez également des langues supplémentaires que vous souhaitez pouvoir compiler (C ++, Fortran, ...)
  11. Aller au menu C-bibliothèque et en choisir un. La valeur par défaut est eglibc, mais celle-ci ne fonctionnant pas bien pour moi, j'ai donc utilisé glibc (la version la plus récente).

    • REMARQUE: lors de l’étape de construction 13, la construction de eglibc peut échouer si subversion n’est pas installé, car la source ne peut pas être extraite du référentiel.
    • REMARQUE: eglibc ne fait plus partie de la version 1.21.0 en raison de son manque de développement. Voir Si longtemps à Eglibc . Utilisez glibc par défaut. crosstool-ng
  12. Quittez l'outil de configuration lors de l'enregistrement de vos modifications.
  13. Exécuter ct-ng builddans le même répertoire. Attendez un peu (environ 45 minutes dans mon cas) et votre compilateur croisé devrait être prêt.

Semble travailler très bien!

utilisateur13
la source
Wow, 45 minutes, c'est long. Quelle est la rapidité de votre système? J'attends maintenant.
Jivings
Eh bien, c’est peut-être un peu moins, mais il faut tout d’abord compiler toutes les conditions préalables, puis après bintools et gcc, libc et libstdc ++, donc 45 minutes me paraissent raisonnables.
Pourrions-nous ajouter des détails sur la manière de les installer correctement et de mettre à jour le chemin, une fois testé, bien sûr?
Alex Chamberlain
2
De plus, je pense que nous devrions utiliser hardfp, comme le soutient le RPi.
Alex Chamberlain
Peut-être, mais IIRC, le GCC de l'Arch est configuré avec softfp. Je n'ai pas le temps de tester cela maintenant, mais j'ai créé le wiki de la communauté de réponses, alors n'hésitez pas à l'améliorer.
19

Je suis impatient de compiler et j'aimerais utiliser les outils les plus récents et les meilleurs.

En fait, les outils les plus récents et les meilleurs ne doivent pas nécessairement être créés par vous-même. Sur l' outil Raspberry Pi GitHub Repository vous trouverez X86_64et x686toolchains pour le logiciel de compilation croisée.

Je recommande d'utiliser la x86-linux64-cross-arm-linux-hardfpchaîne d'outils, car cela compilera pour Hard Floating Point, ce qui donnera un système beaucoup plus rapide.

$ arm-bcm2708hardfp-linux-gnueabi-gcc --version

arm-bcm2708-linux-gnueabi-gcc-4.5.1 (Broadcom-2708) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.

Remarque: Si vous utilisez un noyau existant, vous devrez utiliser la chaîne d'outils qui correspond au noyau. Les applications HardFP ne fonctionneront pas sur un noyau SoftFP.


Pour utiliser la boîte à outils, il suffit de consulter le référentiel:

git clone https://github.com/raspberrypi/tools.git --depth 1

Ce --depthparamètre signifie que vous ne devez pas attendre que l'historique du référentiel soit également téléchargé (car nous ne l'utilisons pas).

Ajoutez ensuite les fichiers binaires à votre variable PATH:

export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH

Ou pour persister le CHEMIN:

echo "export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH" >> ~/.bashrc
source ~/.bashrc

Pour compiler avec la chaîne d’outils, vous pouvez maintenant ajouter le CROSS_COMPILEparamètre. Par exemple, lors de l'exécution make:

make CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- 

Ou pour simplifier les choses, vous pouvez enregistrer la variable dans bashrc:

echo "export TARGET=arm-bcm2708hardfp-linux-gnueabi" >> ~/.bashrc
source ~/.bashrc

et utilisez maintenant la variable lors de la compilation:

make CROSS_COMPILE=${TARGET}
Jivings
la source
1
Cela semble être gcc-4.5.1.
@Tibor Est-ce mauvais?
Jivings
@Jivings Cela ne répond absolument pas à la question!
Alex Chamberlain
1
Je désapprouve les votes négatifs. @AlexChamberlain Il suggère une méthode alternative intéressante à l'acte fastidieux de construire votre propre chaîne d'outils.
Jivings
2
@ Jivings: C'est très utile. En attendant, c’est gcc4.7.1 (le meilleur que j’ai jamais eu) et la virgule flottante fonctionne tout de suite. Je ne pouvais pas travailler en virgule flottante en utilisant la description originale de Chris publiée par Tibor. Merci beaucoup.
4

Notez que lors de la construction de la chaîne d’outils à l’aide de ct-ng sur centos 6.3 sur un système 64 bits, j’ai été obligé de désélectionner l’option permettant de lier statiquement libstdc ++ car la liaison statique n’était pas prise en charge sur la plate-forme (apparemment).

De plus, bien qu'il soit intéressant d'utiliser la chaîne d'outils prédéfinie du référentiel git, cette chaîne ne semble pas fonctionner sur Centos 6.3 - probablement parce qu'elle est conçue pour un système plus moderne. Je n'ai pas vraiment essayé de minimiser cela.

Shane McCarron
la source
3

Ce guide peut être utile.

Cela m'a aidé à démarrer le mien. J'ai également ajouté quelques commentaires sur le réglage.

Dean Matsen
la source
3

Si vous souhaitez bénéficier d'un hôte rapide pour la compilation d'éléments pour votre RPI, je vous suggère de travailler en environnement croisé via chroot et QEMU. En passant, ceci remplace un compilateur croisé sans tracas.

Configurez simplement un environnement multi-Debian à l'aide de deboostrap / multistrap

(voir le chapitre Approche QEMU / debootstrap) et vous avez terminé.

sparkie
la source
3

Dans le cas où vous allez effectuer une compilation croisée à partir d’OS X: voici le superbe article (et le seul qui m’ait trouvé sur le Web).

Le plus grand avantage est que l'auteur fournit une chaîne d'outils complète et précompilée . Vous n'avez donc qu'à télécharger, décompresser et monter une image dmg. Et c'est tout, vous êtes prêt à effectuer une compilation croisée.

Anton Matosov
la source
2

Si vous avez installé Ubuntu 64 bits edition et les outils de Raspberry Pi SVN et que vous obtenez le message d'erreur:

-bash: /home/I/toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-c++: 
No such file or directory

il suffit de courir:

sudo apt-get install ia32-libs
Oiseau de proie
la source
1

Carlson-Minot Inc. fournit une chaîne d'outils prédéfinie pour les cibles ARM à la fois nues et GNU / Linux. Cette chaîne d’outils est basée sur la chaîne d’outils de Mentor Graphics Sourcery Lite avec des correctifs et des adoptions pour la construction sur OS X. Voir

Anton Matosov
la source