Distcc/Cross-Compiling/ru

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

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

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

Затем, Вам необходимо установить  на все машины, которые будут вовлечены в процесс. Это включает и машину, на которой будет запущен emerge, и машины с кросс-компиляторами. Пожалуйста, посмотрите документацию Gentoo по Distcc для поиска более подробной информации по настройке и использованию.

Архитектурно-специфические замечания
Если Вы проводите кросс-компиляцию между различными субархитектурами для процессора Intel x86 (например, i586 и i686), Вам все так же требуется собрать полную cross-toolchain для необходой архитектуры, указанной в CHOST, или иначе компиляция завершится неудачей. Это потому, что i586 и i686 обладают разными архитектурами CHOST, вопреки тому, что их обе относят к "x86." Пожалуйста, держите это в уме, когда Вы собираете свои cross-toolchain-ы. Например, если целевая платформа - i586, это значит, что Вы должны построить i586 cross-toolchain-ы на Ваших вспомогательных i686 машинах.

Подархитектуры 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