Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

Система конфигурирования и сборки GNU

Система конфигурирования и сборки GNU

Иан Ланс Тейлор

Средства кросс-компиляции

Кросс-инструменты в дереве Cygnus

Скрипты конфигурирования библиотек цели

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

Целевые библиотеки конфигурируются и собираются с помощью ново-собранного целевого компилятора. Для этого целевого компилятора может не существовать каких либо запускаемых файлов. Фактически, эти файлы, возможно, будут собраны как часть той-же целевой библиотеки. Это, естественно, означает, что они не существуют в момент, когда ваша целевая библиотека конфигурируется.

Это также означает, что скрипт конфигурирования для целевой библиотеки может и не использовать тесты, проверяющие доступность ссылок. К несчастью, к ним относится много полезных макросов autoconf, таких как `AC_CHECK_FUNCS'. Можно использовать макросы autoconf, которые делают компиляцию, но не линковку, такие как `AC_CHECK_HEADERS'.

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

На момент написания этого мануала макрос autoconf `AC_PROG_CC' создает ссылку на используемый компилятор. Это может привести к ошибке в целевой библиотеке, поскольку целевые библиотеки используют особый набор макросов для определения местоположения компилятора. Примеры смотрите в файле `configure.in' из директории `libiberty' или `libgloss'.

Как отмечалось в предыдущем разделе, целевые библиотеки иногда собираются в директориях, которые являются одноуровневыми для средств хоста, а иногда собираются в поддиректориях. При конфигурировании библиотеки указывается опция `--with-target-subdir'. Ее значением должна быть пустая строка, если библиотека собирается на одном уровне со средствами хоста, и именем поддиректории, если целевая библиотека собирается в поддиректории.

Если полная сборка не является нативной сборкой (т.е. полное конфигурирование использует опцию `--target'), то библиотека должна конфигурироваться с опцией `--with-cross-host'. Значением этой опции должна быть хозяйская система полной сборки. Напомним, что хозяйской системой библиотеки является цель полной сборки. Если же полная сборка является нативной сборкой, то опцию `--with-cross-host' использовать не следует.

Библиотеку, которая может быть собрана как автономно, так и в качестве целевой библиотеки, можно в зависимости от ситуации инсталлировать в различные директории. Когда библиотека собирается автономно или нативно, она должна устанавливаться в `$(libdir)'. Когда она собирается как целевая библиотека а не нативная, она должна устанавливаться в `$(tooldir)/lib'. Опция `--with-cross-host' может использоваться для различения этих случаев.

Тот же тест `--with-cross-host' позволяет увидеть, все ли нормально с использованием ссылочных тестов в скрипте конфигурирования. Если опция `--with-cross-host' не используется, то библиотека начнет собираться как автономная и нативная, и ссылки должны работать.

Создание целей в дереве Cygnus

`Makefile' верхнего уровня в дереве Cygnus задает цели для каждой известной поддиректории.

Для каждой поддиректории dir, которая содержит хостовую библиотеку или программу, при указании цели `all-dir' в `Makefile' будет собираться соответствующая библиотека или программа.

Между средствами хоста существуют зависимости. Например, сборка gcc требует предварительной сборки gas, поскольку в процессе сборки gcc вызывается целевой ассемблер. Эти зависимости отражаются в `Makefile' верхнего уровня.

Для каждой поддиректории dir, содержащей целевую библиотеку, цель `configure-target-dir' в `Makefile' предназначена конфигурировать эту библиотеку. Цель `all-target-dir' в `Makefile' предназначена собирать эту библиотеку.

Каждая цель `configure-target-dir' зависит от `all-gcc', поскольку gcc, — целевой компилятор, необходим для средств конфигурирования. Каждая цель `all-target-dir' зависит от соответствующей цели `configure-target-dir'.

Существует и несколько других целей, которые могут представлять интерес для каждой директории: `install-dir', `clean-dir' и `check-dir'. Для них существуют соответствующие версии `target' для целевых библиотек, такие как `install-target-dir'.

Целевая директория `libiberty'

Поддиректория `libiberty' является специальным случаем. В этой и только в этой директории сборка осуществляется как с помощью хостового компилятора, так и с помощью целевого компилятора.

Так делается потому, что файлы в `libiberty' используются при сборке хостовых средств и, кроме того, включаются в целевую библиотеку `libstdc++' для поддержки кода.

Эта двойственность не создает каких-то специфических затруднений. Это лишь означает, что существуют обе цели: `all-libiberty' и `all-target-libiberty'.

В нативной конфигурации, когда целевые библиотеки не собираются в поддиректории, одни и те же объекты используются, обычно, как для хостовой сборки, так и для целевой сборки. Как правило, с этим все ОК, поскольку libiberty содержит только код C, и в нативной конфигурации результаты хостового компилятора и целевого компилятора могут обычно взаимодействовать.

Irix 6 является здесь исключением, поскольку нативный компилятор SGI по умолчанию использует ABI `O32', а gcc по умолчанию использует ABI `N32'. В Irix 6 целевые библиотеки собираются в поддиректории даже для нативной конфигурации во избежание этой проблемы.

В настоящее время нет каких либо библиотек, собираемых как для хоста, так и для цели, но нет и концептуальных проблем с их созданием.


Назад Вперед
Кросс-инструменты в дереве Cygnus Канадский крест

Перевод: Дмитрий Скоробогатов, 19.12.2011.
Оригинальный текст можно найти по адресу http://www.airs.com/ian/configure/configure_5.html.


Предыдущие публикации:

Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2011-12-19 14:14:17

Метки материала: скрипты, cygnus, gnu, скрипты конфигурирования, конфигурирование библиотек, библиотеки цели, кросс-инструменты, система конфигурирования, система конфигурирования и сборки, компиляция, проект gnu, софт, разработка по, спо, документация для программиста

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.