Gentoo Logo

Guía de compilación cruzada de DistCC

1.  Compilación cruzada con distcc

Introducción

distcc es una herramienta que permite compartir la carga de compilación de software entre varios computadores en una red. Mientras todos los computadores usen las mismas herramientas de sistema (toolchain) construidas para la misma arquitectura o procesador no hace falta ninguna configuración especial para distcc. Pero ¿qué hacer si necesita compilar para una arquitectura diferente usando computadores diferentes? Esta guía enseñará cómo configurar distcc para compilar para diferentes arquitecturas.

Instale las herramientas necesarias

Primero debe hacer emerge crossdev en cada uno de los equipos involucrados en el proceso de compilación. crossdev es una herramienta que hace más fácil la construcción de herramientas de sistema para arquitecturas en forma cruzada. Fue escrito originalmente por Joshua Kinard y fue re-escrito completamente por Mike Frysinger. Su uso es sencillo: crossdev -t sparc construirá un conjunto de herramientas de sistema cruzado para la arquitectura sparc. Esto incluye binutils, gcc, glibc y linux-headers. Si necesita más ayuda, intente ejecutar crossdev --help. Obviamente, solo necesitará hacer emerge al conjunto de herramientas del sistema cruzado adecuado en los equipos que asisten a la compilación.

A continuación, debe hacer emerge distcc en todos los equipos involucrados en la compilación compartida. Esto incluye el equipo que ejecutará el emerge y los computadores con los compiladores cruzados. Por favor vea la documentación Gentoo distcc para más información acerca de la configuración y uso de distcc.

Notas específicas por arquitectura

Si está haciendo una compilación cruzada entre distintas subarquitecturas para Intel x86 (por ejemplo, i586 e i686), debe construir el conjunto de herramientas de sistema cruzado para el CHOST requerido o sino fallará la compilación. Esto es porque el i586 y el i686 son CHOSTs diferentes a pesar que ambos son considerados "x86." Por favor tome esto en cuenta al construir sus herramientas de sistema cruzado. Por ejemplo, si el sistema objetivo es i586, tiene que construir las herramientas de sistema cruzado en los equipos i686 coadyuvantes.

Configurando distcc para compilaciones cruzadas correctas

En la configuración por defecto de distcc, la compilación cruzada no funcionará correctamente. El problema es que muchos paquetes solo llaman gcc en vez de usar el nombre completo (por ejemplo, sparc-unknown-linux-gnu-gcc). Cuando esta tarea de compilación se distribuye a un equipo coadyuvante, este es pasado al compilador nativo y no al compilador cruzado.

Afortunadamente existe una solución para este pequeño problema. Lo único que se requiere es un guión tipo envoltorio y algunos enlaces simbólicos en el equipo que hace el emerge. Usaré mi equipo Sparc como ejemplo. Donde quiera que vea sparc-unknown-linux-gnu a continuación, sustitúyalo por su propio CHOST (por ejemplo, x86_64-pc-linux-gnu para un equipo AMD64). Al hacer emerge distcc inicialmente, el directorio /usr/lib/distcc/bin será así:

Nota: Las siguientes instrucciones son solamente para el equipo que corre el emerge. No las ejecute en los equipos coadyuvantes.

Listado de Código 1.1: Compiladores disponibles

# cd /usr/lib/distcc/bin
# ls -l
total 0
lrwxrwxrwx  1 root root 15 Dec 23 20:13 c++ -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 cc -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 g++ -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 gcc -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 sparc-unknown-linux-gnu-c++ -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 sparc-unknown-linux-gnu-g++ -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 sparc-unknown-linux-gnu-gcc -> /usr/bin/distcc

A continuación lo que debemos hacer:

Listado de Código 1.2: Modificando nuestro distcc

# rm c++ g++ gcc cc

A continuación crearemos un guión nuevo para este computador. Use su editor de texto y cree un archivo con el siguiente texto, luego sálvelo como sparc-unknown-linux-gnu-wrapper. Recuerde cambiar el CHOST (en est caso sparc-unknown-linux-gnu) al CHOST del equipo que correrá el emerge.

Listado de Código 1.3: El nuevo guión envoltorio

#!/bin/bash
exec /usr/lib/distcc/bin/sparc-unknown-linux-gnu-g${0:$[-2]} "$@"

Luego, haremos que el guión sea ejecutable y crearemos los enlaces simbólicos adecuados:

Listado de Código 1.4: Creando los enlaces sinbólicos

# chmod a+x sparc-unknown-linux-gnu-wrapper
# ln -s sparc-unknown-linux-gnu-wrapper cc
# ln -s sparc-unknown-linux-gnu-wrapper gcc
# ln -s sparc-unknown-linux-gnu-wrapper g++
# ln -s sparc-unknown-linux-gnu-wrapper c++

Al terminar, el directorio /usr/lib/distcc/bin se verá así:

Listado de Código 1.5: Como debe ser nuestro conjunto de compiladores

# ls -l
total 4
lrwxrwxrwx  1 root root 25 Jan 18 14:20 c++ -> sparc-unknown-linux-gnu-wrapper
lrwxrwxrwx  1 root root 25 Jan 18 14:20 cc -> sparc-unknown-linux-gnu-wrapper
lrwxrwxrwx  1 root root 25 Jan 18 14:20 g++ -> sparc-unknown-linux-gnu-wrapper
lrwxrwxrwx  1 root root 25 Jan 18 14:20 gcc -> sparc-unknown-linux-gnu-wrapper
lrwxrwxrwx  1 root root 15 Nov 21 10:42 sparc-unknown-linux-gnu-c++ -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Nov 21 10:42 sparc-unknown-linux-gnu-g++ -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Jul 27 10:52 sparc-unknown-linux-gnu-gcc -> /usr/bin/distcc
-rwxr-xr-x  1 root root 70 Jan 18 14:20 sparc-unknown-linux-gnu-wrapper

¡Felicitaciones! Ahora tiene (esperemos que sí, de veras) el esquema de compilación cruzada funcionando correctamente.

¿Cómo funciona todo esto?

Cuando llamamos a distcc, este programa revisa cómo fue llamado (por ejemplo, como i686-pc-linux-gnu-gcc, sparc-unknown-linux-gnu-g++, etc.). Entonces, cuando distcc distribuya la tarea de compilación a un equipo coadyuvante, pasa también el mismo nombre con el que fue llamado. El demonio distcc en el equipo coadyuvante buscará un binario con el mismo nombre. Si solo ve un gcc, buscará un gcc, que probablemente será el compilador nativo en el equipo coadyuvante si la arquitectura no es igual que el equipo que corre el emerge. Cuando pasamos el nombre completo del compilador (como por ejemplo sparc-unknown-linux-gnu-gcc), entonces no habrá confusión.



Imprimir

Página actualizada 17 de febrero, 2006

Sumario: Esta guía enseña cómo configurar distcc para realizar compilaciones cruzadas a través de distintas arquitecturas de procesador.

Andrew Gaffney
Autor

Joshua Saddler
Editor

John Christian Stoddart
Traductor

Donate to support our development efforts.

Copyright 2001-2013 Gentoo Foundation, Inc. Questions, Comments? Contact us.