Essas instruções pressupõem que você tenha um compilador cruzado ativo no escravo. Leia Como criar uma cadeia de ferramentas GCC 4.7 para compilação cruzada? se você não tiver. Também é útil ter make
instalado no mestre.
Instalação
Primeiro, devemos instalar distcc
. Usaremos os pacotes pré-criados fornecidos pelos sistemas de gerenciamento de pacotes dos sistemas operacionais, mas você pode instalar gratuitamente a partir da fonte, se quiser!
Debian
sudo apt-get install distcc
Arco
sudo pacman -S distcc
Configuração
Escravo - Debian / Ubuntu
TODO: Isso é o mesmo para Arch? Caso contrário, como configuramos o Arch?
Precisamos ajustar as configurações /etc/default/distcc
. No seu editor favorito, abra-o como root; Corri sudo vim /etc/default/distcc
.
Você precisa mudar STARTDISTCC
, ALLOWEDNETS
e LISTENER
. Supondo que você tenha seu mestre e escravo na mesma sub-rede e essa sub-rede 192.168.0.0/24
, eles devem ser configurados como
STARTDISTCC="true"
ALLOWEDNETS="192.168.0.0/24"
LISTENER="0.0.0.0"
Além disso, você deve adicionar o caminho ao seu compilador. Eu fiz isso adicionando a seguinte linha
PATH=$PATH:/home/alex/x-tools/arm-unknown-linux-gnueabi/bin
Nota O daemon no escravo estará executando como distccd
usuário, portanto, verifique se as permissões apropriadas estão configuradas nos seus executáveis; Eu dei permissão a todos para executar.
Execute o daemon - normalmente seria iniciado na inicialização - executando
sudo service distcc start
Mestre - Arco
TODO: Isso é o mesmo para o Debian? Caso contrário, como configuramos o Debian?
Abra ~/.distcc/hosts
no seu editor de texto favorito e adicione o endereço IP dos escravos. Meu hosts
arquivo consistia em uma única linha, que era lida 192.168.0.22
.
Nota Pode ser uma boa idéia atribuir um endereço IP estático ao seu escravo, caso contrário, você precisará alterar esse arquivo sempre que o endereço IP for alterado.
Usar
Se tudo correr bem, você poderá usar o distcc de maneira bastante simples. Por exemplo, para compilar hello.c
a hello.o
, corrida
distcc arm-unknown-linux-gnueabi-gcc -c -o hello.o hello.c
Exemplo: Olá, mundo!
Eu configurei um exemplo simples no meu diretório pessoal, que consistia em 2 arquivos.
# file: Makefile
hello.o: hello.c
hello: hello.o
# file: hello.c
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
A corrida make hello
será compilada localmente; você deve fazer isso como um teste rápido primeiro. Continue, eu espero.
A execução make hello CC="distcc arm-unknown-linux-gnueabi-gcc"
executará uma compilação distribuída.
Nota O pré-processamento e a vinculação ainda acontecem no RPi.
Depuração
Demorei um pouco para que isso funcionasse corretamente, e a melhor ferramenta de depuração que encontrei foi uma variável de ambiente simples. Se vocês
export DISTCC_VERBOSE=1
o distcc
cliente produzirá muitas informações úteis.
Este é um post longo, portanto qualquer feedback será recebido com gratidão. Espero ter me lembrado de todos os passos!