Distcc/Cross-Compiling/fr

Ce guide vous explique comment configurer distcc pour la compilation croisée à travers différentes architectures de processeur.

Introduction
est un outil qui vous permet de partager les tâches de compilation d'un logiciel sur plusieurs ordinateurs en réseau. Tant que les ordinateurs en réseau utilisent tous la même chaîne d'outils compilée pour la même architecture, aucune configuration spéciale de  n'est requise. Mais que faire pour compiler pour différentes architectures en utilisant des ordinateurs différents ? Ce guide va vous montre comment configurer  pour compiler pour différentes architectures.

Installer les utilitaires nécessaires
Tout d'abord, vous devez installer  sur toutes les machines qui seront impliquées dans le processus de compilation. est un outil qui permet une compilation facile de la chaîne des outils de compilation croisée. Il a été écrit à l'origine par Joshua Kinard et a été réécrit totalement par Mike Frysinger. Son utilisation est assez directe :  compile une chaîne d'outils complète en ciblant l'architecture Sparc. Ceci inclut binutils, gcc, glibc, et linux-headers. Si vous avez besoin de plus d'aide, essayez d'exécuter. Évidemment, vous devrez installer la chaîne des outils de compilation croisée sur tous les ordinateurs participants.

Si vous voulez régler finement la chaine de compilation croisée (cross-toolchain), voici un script qui produira une ligne de commande avec la version exacte du paquet de développement croisé à construire sur les machines assistantes (le script est à exécuter depuis la machine cible).

Ensuite il vous faudra installer   sur toutes les machines qui sont impliquées dans le processus. Ceci inclut la machine qui doit exécuter emerge et les machines disposant du compilateur croisé (cross-compiler). Reportez-vous à la Documentation Gentoo de Distcc pour plus d'informations sur la manière de paramétrer et d'utiliser.

Intel x86 sub-architectures
Si vous effectuez une compilation croisée entre des sous-architectures pour Intel x86 (par exemple i586 et i686), vous devez toujours compiler une chaîne de compilation croisée complète pour le CHOST désiré, ou autrement la compilation échouera. Ceci est dû au fait que i586 et i686 sont réellement des CHOSTs différents, malgré le fait qu'ils sont tous les deux considérés comme des x86. Garder cela à l'esprit lorsque vous compilez la chaîne de compilation croisée. Par exemple, si la machine cible est i586, ceci signifie que vous devez compiler les chaînes de compilation croisées sur vos machines assistantes i686.

SPARC
Utiliser  pourrait échouer avec une des erreurs suivantes :

Si cela vous arrive, essayez la commande suivante à la place de la précédente :

Configurer distcc pour des compilations croisées correctes
Dans la configuration par défaut de distcc, la compilation croisée ne fonctionnera pas correctement. Le problème est que beaucoup d'ebuilds appellent simplement le compilateur  au lieu de l'appeler par son nom complet (par exemple,    ). Quand cette compilation est distribuée sur une machine participante, le compilateur natif est appelé à la place de votre compilateur croisé flambant neuf.

Heureusement, il y a un moyen de contourner ce petit problème. Tout ce qu'il faut, c'est un script enveloppe et quelques liens symboliques sur la machine qui exécutera la commande d'installation. Nous allons utiliser le machine Sparc comme un exemple. Partout où vous rencontrez   ci-dessous, vous devrez insérer votre propre CHOST (   pour  une machine AMD64, par exemple). Quand vous installerez distcc pour la première fois, le répertoire devrait ressembler à ceci :

Voici ce que vous devez faire :

Ensuite, nous allons créer le nouveau script sur cette machine. Lancez votre éditeur favori et créez un fichier avec le texte suivant, puis sauvegardez-le comme. Pensez à remplacer CHOST (dans ce cas,   ) par le CHOST réel de la machine qui exécutera la commande emerge.

Ensuite, nous allons rendre le script exécutable et créer les liens symboliques corrects :

Voilà, c'est terminé. devrait ressemble à ceci :

Ensuite nous devons nous assurer que ces enveloppes restent disponibles après la mise à jour du paquet distcc car il écrase les liens symboliques. Nous pouvons le faire grâce au fichier qui ressemble à ceci :

Congratulations; you (hopefully) now have a working cross-distcc setup.

Comment ça marche
Lorsque  est appelé, il recherche ce qui est appelé  (par exemple  ,   , etc.) Lorsque distcc distribue ensuite la compilation à une machine assistante, il lui passe le nom par lequel il a été appelé. Le démon distcc sur l'autre machine assistante recherche alors un binaire de ce nom. S'il voit simplement  , il cherchera    , qui est probablement le compilateur natif sur la machine assistante, si ce n'est pas la même architecture que celle de la machine exécutant la commande. Quand le nom complet du compilateur est envoyé, (par exemple,   ), il ne peut y avoir de  confusion.

Troubleshooting
This section covers a number of common problems when using distcc for cross-compiling.

Remote host distccd COMPILE ERRORS
When receiving the message  within a remote host's  file, see the above notes concerning specifying the correct architecture name (ie. crossdev -t $TARGET).

Another solution is to uninstall and re-install crossdev compiler tools, using the crossdev --clean option, or ensuring no longer exists, and then completely reinstall the cross compiler.

It might also be wise to edit the remote host's, and ensure the contents of the  variable are similar on all computers or hosts performing compiler operations.

Failed to exec $TARGET-uknown-linux-gnu-gcc: No such file or directory
The wrapper scripts might fail to execute, even with correct permissions:

To resolve this, make sure to have the wrapper script created with the complete name of the architecture target: