Distcc i różne wersje GCC

Na innym komputerze nadal mam GCC 4.1.2 i coś czuję, że nieprędko to się zmieni. Nie stracić korzyści wynikających z distcc tylko dlatego, że na najmocniejszej maszynie zaktualizowałem GCC do 4.3. Musiałem więc coś wymyślić. I tak dzięki wujkowi Google i własnej inwencji powstał poniższe rozwiązanie. Jest nim wrapper dla klienta distcc, który zmusza do używania konkretnej wersji GCC. Rzecz jasna, żeby to zadziałało, na serwerze distcc musi być zainstalowana odpowiednia wersja GCC (w tym przykładzie 4.1.2). Wszystkie komputery muszą też rzecz jasna używać tej samej architektury. Jeśli interesuje was kompilacja skrośna, możecie posiłkować się pierwotnym HOWTO.

Jak to zrobić:
1) Tworzymy plik /usr/lib/distcc/bin/wrapper.sh o treści:

#!/bin/bash
exec distcc i686-pc-linux-gnu-g${0:$[-2]}-4.1.2 "$@"

2) Zastępujemy wszystkie symlinki z katalogu /usr/lib/distcc/bin symlinkami do wrapper.sh

Przed:

lrwxrwxrwx 1 root root 15 wrz 18  2006 c++ -> /usr/bin/distcc
lrwxrwxrwx 1 root root 15 wrz 18  2006 cc -> /usr/bin/distcc
lrwxrwxrwx 1 root root 15 wrz 18  2006 g++ -> /usr/bin/distcc
lrwxrwxrwx 1 root root 15 wrz 18  2006 gcc -> /usr/bin/distcc
lrwxrwxrwx 1 root root 15 wrz 18  2006 i686-pc-linux-gnu-c++ -> /usr/bin/distcc
lrwxrwxrwx 1 root root 15 wrz 18  2006 i686-pc-linux-gnu-g++ -> /usr/bin/distcc
lrwxrwxrwx 1 root root 15 wrz 18  2006 i686-pc-linux-gnu-gcc -> /usr/bin/distcc

Po:

lrwxrwxrwx 1 root root   10 lut 20 19:17 c++ -> wrapper.sh
lrwxrwxrwx 1 root root   10 lut 20 19:17 cc -> wrapper.sh
lrwxrwxrwx 1 root root   10 lut 20 19:17 g++ -> wrapper.sh
lrwxrwxrwx 1 root root   10 lut 20 19:17 gcc -> wrapper.sh
lrwxrwxrwx 1 root root   10 lut 20 19:17 i686-pc-linux-gnu-c++ -> wrapper.sh
lrwxrwxrwx 1 root root   10 lut 20 19:17 i686-pc-linux-gnu-g++ -> wrapper.sh
lrwxrwxrwx 1 root root   10 lut 20 19:17 i686-pc-linux-gnu-gcc -> wrapper.sh
-rwxr-xr-x 1 root root   65 lut 20 19:39 wrapper.sh

To wszystko, po wykonaniu tych kroków klient distcc powinien używać właściwej wersji GCC :)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *