Queste istruzioni presuppongono che sullo slave sia presente un compilatore incrociato funzionante. Leggi come creare una toolchain GCC 4.7 per la compilazione incrociata? se non l'hai fatto. È anche utile averlo make
installato sul master.
Installazione
Innanzitutto, dobbiamo installare distcc
. Useremo i pacchetti predefiniti forniti dai sistemi di gestione dei pacchetti dei sistemi operativi, ma se lo desideri sei libero di installare dal sorgente!
Debian
sudo apt-get install distcc
Arco
sudo pacman -S distcc
Configurazione
Slave - Debian / Ubuntu
TODO: È lo stesso per Arch? In caso contrario, come configuriamo Arch?
Dobbiamo regolare le impostazioni in /etc/default/distcc
. Nel tuo editor preferito, aprilo come root; Ho corso sudo vim /etc/default/distcc
.
Devi cambiare STARTDISTCC
, ALLOWEDNETS
e LISTENER
. Supponendo che il tuo master e lo slave siano sulla stessa sottorete e che la sottorete sia 192.168.0.0/24
, dovrebbero essere impostati su
STARTDISTCC="true"
ALLOWEDNETS="192.168.0.0/24"
LISTENER="0.0.0.0"
Inoltre, dovresti aggiungere il percorso al tuo compilatore. L'ho fatto aggiungendo la seguente riga
PATH=$PATH:/home/alex/x-tools/arm-unknown-linux-gnueabi/bin
Nota Il demone sullo slave verrà eseguito come distccd
utente, quindi assicurarsi che siano configurate le autorizzazioni appropriate sui file eseguibili; Ho dato a tutti il permesso di eseguire.
Esegui il demone - normalmente sarebbe avviato all'avvio - eseguendo
sudo service distcc start
Maestro - Arch
TODO: È lo stesso per Debian? In caso contrario, come configuriamo Debian?
Apri ~/.distcc/hosts
nel tuo editor di testo preferito e aggiungi l'indirizzo IP degli Slave. Il mio hosts
file consisteva in una sola riga, che leggeva 192.168.0.22
.
Nota Potrebbe essere una buona idea assegnare un indirizzo IP statico al tuo slave, altrimenti dovrai cambiare questo file ogni volta che cambia l'indirizzo IP.
Uso
Tutto sta andando bene, dovresti essere in grado di usare distcc semplicemente. Ad esempio, per compilare hello.c
a hello.o
, corsa
distcc arm-unknown-linux-gnueabi-gcc -c -o hello.o hello.c
Esempio: Hello World!
Ho creato un semplice esempio nella mia directory home, che consisteva in 2 file.
# file: Makefile
hello.o: hello.c
hello: hello.o
# file: hello.c
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
L'esecuzione make hello
verrà compilata localmente; dovresti farlo prima come test rapido. Dai, aspetterò.
Running make hello CC="distcc arm-unknown-linux-gnueabi-gcc"
eseguirà una compilation distribuita.
Nota La preelaborazione e il collegamento avvengono ancora sull'RPi.
Debug
Mi ci è voluto un po 'per farlo funzionare correttamente e il miglior strumento di debug che ho trovato era una semplice variabile d'ambiente. Se tu
export DISTCC_VERBOSE=1
il distcc
client produrrà un sacco di informazioni utili.
Questo è un post lungo, quindi ogni feedback sarebbe ricevuto con gratitudine. Spero di aver ricordato tutti i passaggi!