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

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

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

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

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

Канадский крест

Поддержка канадского креста

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

Поддержка канадского креста в скриптах конфигурирования

В файле `configure.in' после вызова `AC_PROG_CC' вы можете с помощью шелл-переменной `cross_compiling' выяснить, производится ли конфигурирование канадского креста. В случае канадского креста, то есть когда компилятор является кросс-компилятором, переменная `cross_compiling' будет иметь значение `yes'. При обычном же конфигурировании `cross_compiling' будет иметь значение `no'.

В скрипте конфигурирования вам обычно необязательно знать тип сборочной системы. Тем не менее, если вам нужна эта информация, вы можете получить ее с помощью макроса `AC_CANONICAL_SYSTEM', — того самого макроса, который используется для определения целевой системы. Этот макрос устанавливает переменные `build', `build_alias', `build_cpu', `build_vendor' и `build_os', которые соответствуют аналогичным переменным `target' и `host', с той разницей, что описывают сборочную систему.

Когда пишутся тесты в `configure.in', вы должны помнить, что вам нужны тесты именно хозяйского окружения, а не сборочного окружения.

Такие макросы как `AC_CHECK_FUNCS', используемые компилятором, тестируют хозяйское окружение. Это происходит потому, что тесты будут осуществляться при запуске компилятора, который, на самом деле, является сборочным кросс-хозяйским компилятором. Если компилятор может найти нужную функцию, это означает, что эта функция представлена в хозяйском окружении.

С другой стороны, тесты вроде `test -f /dev/ptyp0' будут тестами сборочного окружения. Помните, что скрипт конфигурирования запускается именно на сборочной системе, а не хозяйской системе. Если ваши скрипты конфигурирования проверяют файлы, то эти файлы должны находиться на сборочной системе. Что бы вы не определили по этим файлам, это может быть а может не быть на хозяйской системе.

Большинство макросов autoconf правильно работают в канадском кресте. Главным исключением является `AC_TRY_RUN'. Этот макрос пытается скомпилировать и запустить тестовую программу. В канадском кресте эта попытка будет неудачной, поскольку программа будет скомпилирована для хозяйской системы и, следовательно, не будет запускаться на сборочной системе.

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

warning: AC_TRY_RUN called without default to allow cross compiling

(Перевод: «предупреждение: AC_TRY_RUN вызывается без умолчания для разрешения кросс-компиляции».)

Тем самым вам сообщается, что результат работы скрипта `configure' не будет работать с канадским крестом.

В некоторых случаях может оказаться лучшим выполнять тесты во время конфигурирования, но также возможно выполнять тесты во время запуска. В таком случае вы можете использовать кросс-компиляционный аргумент `AC_TRY_RUN', чтобы сообщить вашей программе о том, чтобы тесты не выполнялись во время конфигурирования.

Существует и несколько других макросов autoconf, которые неправильно работают с канадским крестом. Их неполный список включает `AC_FUNC_GETPGRP', `AC_FUNC_SETPGRP', `AC_FUNC_SETVBUF_REVERSED' и `AC_SYS_RESTARTABLE_SYSCALLS'. Макрос `AC_CHECK_SIZEOF' в основном не очень полезен для канадского креста. Он допускает опциональный аргумент, указывающий размер по умолчанию, однако нет возможности узнать, каким должно быть правильное умолчание.

Поддержка канадского креста в Makefile-ах

Основная проблема с использованием канадского креста в `Makefile' возникает тогда, когда вы хотите использовать вспомогательные программы для генерации кода или данных, которые вы затем включите в реальную программу.

Если вы компилируете такую вспомогательную программу в обычном порядке с помощью `$(CC)', то затем не сможете запустить ее. Это происходит потому что `$(CC)' собирает программу для хозяйской системы, но эта программа должна собираться для сборочной системы.

Вместо компилятора хозяйской системы вы должны использовать компилятор сборочной системы. В дереве Cygnus это делает переменная `$(CC_FOR_BUILD)', которая указывает компилятор для сборочной системы.

Заметим, что вы не должны включать `config.h' в какой-либо файл, который компилируете в `$(CC_FOR_BUILD)'. Скрипт `configure' будет собирать `config.h' с информацией о хозяйской системе. А вы компилируете соответствующий файл с помощью компилятора для сборочной системы (нативным компилятором). Вспомогательные программы являются, как правило, простыми фильтрами, которые выполняются без участия пользователя, и их, как правило, можно написать в портируемом варианте, так что отсутствие `config.h' не критично.

GCC-шный `Makefile.in' демонстрирует сложную ситуацию, в которой некоторые файлы, такие как `rtl.c', должны быть скомпилированы как со вспомогательными программами, запускаемыми системой сборки, так и с результирующей программой. Этот подход может быть интересен для продвинутых хакеров системы сборки. Заметим, что компилятор системы сборки обозначается как `HOST_CC'.


Назад Вперед
Канадский крест вне и в дереве Cygnus Система конфигурирования Cygnus

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


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

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

Последнее редактирование: 2011-12-22 01:38:29

Метки материала: gnu, канадский крест, система конфигурирования, система конфигурирования и сборки, компиляция, проект gnu, по, бесплатное по, софт, разработка по, soft, программное обеспечение, software, спо, документация для программиста, программное обеспечение по

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

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

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


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