Gentoo Logo

Aviso : Este documento não é válido e não é mais mantido.


Guia de cross-compiling de DistCC

1.  Fazendo cross-compiling com distcc

Introdução

distcc é uma ferramenta que permite compartilhar o peso da compilação de software através de vários computadores em rede. Contanto que todas máquinas da rede estejam usando a mesma toolchain construída para a mesma arquitetura de processador, nenhuma configuração especial de distcc é necessária. Mas o que fazer se você precisa compilar para uma arquitetura diferente usando computadores diferentes? Este guia irá mostrar como configurar o distcc para compilar para arquiteturas diferentes.

Instale os utilitários necessários

Primeiro, você deve instalar crossdev em todas as máquinas que estarão envolvidas no processo de compilação. O crossdev é uma ferramenta que torna a construção de toolchains de arquiteturas diferentes fácil. Foi originalmente escrita por Joshua Kinard e reescrita do zero por Mike Frysinger. Seu uso é simples: crossdev -t sparc irá construir uma cross-toolchain com alvo da arquitetura Sparc. Isto inclui binutils, gcc, glibc, e linux-headers. Se você precisar de mais ajuda, tente rodar crossdev --help. Obviamente, você precisará instalar a cross-toolchain adequada em todas máquinas ajudantes.

A seguir, você precisará instalar o distcc em todas máquinas que estarão envolvidas no processo. Isto inclui a máquina que rodará o emerge e todas as máquinas com os cross-compilers. Por favor veja aDocumentação de Distcc do Gentoo para mais informações sobre como configurar e usar distcc.

Notas específicas de arquitetura

Se você estiver fazendo cross-compiling entre diferentes sub-arquiteturas para Intel x86 (como i586 e i686), você deve construir uma cross-toolchain inteira para o CHOST desejado, caso contrário a compilação irá falhar. Isto acontece porque i586 e i686 são na verdade CHOSTs diferentes, apesar de ambos serem considerados "x86." Por favor tenha isto em mente quando você construir suas cross-toolchains. Por exemplo, se a máquina alvo for i586, isto significa que você precisa construir cross-toolchains em suas máquinas i686 ajudantes.

Configurando o distcc para fazer cross-compile diretamente

Na configuração padrão do distcc, cross-compiling não irá funcionar devidamente. O problema é que muitas construções simplesmente chamam gcc ao invés do nome inteiro do compilador (como sparc-unknown-linux-gnu-gcc). Quanto esta compilação é distribuída para a máquina distcc ajudante, o compilador nativo é chamado ao invés de seu cross-compiler novo em folha.

Felizmente, há uma solução para este pequeno problema. Tudo que é necessário é um script wrapper e alguns links simbólicos na máquina que rodará emerge emerge. Usarei minha máquina Sparc como exemplo. Onde você vir sparc-unknown-linux-gnu abaixo, você deve inserir seu próprio CHOST (x86_64-pc-linux-gnu para uma máquina AMD64, por exemplo). Quando você instalar o distcc pela primeira vez, o diretório /usr/lib/distcc/bin irá se parecer com o seguinte:

Nota: As instruções seguintes são feitas somente na máquina rodando o processo de emerge. Não faça os passos nas máquinas ajudantes.

Listagem de código 1.1: Compiladores disponíveis

# 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

Aqui está o que você deve fazer:

Listagem de código 1.2: Modificando distcc

# rm c++ g++ gcc cc

A seguir, iremos criar o novo script nesta máquina. Abra seu editor favorito e crie um arquivo com o texto seguinte nele, então salve-o como sparc-unknown-linux-gnu-wrapper. Lembre-se de mudar o CHOST (neste caso, sparc-unknown-linux-gnu) para o CHOST real da máquina que irá rodar o emerge.

Listagem de código 1.3: O novo script wrapper

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

A seguir, nós iremos tornar o script executável e criar os links simbólicos apropriados:

Listagem de código 1.4: Criando os links simbó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++

Quando você terminar, /usr/lib/distcc/bin irá se parecer com o seguinte:

Listagem de código 1.5: Um conjunto devido 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

Parabéns; agora você tem uma configuração de cross-distcc funcional (espera-se).

Como funciona

Quando o distcc é chamado, ele verifica como foi chamado (como i686-pc-linux-gnu-gcc, sparc-unknown-linux-gnu-g++, etc.) Quando o distcc distribui a compilação para uma máquina ajudante, passa o nome com que foi chamado. O daemon do distcc nas outras máquinas ajudantes procurar um binário com o mesmo nome. Se só vir gcc, irá procurar gcc, que é provavelmente o compilador nativo na máquina ajudante, se não for da mesma arquitetura que a da máquina rodando emerge. Quando o nome completo do compilador for enviado (como sparc-unknown-linux-gnu-gcc), não há confusão.



Imprimir

Atualizado 25 de janeiro de 2006

A versão original desta tradução não é mais mantida

Resumo: Este guia mostra como configurar o distcc para fazer cross-compiling em diferentes arquiteturas de processador.

Andrew Gaffney
Autor

Joshua Saddler
Editor

Marcelo Góes
Tradutor

Claudio Pereira da Costa
Tradutor

Donate to support our development efforts.

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