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 makeinstalado 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, ALLOWEDNETSe 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 distccdusuá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/hostsno seu editor de texto favorito e adicione o endereço IP dos escravos. Meu hostsarquivo 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.ca 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 helloserá 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 distcccliente 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!