Методы: Встроенные методы для облегчения процесса сборки

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

Наиболее часто встречаются и используются следующие:

oe_runmake

Эта функция используется для запуска make. В отличие от прямого вызова, эта функция передает make EXTRA_OEMAKE настройки, выводит информацию о запуске make и проверяет на наличие ошибок, возникших при вызове.

Нет оснований напрямую вызывать make - всегда следует использовать только oe_runmake.

oe_runconf (только в autotools)

Эта функция вызывает скрипт configure для пакета, использующего класс autotools. Функция передает все параметры, необходимые для кросс-компиляции и установки в соответствующие целевые директории.

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

Если все-таки возникает необходимость создавать собственную configure задачу для пакета autotools, то вы можете использовать oe_runconf и вручную вызвать процесс конфигурации когда требуется. Следующий пример из пакета net-snmp показывает вызов oe_runconf вручную так, чтобы параметр для определения порядка байтов мог быть вычислен и передан скрипту configure:

do_configure() {
    # Дополнительный флаг, основанный на порядке байтов цели (смотрите siteinfo.bbclass)
    ENDIANESS="${@base_conditional('SITEINFO_ENDIANESS', 'le', '--with-endianness=little', '--with-endianness=big', d)}"
    oenote Determined endianess as: $ENDIANESS
    oe_runconf $ENDIANESS
}
oe_libinstall

Эта функция используется для установки .so, .a и соответствующих libtool .la библиотек. Она определяет соответствующие библиотеки для установки и занимается любыми модификациями, которые могут потребоваться для .la файлов.

Эта функция поддерживает следующие опции:

-C <dir>

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

-s

Требует присутствия .so библиотеки среди устанавливаемых.

-a

Требует присутствия .a библиотеки среди устанавливаемых.

Следующий пример из gdbm показывает установку .so, .a (и соответствующих .la) библиотек и заголовочных файлов в "staging" директорию библиотек:

do_stage () {
    oe_libinstall -so -a libgdbm ${STAGING_LIBDIR}
    install -m 0644 ${S}/gdbm.h ${STAGING_INCDIR}/
}
oenote

Используется для вывода информационных сообщений пользователю.

Следующий пример из net-snmp использует oenote для сообщения о том, какой порядок байтов выбран для целевого устройства:

do_configure() {
    # Additional flag based on target endiness (see siteinfo.bbclass)
    ENDIANESS="${@base_conditional('SITEINFO_ENDIANESS', 'le', '--with-endianness=little', '--with-endianness=big', d)}"
    oenote Determined endianess as: $ENDIANESS
    oe_runconf $ENDIANESS
}
oewarn

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

oedebug

Используется для вывода отладочной информации. Эти сообщения видимы только если bitbake запущенн с флагом -D, включающим отладочный вывод.

oefatal

Используется для вывода фатального сообщения об ошибке, и прерывает выполнение bitbake.

Следующий пример из linux-libc-headers показывает использование oefatal для сообщения пользователю о том, что невозможно найти в ядре исходный код для указанной архитектуры:

do_configure () {
    case ${TARGET_ARCH} in
        alpha*)   ARCH=alpha ;;
        arm*)     ARCH=arm ;;
        cris*)    ARCH=cris ;;
        hppa*)    ARCH=parisc ;;
        i*86*)    ARCH=i386 ;;
        ia64*)    ARCH=ia64 ;;
        mips*)    ARCH=mips ;;
        m68k*)    ARCH=m68k ;;
        powerpc*) ARCH=ppc ;;
        s390*)    ARCH=s390 ;;
        sh*)      ARCH=sh ;;
        sparc64*) ARCH=sparc64 ;;
        sparc*)   ARCH=sparc ;;
        x86_64*)  ARCH=x86_64 ;;
    esac
    if test !  -e include/asm-$ARCH; then
        oefatal unable to create asm symlink in kernel headers
    fi
...
base_conditional (python)

Python-функция base_conditional используется для установки переменной в одной из двух значений в зависимости от значения третьей. Функция должна использоваться следующим образом:

${@base_conditional('<variable-name>', '<value>', 
          '<true-result>', <false-result>', d)}"

где:

variable-name

Имя проверяемой переменной.

value

Значение, с которым сравнивается значение переменной.

true-result

Если переменная равна value, то возвращается true-result.

false-result

Если переменная равна value, то возвращается false-result.

Замечание

Синтаксис ${@...} используется для вызова python функций из рецепта или класса. Это более подробно описано в разделе advanced python section.

Следующий пример из openssl рецепта показывает добавление либо -DL_ENDING либо -DB_ENDIAN в зависимости от значения SITEINFO_ENDIANESS, которое устанавливается в "le" для little-endian целей и в "be" для big-endian:

do_compile () {
    ...
    # Additional flag based on target endiness (see siteinfo.bbclass)
    CFLAG="${CFLAG} ${@base_conditional('SITEINFO_ENDIANESS', 'le', '-DL_ENDIAN', '-DB_ENDIAN', d)}"
    ...