Te instrukcje zakładają, że masz działający kompilator krzyżowy na urządzeniu slave. Przeczytaj: Jak zbudować zestaw narzędzi GCC 4.7 do kompilacji krzyżowej? jeśli nie. Przydatne jest również make
zainstalowanie w systemie głównym.
Instalacja
Najpierw musimy zainstalować distcc
. Będziemy korzystać z gotowych pakietów dostarczonych przez systemy zarządzania pakietami systemów operacyjnych, ale możesz dowolnie instalować ze źródła, jeśli chcesz!
Debian
sudo apt-get install distcc
Łuk
sudo pacman -S distcc
Konfiguracja
Slave - Debian / Ubuntu
DO ZROBIENIA: Czy to samo dotyczy Arch? Jeśli nie, jak skonfigurujemy Arch?
Musimy dostosować ustawienia w /etc/default/distcc
. W swoim ulubionym edytorze otwórz go jako root; Pobiegłem sudo vim /etc/default/distcc
.
Trzeba zmienić STARTDISTCC
, ALLOWEDNETS
i LISTENER
. Zakładając, że twój master i slave znajdują się w tej samej podsieci i ta podsieć jest 192.168.0.0/24
, powinny być ustawione na
STARTDISTCC="true"
ALLOWEDNETS="192.168.0.0/24"
LISTENER="0.0.0.0"
Ponadto należy dodać ścieżkę do kompilatora. Zrobiłem to, dodając następujący wiersz
PATH=$PATH:/home/alex/x-tools/arm-unknown-linux-gnueabi/bin
Uwaga : Demon na urządzeniu podrzędnym będzie działał jako distccd
użytkownik, więc upewnij się, że w plikach wykonywalnych skonfigurowane są odpowiednie uprawnienia; Dałem wszystkim pozwolenie na wykonanie.
Uruchom demona - normalnie byłby uruchamiany podczas rozruchu - przez uruchomienie
sudo service distcc start
Mistrz - Arch
DO ZROBIENIA: Czy to samo dotyczy Debiana? Jeśli nie, jak skonfigurujemy Debiana?
Otwórz ~/.distcc/hosts
w swoim ulubionym edytorze tekstu i dodaj adres IP urządzeń slave. Mój hosts
plik składał się z jednej linii, która czytała 192.168.0.22
.
Uwaga Dobrym pomysłem może być przypisanie statycznego adresu IP do urządzenia podrzędnego, w przeciwnym razie będziesz musiał zmienić ten plik za każdym razem, gdy zmieni się adres IP.
Posługiwać się
Wszystko idzie dobrze, powinieneś móc używać distcc po prostu. Na przykład, aby skompilować hello.c
do hello.o
Prowadzony
distcc arm-unknown-linux-gnueabi-gcc -c -o hello.o hello.c
Przykład: Hello World!
Ustawiłem prosty przykład w moim katalogu domowym, który składał się z 2 plików.
# file: Makefile
hello.o: hello.c
hello: hello.o
# file: hello.c
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
Uruchomienie make hello
zostanie skompilowane lokalnie; powinieneś to zrobić jako szybki test. Dalej, poczekam.
Uruchamianie make hello CC="distcc arm-unknown-linux-gnueabi-gcc"
uruchomi kompilację rozproszoną.
Uwaga: Wstępne przetwarzanie i łączenie nadal odbywa się na RPi.
Debugowanie
Zajęło mi trochę czasu, aby to działało poprawnie, a najlepszym narzędziem do debugowania , które znalazłem, była prosta zmienna środowiskowa. Jeśli ty
export DISTCC_VERBOSE=1
te distcc
ładunki wyjście będzie klient przydatnych informacji.
To długi post, więc każda informacja zwrotna byłaby wdzięczna. Mam nadzieję, że zapamiętałem wszystkie kroki!