Como instalo o distcc?

10

Eu li Como criar uma cadeia de ferramentas GCC 4.7 para compilação cruzada? e construímos com sucesso um programa de teste simples que funciona no meu RPi.

Para fazer isso, tive que executar arm-unknown-linux-gnueabi-gcc hello.c -o hellono meu desktop x86 e scpno executável no meu RPi. Isso é lento e um aborrecimento. Prefiro controlar a compilação do meu RPi.

Eu li sobre distcc, que pode ser usado para distribuir a compilação de uma máquina para outra.

Como instalo isso? Eu tenho os desktops Debian / Ubuntu e Arch Linux e os dois sistemas operacionais instalados nos cartões SD.

Alex Chamberlain
fonte
Eu estava esperando alguém que não sou eu para postar esta pergunta. Eu realmente não queria fazer isso. Bom trabalho.
Jivings
export DISTCC_VERBOSE=1Obrigado por isso! É o que eu estou procurando a minha debbug distcc toolchain

Respostas:

12

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!

Alex Chamberlain
fonte
Excelente resposta. Vou marcar isso para o meu desenvolvimento de RPi.
Jivings
O @AlexChamberlain Distcc agora suporta o "modo de bomba", que permite distribuir também o pré-processamento.
teraquendya
@teraquendya Eles de fato não chegaram a publicar detalhes sobre isso ainda. Quero ter certeza de que tenho tudo certo sem o modo bomba primeiro.
Alex Chamberlain