Estas instrucciones asumen que tiene un compilador cruzado en funcionamiento en el esclavo. Lea ¿Cómo construir una cadena de herramientas GCC 4.7 para compilación cruzada? si no lo has hecho También es útil tener make
instalado en el maestro.
Instalación
Primero, debemos instalar distcc
. Utilizaremos los paquetes precompilados suministrados por los sistemas de administración de paquetes de los sistemas operativos, pero puede instalarlos desde el origen si lo desea.
Debian
sudo apt-get install distcc
Arco
sudo pacman -S distcc
Configuración
Esclavo - Debian / Ubuntu
TODO: ¿Es lo mismo para Arch? Si no, ¿cómo configuramos Arch?
Necesitamos ajustar la configuración en /etc/default/distcc
. En su editor favorito, ábralo como root; Me encontré sudo vim /etc/default/distcc
.
Necesitas cambiar STARTDISTCC
, ALLOWEDNETS
y LISTENER
. Suponiendo que tiene su maestro y esclavo en la misma subred y que esa subred lo está 192.168.0.0/24
, deben configurarse en
STARTDISTCC="true"
ALLOWEDNETS="192.168.0.0/24"
LISTENER="0.0.0.0"
Además, debe agregar la ruta a su compilador. Hice esto agregando la siguiente línea
PATH=$PATH:/home/alex/x-tools/arm-unknown-linux-gnueabi/bin
Nota El daemon en el esclavo se ejecutará como distccd
usuario, por lo tanto, asegúrese de que los permisos apropiados estén configurados en sus ejecutables; Les di permiso a todos para ejecutar.
Ejecute el demonio, normalmente se iniciará en el arranque, ejecutando
sudo service distcc start
Maestro - Arco
TODO: ¿Es lo mismo para Debian? Si no, ¿cómo configuramos Debian?
Abra ~/.distcc/hosts
en su editor de texto favorito y agregue la dirección IP de los esclavos. Mi hosts
archivo constaba de una sola línea, que decía 192.168.0.22
.
Nota: puede ser una buena idea asignar una dirección IP estática a su esclavo, de lo contrario tendrá que cambiar este archivo cada vez que cambie la dirección IP.
Utilizar
Todo va bien, deberías poder usar distcc de manera bastante simple. Por ejemplo, para compilar hello.c
a hello.o
, ejecución
distcc arm-unknown-linux-gnueabi-gcc -c -o hello.o hello.c
Ejemplo: Hola Mundo!
Configuré un ejemplo simple en mi directorio de inicio, que consistía en 2 archivos.
# file: Makefile
hello.o: hello.c
hello: hello.o
# file: hello.c
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
Running make hello
se compilará localmente; debes hacer esto como una prueba rápida primero. Vamos, esperaré.
La ejecución make hello CC="distcc arm-unknown-linux-gnueabi-gcc"
ejecutará una compilación distribuida.
Nota El preprocesamiento y la vinculación aún se producen en el RPi.
Depuración
Me tomó un tiempo hacer que funcionara correctamente, y la mejor herramienta de depuración que encontré fue una variable de entorno simple. Si tu
export DISTCC_VERBOSE=1
el distcc
cliente generará mucha información útil.
Esta es una publicación larga, por lo que cualquier comentario será recibido con gratitud. ¡Espero haber recordado todos los pasos!