Distcc/Cross-Compiling/es

Esta guía le muestras cómo configurar distcc para realizar compilación cruzada entre diferentes arquitecturas de procesador.

Introducción
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 de procesador no hace falta ninguna configuración especial para. Pero, ¿Qué hacer si se necesita compilar para una arquitectura diferente utilizando computadores diferentes? Esta guía le muestra cómo configurar  para compilar para diferentes arquitecturas.

Hacer emerge de la utilidades necesarias
En primer lugar necesitará hacer emerge de  en cada uno de los equipos involucrados en el proceso de compilación. La herramienta  hace más fácil la construcción de herramientas de sistema para arquitecturas de forma cruzada. Originalmente lo escribió Joshua Kinard y luego Mike Frysinger lo reescribió desde cero. Su uso es sencillo: 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, lance crossdev --help. Obviamente, solo es necesario hacer emerge del conjunto de herramientas del sistema cruzado adecuado en los equipos que asisten a la compilación.

Si desea realizar un ajuste fino de la cadena de herramientas de compilación cruzada, a continuación se muestra un guión que producirá una línea de comandos con las versiones exactas de los paquetes de desarrollo cruzado que deben ser construidos en los equipos que participan en la compilación (El guión se debe lanzar en el equipo destino).

A continuación necesitará hacer emerge de  en todas las máquinas involucradas en el proceso. Esto incluye la máquina en la que lanzará emerge y las máquinas con los compiladores cruzados. Por favor, lea la Documentación sobre Distcc de Gentoo para obtener más información acerca de cómo configurar y usar.

Subarquitecturas Intel x86
Si está realizando una compilación cruzada entre distintas subarquitecturas de intel X86 (por ejemplo i586 e i686), deberá construir una cadena de herramientas completa para el CHOST deseado o de lo contrario la construcción fallará. Esto es debido a que i586 e i686 son realmente CHOSTs diferentes a pesar del hecho de que ambos se consideran "x86". Por favor, recuerde esto cuando construya cadenas de herramientas de compilación cruzada. Por ejemplo, si la máquina destino es una i586 esto significa que debe construir cadenas de herramientas de compilación cruzada para i586 en sus máquinas participantes i686.

SPARC
El uso de  podría fallar arrojando los siguientes errores:

Si esto sucede, intente utilizar la siguiente orden:

Configurar distcc para realizar compilaciones cruzadas correctas
En la configuración por defecto de distcc, la compilación cruzada "no" funcionará correctamente. El problema es que muchos paquetes llaman a  en lugar de usar el nombre completo (por ejemplo, ). Cuando esta tarea de compilación se distribuye a un equipo participante, se invoca al compilador nativo en lugar del compilador cruzado.

Por suerte, existe una solución a este pequeño problema. Lo único que se requiere es un guión o envoltorio y algunos enlaces simbólicos en el equipo que lanza la orden. Usaremos un equipo Sparc como ejemplo. Donde quiera que vea  más abajo, sustitúyalo por su propio CHOST (por ejemplo,   para un equipo AMD64). Al hacer emerge de distcc, el directorio tendrá el siguiente aspecto:

Esto es lo que debe hacer:

A continuación crearemos un guión nuevo para esta máquina. Use su editor de texto preferido y cree un archivo con el siguiente texto, luego guárdelo como. Recuerde cambiar el CHOST (en este caso ) a la definición de CHOST del equipo que correrá emerge.

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

Cuando haya terminado, tendrá el siguiente aspecto:

A continuación queremos asegurarnos de que estos envoltorios están disponibles después de actualizar el paquete distcc ya que se sobrescribirán los enlaces simbólicos. Podemos hacer esto a través del fichero que tiene el siguiente aspecto:

¡Enhorabuena!. Probablemente tenga ahora una configuración de compilación cruzada con distcc en funcionamiento.

Como funciona esto
Cuando llamamos a, comprueba que se ha invocado (por ejemplo, como  , , etc.). Entonces, cuando distcc distribuya la tarea de compilación a un equipo participante, pasa también el mismo nombre con el que se llamó. El demonio distcc en el equipo participante busca un binario con el mismo nombre. Si solo ve, buscará  , que probablemente será el compilador nativo en el equipo participante si la arquitectura no es la misma que el equipo que corre. Cuando pasamos el nombre "completo" del compilador (por ejemplo ), entonces no habrá confusión.

Troubleshooting
This section covers a number of common problems when using distcc for cross-compiling.

Remote host distccd COMPILE ERRORS
When receiving the message  within a remote host's  file, see the above notes concerning specifying the correct architecture name (ie. crossdev -t $TARGET).

Another solution is to uninstall and re-install crossdev compiler tools, using the crossdev --clean option, or ensuring no longer exists, and then completely reinstall the cross compiler.

It might also be wise to edit the remote host's, and ensure the contents of the  variable are similar on all computers or hosts performing compiler operations.

Failed to exec $TARGET-uknown-linux-gnu-gcc: No such file or directory
The wrapper scripts might fail to execute, even with correct permissions:

To resolve this, make sure to have the wrapper script created with the complete name of the architecture target: