¿Cómo instalo distcc?

10

He leído ¿Cómo construir una cadena de herramientas GCC 4.7 para compilación cruzada? y he creado con éxito un programa de prueba simple que funciona en mi RPi.

Para hacer esto, tuve que ejecutar arm-unknown-linux-gnueabi-gcc hello.c -o helloen mi escritorio x86 y scpel ejecutable en mi RPi. Esto es lento y una molestia. Prefiero controlar la compilación desde mi RPi.

He leído sobre distcc, que se puede utilizar para distribuir la compilación de una máquina a otra.

¿Cómo instalo esto? Tengo los escritorios Debian / Ubuntu y Arch Linux y ambos SO instalados en las tarjetas SD.

Alex Chamberlain
fuente
He estado esperando que alguien que no sea yo publique esta pregunta. Realmente no quería hacerlo. Buen trabajo.
Jivings
export DISTCC_VERBOSE=1Gracias por esto ! Es lo que estoy buscando para depurar mi cadena de herramientas

Respuestas:

12

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 makeinstalado 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, ALLOWEDNETSy 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 distccdusuario, 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/hostsen su editor de texto favorito y agregue la dirección IP de los esclavos. Mi hostsarchivo 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.ca 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 hellose 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 distcccliente 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!

Alex Chamberlain
fuente
Excelente respuesta Voy a marcar esto para mi desarrollo de RPi.
Jivings
@AlexChamberlain Distcc ahora es compatible con el "modo de bomba" que también le permite distribuir el preprocesamiento.
teraquendya
@teraquendya De hecho, todavía no he podido publicar detalles sobre esto. Quiero asegurarme de tener todo bien sin el modo de bomba primero.
Alex Chamberlain