Distcc/Cross-Compiling/ru

Данное руководство показывает как настроить distcc на кросс-компиляцию между различными архитектурами процессоров.

Введение
- это инструмент, который позволит Вам распределить процесс компиляции программного обеспечения по нескольких компьютерам, соединенным в сеть. Пока соединенные по сети машины используют одни и те же средства компиляции и генерации кода - toolchain, никакие особенные настройки  не требуются.

Собираем необходимые утилиты
Сперва, Вам необходимо установить  на всех компьютерах, которые будут вовлечены в процесс компиляции. - это инструмент, который облегчает сборку кросс-платформенных toolchain-ов. Первоначально, он был написан Joshua Kinard и был переписан с самого нуля Mike Frysinger. Его использование достаточно прямолинейно: например, команда  соберет полную cross-toolchain для архитектуры Sparc. Она включает binutils, gcc, glibc, и заголовки ядра Linux. Если Вам требуется дополнительная помощь, попробуйте ввести. Очевидно что Вам не нужно устанавливать подходящую cross-toolchain на все вспомогательные машины.

If you want to fine tune the cross-toolchain, here is a script that will produce a command line with the exact versions of the cross development packages to be built on the helper boxes (the script is to be run on the target box).

Script to fine-tune cross development tools

Next, you will need to emerge  on all the machines that will be involved in the process. This includes the box that will run emerge and the boxes with the cross-compilers. Please see the Gentoo Distcc Documentation for more information on setting up and using.

Подархитектуры Intel x86
If you are cross-compiling between different subarchitectures for Intel x86 (e.g. i586 and i686), you must still build a full cross-toolchain for the desired CHOST, or else the compilation will fail. This is because i586 and i686 are actually different CHOSTs, despite the fact that they are both considered "x86." Please keep this in mind when you build your cross-toolchains. For example, if the target box is i586, this means that you must build i586 cross-toolchains on your i686 helper boxes.

SPARC
При использовании  может появиться одна из следующих ошибок:

Ошибки, появляющиеся при запуске crossdev -t sparc

Если это произойдет, попробуйте использовать другую команду:

Конфигурация distcc для корректной кросс-компиляции
В настройках distcc по умолчанию, кросс-компиляция не будет работать так как надо. Проблема в том, что много сборок просто вызывают, вместо полного имени компилятора (например,   ). Когда процесс компиляции распространяется на вспомогательную машину с distcc, вызывается нативный компилятор, вместо Вашего абсолютно нового кросс-компилятора.

К счастью, для этой небольшой проблемы существует решение. Все, что требуется, это оберточный сценарий и несколько символьных ссылок на том компьютере, на котором будет вызван. Я буду использовать в качестве примера мой компьютер архитектуры Sparc. Ниже, где бы Вы ни видели текст, Вам нужно вставить свой собственный CHOST (   для компьютера с архитектурой AMD64, например). Когда Вы собираете distcc в первый раз, каталог выглядит следующим образом:

Это то, что Вам необходимо сделать:

Затем, мы создадим новый сценарий на этой машине. Запустите Ваш любимый редактор и создайте файл со следующим текстом, затем сохраните его как. Помните об изменении переменной CHOST (в данном случае  ) на действительный CHOST того компьютера, на котором будет запущен emerge.

Далее, мы сделаем сценарий исполнимым и создадим соответствующие символьные ссылки:

Когда Вы закончили, будет выглядеть следующим образом:

Поздравляем; теперь у Вас есть (надеемся) работающая настройка cross-distcc.

Как это работает
При вызове, он проверяет в качестве чего он был вызван (например,   ,   , и т.д.) Когда distcc затем передает компиляцию на вспомогательную машину, он передает название, с которым он был вызван. Демон distcc на другой вспомогательной машине затем ищет исполняемый файл с подобным именем. Если он видит только , он будет искать   , что, скорее всего, будет нативным компилятором на вспомогательной машине, если это не та же самая архитектура, как и компьютер с запущенной командой. Когда отправляется полное имя компилятора, (например,  ), путаница исключена.

Благодарности
Мы хотели бы поблагодарить следующих авторов и редакторов за их вклад в это руководство:


 * Andrew Gaffney
 * Joshua Saddler