Как добавить задачу do_populate_sdk в рецепт BitBake avro-c? - PullRequest
0 голосов
/ 01 ноября 2018

Этот вопрос относится только к avro-c, но решение может быть распространено на другие пакеты в системе OpenEmbedded BitBake.

Как мне создать задачу do_populate_sdk для avro-c?

Я хочу создать Yocto SDK, который включает avro-c. Слой avro-c в meta-openembedded очень маленький:

avro
├── avro-c
│   └── 0001-avro-c-Fix-build-with-clang-compiler.patch
└── avro-c_1.8.1.bb

В рецепте avro-c_1.8.1.bb всего 20 строк:

SUMMARY = "Apache Avro data serialization system."
HOMEPAGE = "http://apr.apache.org/"
SECTION = "libs"

LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=73bdf70f268f0b3b9c5a83dd7a6f3324"

DEPENDS = "jansson zlib xz"
PV .= "+git${SRCPV}"

SRCREV = "4b3677c32b879e0e7f717eb95f9135ac654da760"
SRC_URI = "git://github.com/apache/avro \
       file://0001-avro-c-Fix-build-with-clang-compiler.patch;patchdir=../../ \
"

S = "${WORKDIR}/git/lang/c"

LDFLAGS_append_libc-uclibc = " -lm"

inherit cmake

Целевое изображение, которое включает в себя сборки avro-c, и ls /usr/bin/avro* перечисляет функции Avro.

Однако, avro-c не включен в сборку хоста SDK. Один из способов решения этой проблемы - попробовать две команды:

$ bitbake avro-c
$ bitbake avro-c -c populate_sdk

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

ERROR: Task do_populate_sdk does not exist for target avro-c (/home/rdepew/workspace/clean1/build/../layers/meta-sporian/recipes-support/avro/avro-c_1.8.1.bb:do_populate_sdk). Close matches:
do_populate_lic
do_populate_sysroot
ERROR: Command execution failed: 1

Я искал подсказки в других слоях в моей системе сборки. Оказалось, что создается файл avro-c _%. Bbappend, содержащий одну строку

inherit nativesdk

может сработать, но это породило еще два сообщения об ошибках BitBake:

ERROR: Nothing PROVIDES 'virtual/x86_64-pokysdk-linux-compilerlibs' (but /home/rdepew/workspace/clean1/build/../layers/meta-sporian/recipes-support/avro/avro-c_1.8.1.bb DEPENDS on or otherwise requires it). Close matches:
virtual/nativesdk-x86_64-pokysdk-linux-compilerlibs
virtual/x86_64-pokysdk-linux-go-crosssdk
virtual/x86_64-pokysdk-linux-gcc-crosssdk
ERROR: Required build target 'avro-c' has no buildable providers.
Missing or unbuildable dependency chain was: ['avro-c', 'virtual/x86_64-pokysdk-linux-compilerlibs']

... и вот где я застрял. Я не уверен, куда идти отсюда.

Онлайн места, которые я исследовал:

Я не знаю, уместно ли перечислять URL-адреса мест, где я искал ответ. Они включают репозиторий GitHub для Avro, руководство по ADT для Yocto Project и четыре связанных вопроса о StackOverflow. Если это уместно, я отредактирую этот вопрос, включив в него URL.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Правильный способ добавить что-либо в SDK (или eSDK - Extended SDK) - по вашему выбору. Итак, шаги:

  • Добавить пакет к изображению:

    IMAGE_INSTALL_append = " avro-c"

  • Создайте Yocto SDK для изображения по вашему выбору:

    bitbake core-image-full-cmdline -c populate_sdk

  • Создайте Yocto eSDK для изображения по вашему выбору:

    bitbake core-image-full-cmdline -c populate_sdk_ext

Веселись! : -)

0 голосов
/ 01 ноября 2018

Вам нужна следующая строка в вашем рецепте

BBCLASSEXTEND = "nativesdk"

Это расширяет тот же рецепт для сборки и для SDK. Подробнее см. здесь .

EDIT:

do_populate_sdk: это задание применимо только для рецепта изображения. Это обрабатывает две операции.

  1. Целевая часть: компилирует и устанавливает заголовок и библиотеки для целевой платформы.
  2. Host part: устанавливает хост-часть библиотеки и заголовок на основе SDKMACHINE

Во время этих операций он находит список пакетов, необходимых для SDK, изучая переменную BBCLASSEXTEND и создает nativesdk-<recipe_name> для объединения их вместе в SDK.

Итак, у вас есть do_populate_sdk для рецепта изображения, который объединяет пакеты.

См. Руководство yocto здесь для получения более подробной информации.

...