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 d'un réseau. Tant que les ordinateurs du 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.

Ce guide va vous montrer comment configurer  afin de permettre la compilation pour des architectures différentes.

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

Il vous faudra emerger la chaîne d'outils de compilation croisée sur toute les machines aidant à la compilation. Si vous avez besoin d'aide supplémentaire, tentez de lancer.

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 :

Then create one of the following files as applicable. If you are not using clang:

If you ARE using clang:

Give it the proper permissions:

Félicitations ! Vous disposez maintenant d'une configuration distcc avec compilation croisée fonctionnelle.

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.

Dépannage
Cette section couvre un certain nombre des problèmes habituels dus à l'utilisation de distcc pour la compilation croisée.

COMPILE ERRORS sur l’hôte distccd distant
En cas d'apparition du message  dans le fichier  de l'un des hôtes distant, regardez ci-dessus les notes concernant la spécification du nom correct pour l'architecture  (c'est à dire: crossdev -t $TARGET).

Une autre solution consiste à désinstaller et réinstaller les outils de compilation crossdev, en utilisant l'option crossdev --clean, ou en s'assurant que n'existe plus, puis en réinstallant complètement l'outil de compilation croisée.

Il peut aussi être prudent d’éditer le fichier  de l’hôte distant afin de s'assurer que le contenu de la variable   est similaire sur tous les ordinateurs ou hôtes performant les opérations de compilation.

Failed to exec $TARGET-uknown-linux-gnu-gcc: No such file or directory
Il est possible que le script d'emballage (wrapper) ne parvienne pas à s’exécuter, même avec les bonnes permissions :

Pour résoudre ceci, assurez vous d'avoir créé le script d'emballage (wrapper) en utilisant le nom complet de l'architecture cible: