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.
El contenido de este documento, a no ser que se especifique
expresamente, está registrado bajo los términos de la licencia
CC-BY-SA-2.5. Se aplican las
Pautas de
Utilización del logotipo y nombre de Gentoo.
|