Jak zainstalować distcc?

10

Przeczytałem Jak zbudować zestaw narzędzi GCC 4.7 do kompilacji krzyżowej? i pomyślnie zbudowałem prosty program testowy, który działa na moim RPi.

Aby to zrobić, musiałem uruchomić arm-unknown-linux-gnueabi-gcc hello.c -o hellona moim pulpicie x86 i scppliku wykonywalnym mojego RPi. Jest to powolne i kłopotliwe. Wolę kontrolować kompilację z mojego RPi.

Przeczytałem o distcc, które mogą być wykorzystane do dystrybucji kompilacji z jednej maszyny na drugą.

Jak to zainstalować? Mam zarówno komputery stacjonarne Debian / Ubuntu i Arch Linux, jak i oba systemy operacyjne zainstalowane na kartach SD.

Alex Chamberlain
źródło
Czekałem na kogoś, kto nie jest mną, aby opublikować to pytanie. Naprawdę nie chciałem tego robić. Dobra robota.
Jivings
export DISTCC_VERBOSE=1Dzięki za to ! Właśnie tego chcę debugować mój łańcuch narzędziowy distcc

Odpowiedzi:

12

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ż makezainstalowanie 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, ALLOWEDNETSi 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 distccduż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/hostsw swoim ulubionym edytorze tekstu i dodaj adres IP urządzeń slave. Mój hostsplik 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.cdo hello.oProwadzony

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 hellozostanie 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!

Alex Chamberlain
źródło
Doskonała odpowiedź. Zamierzam dodać to do zakładek w moim rozwoju RPi.
Jivings
@AlexChamberlain Distcc obsługuje teraz „tryb pompy”, który pozwala mu również na dystrybucję przetwarzania wstępnego.
teraquendya
@teraquendya Rzeczywiście tak, nie udało mi się jeszcze opublikować szczegółowych informacji na ten temat. Chcę się upewnić, że wszystko mam dobrze bez trybu pompy.
Alex Chamberlain