Ces instructions supposent que vous disposez d'un compilateur croisé fonctionnel sur l'esclave. Veuillez lire Comment construire une chaîne d'outils GCC 4.7 pour la compilation croisée? si ce n'est pas le cas. Il est également utile d'avoir make
installé sur le maître.
Installation
Tout d'abord, nous devons installer distcc
. Nous utiliserons les packages prédéfinis fournis par les systèmes de gestion des packages des systèmes d'exploitation, mais vous êtes libre d'installer à partir des sources si vous le souhaitez!
Debian
sudo apt-get install distcc
Cambre
sudo pacman -S distcc
Configuration
Esclave - Debian / Ubuntu
TODO: Est-ce la même chose pour Arch? Sinon, comment configurer Arch?
Nous devons ajuster les paramètres /etc/default/distcc
. Dans votre éditeur préféré, ouvrez-le en tant que root; J'ai couru sudo vim /etc/default/distcc
.
Vous devez changer STARTDISTCC
, ALLOWEDNETS
et LISTENER
. En supposant que votre maître et votre esclave se trouvent sur le même sous-réseau et que ce sous-réseau soit 192.168.0.0/24
, ils doivent être définis sur
STARTDISTCC="true"
ALLOWEDNETS="192.168.0.0/24"
LISTENER="0.0.0.0"
En outre, vous devez ajouter le chemin d'accès à votre compilateur. Je l'ai fait en ajoutant la ligne suivante
PATH=$PATH:/home/alex/x-tools/arm-unknown-linux-gnueabi/bin
Remarque Le démon sur l'esclave s'exécutera en tant distccd
qu'utilisateur, assurez-vous donc que les autorisations appropriées sont configurées sur vos exécutables; J'ai donné à tout le monde la permission d'exécuter.
Exécutez le démon - il serait normalement démarré au démarrage - en exécutant
sudo service distcc start
Maître - Arch
TODO: Est-ce la même chose pour Debian? Sinon, comment configurer Debian?
Ouvrez ~/.distcc/hosts
dans votre éditeur de texte préféré et ajoutez l'adresse IP des esclaves. Mon hosts
dossier était composé d'une seule ligne, qui se lisait 192.168.0.22
.
Remarque Il peut être judicieux d'attribuer une adresse IP statique à votre esclave, sinon vous devrez modifier ce fichier chaque fois que l'adresse IP change.
Utilisation
Tout va bien, vous devriez pouvoir utiliser distcc tout simplement. Par exemple, pour compiler hello.c
à hello.o
, terme
distcc arm-unknown-linux-gnueabi-gcc -c -o hello.o hello.c
Exemple: Bonjour tout le monde!
J'ai mis en place un exemple simple dans mon répertoire personnel, composé de 2 fichiers.
# file: Makefile
hello.o: hello.c
hello: hello.o
# file: hello.c
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
L'exécution make hello
se compilera localement; vous devez d'abord le faire comme un test rapide. Allez, je vais attendre.
Running make hello CC="distcc arm-unknown-linux-gnueabi-gcc"
exécutera une compilation distribuée.
Remarque Le prétraitement et la liaison se produisent toujours sur le RPi.
Débogage
Il m'a fallu un certain temps pour que cela fonctionne correctement, et le meilleur outil de débogage que j'ai trouvé était une simple variable d'environnement. Si vous
export DISTCC_VERBOSE=1
le distcc
client produira des charges d'informations utiles.
Ceci est un long post, donc tous les commentaires seront reçus avec gratitude. J'espère que je me suis souvenu de toutes les étapes!