Как мне установить distcc?

10

Я прочитал Как создать GCC 4.7 toolchain для кросс-компиляции? и успешно создали простую тестовую программу, которая работает на моем RPi.

Для этого мне нужно было запустить arm-unknown-linux-gnueabi-gcc hello.c -o helloна своем рабочем столе x86 и scpисполняемый файл для моего RPi. Это медленно и хлопотно. Я предпочел бы контролировать компиляцию из моего RPi.

Я читал о том distcc, что может быть использовано для распространения компиляции с одной машины на другую.

Как мне установить это? У меня есть и настольные компьютеры Debian / Ubuntu и Arch Linux, и обе ОС установлены на SD-карты.

Алекс Чемберлен
источник
Я ждал кого-то, кто не я, чтобы отправить этот вопрос. Я действительно не хотел этого делать. Хорошая работа.
Jivings
export DISTCC_VERBOSE=1Спасибо за это ! Это то, что я ищу для отладки моего distcc toolchain

Ответы:

12

Эти инструкции предполагают, что у вас есть работающий кросс-компилятор на ведомом устройстве. Пожалуйста, прочтите Как создать GCC 4.7 toolchain для кросс-компиляции? если нет Также полезно makeустановить на мастер.

Монтаж

Во-первых, мы должны установить distcc. Мы будем использовать готовые пакеты, поставляемые системами управления пакетами операционных систем, но вы можете установить их из исходного кода, если хотите!

Debian

sudo apt-get install distcc

арочный

sudo pacman -S distcc

конфигурация

Slave - Debian / Ubuntu

ТОДО: Это то же самое для Арка? Если нет, то как нам настроить Arch?

Нам нужно настроить параметры в /etc/default/distcc. В вашем любимом редакторе откройте его как root; Я побежал sudo vim /etc/default/distcc.

Вам нужно изменить STARTDISTCC, ALLOWEDNETSи LISTENER. Предполагая, что ваш ведущий и ведомый находятся в одной подсети и эта подсеть есть 192.168.0.0/24, они должны быть установлены на

STARTDISTCC="true"
ALLOWEDNETS="192.168.0.0/24"
LISTENER="0.0.0.0"

Кроме того, вы должны добавить путь к вашему компилятору. Я сделал это, добавив следующую строку

PATH=$PATH:/home/alex/x-tools/arm-unknown-linux-gnueabi/bin

Примечание . Демон на ведомом устройстве будет работать от имени distccdпользователя, поэтому убедитесь, что для ваших исполняемых файлов настроены соответствующие разрешения; Я дал всем разрешение на казнь.

Запустите демон - обычно он запускается при загрузке - запустив

sudo service distcc start

Мастер - Арка

ТОДО: Это то же самое для Debian? Если нет, то как нам настроить Debian?

Откройте ~/.distcc/hostsв своем любимом текстовом редакторе и добавьте IP-адрес ведомых. Мой hostsфайл состоял из одной строки, которая читалась 192.168.0.22.

Примечание. Рекомендуется назначить статический IP-адрес подчиненному устройству, в противном случае вам придется изменять этот файл при каждом изменении IP-адреса.

использование

Все идет хорошо, вы должны быть в состоянии использовать distcc довольно просто. Например, чтобы собрать hello.cна hello.o, бежать

distcc arm-unknown-linux-gnueabi-gcc    -c -o hello.o hello.c

Пример: Hello World!

Я установил простой пример в своем домашнем каталоге, который состоял из 2 файлов.

# file: Makefile
hello.o: hello.c
hello: hello.o

# file: hello.c
#include <stdio.h>

int main() {
  printf("Hello World!\n");
  return 0;
}

Запуск make helloбудет компилироваться локально; Вы должны сделать это как быстрый тест в первую очередь. Давай, я подожду.

Запуск make hello CC="distcc arm-unknown-linux-gnueabi-gcc"запустит распределенную компиляцию.

Примечание . Предварительная обработка и связывание по-прежнему выполняются на RPi.

Отладка

Мне потребовалось некоторое время, чтобы заставить это работать правильно, и лучший инструмент отладки, который я нашел, был простой переменной среды. если ты

export DISTCC_VERBOSE=1

в distccвыходные нагрузки клиент полезной информации.

Это длинный пост, поэтому мы будем благодарны за любые отзывы. Я надеюсь, что я запомнил все шаги!

Алекс Чемберлен
источник
Отличный ответ. Я собираюсь добавить это в закладки для моей разработки RPi.
Jivings
@AlexChamberlain Distcc теперь поддерживает «режим насоса», который позволяет распределять предварительную обработку.
teraquendya
@teraquendya Они действительно, я еще не дошел до публикации подробностей об этом. Я хочу убедиться, что у меня все в порядке без режима насоса.
Алекс Чемберлен