Distcc/Cross-Compiling/ru

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

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

Этот гайд содержит указания для настройки компиляции через distcc для различных архитектур

Устанавливаем необходимые утилиты
Сперва нужно установить на всех машинах, которые будут вовлечены в процесс компиляции. — это инструмент, облегчающий сборку кросс-платформенных toolchain’ов. Использовать его просто: соберет полный cross-toolchain для архитектуры Sparc. Он включает binutils, gcc, glibc и linux-headers.

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

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

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

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

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

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

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

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

Проделаем следующие шаги:

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

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

После этого будет выглядеть следующим образом:

Далее нужно позаботиться о том, чтобы обертки оставались доступными после обновлений distcc, поскольку символьные ссылки при обновлении перезаписываются. Можно сделать это с помощью файла, примерно такого:

Затем создайте этот файл:

Назначьте правильные разрешения:

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

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

Устранение проблем
В этом разделе приведены распространенные проблемы, связанные с использованием для кросс-компиляции.

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

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

Возможно так же поступить мудро и, просмотрев файл на удаленном компьютере, убедиться в том, что переменная CFLAGS аналогична на всех компьютерах или хостах, выполняющих операции компилятора.

Failed to exec $TARGET-unknown-linux-gnu-gcc: No such file or directory
Скрипты могут не запуститься, даже с корректными разрешениями:

Для разрешения этого, убедитесь, что скрипты созданы с полным именем архитектуры: