Как включить / отключить конкретный bbappend для конкретной машины в Yocto - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь понять механизм, предоставляемый Yocto для включения / выключения определенного bbappend для конкретной МАШИНЫ.Я прочитал эту ссылку (Изменение переменных для поддержки другой машины):

https://www.yoctoproject.org/docs/1.5/dev-manual/dev-manual.html#best-practices-to-follow-when-creating-layers

А также нашел некоторую информацию, связанную с переполнением стека:

Машинаконкретные слои в yocto

Я пытался применить всю эту информацию на практике без какого-либо успеха.Это моя конкретная проблема:

Уровень BSP для платформы "x" предоставляет qtbase _%. Bbappend, который изменяет рецепт qtbase из meta-qt5.Мне нужен этот qtbase _%. Bbappend только при сборке для MACHINE = "x", но не для других машин.

Это содержимое исходного qtbase _%. Bbappend, определенного на x-bsp-layer:

PACKAGECONFIG_GL   = "gles2"
PACKAGECONFIG_FONTS = "fontconfig"
PACKAGECONFIG_APPEND = " \
${@bb.utils.contains("DISTRO_FEATURES", "wayland", "xkbcommon-evdev", \
   bb.utils.contains("DISTRO_FEATURES", "x11", " ", "libinput eglfs gbm", d), d)} \
"
PACKAGECONFIG_append = " ${PACKAGECONFIG_APPEND} kms accessibility sm"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
PACKAGECONFIG_remove = "evdev"

Всякий раз, когда я пытаюсь создать образ для ПЛАТФОРМЫ, отличной от "x", компиляция прерывается:

| ERROR: Feature 'opengles2' was enabled, but the pre-condition 'config.win32 || (!config.watchos && !features.opengl-desktop && libs.opengl_es2)' failed.
| ERROR: Feature 'eglfs' was enabled, but the pre-condition '!config.android && !config.darwin && !config.win32 && features.egl' failed.
| ERROR: Feature 'gbm' was enabled, but the pre-condition 'libs.gbm' failed.

Удаление слоя x-BSP из bblayers.Conf решает проблему, но это не то решение, которое я ищу.

Я попытался исправить это, используя информацию, предоставленную в предыдущих ссылках.Я изменил qtbase _%. Bbappend рецепт следующим образом:

PACKAGECONFIG_GL_x   = "gles2"
PACKAGECONFIG_FONTS_x = "fontconfig"
PACKAGECONFIG_APPEND_x = " \
${@bb.utils.contains("DISTRO_FEATURES", "wayland", "xkbcommon-evdev", \
   bb.utils.contains("DISTRO_FEATURES", "x11", " ", "libinput eglfs gbm", d), d)} \
"
PACKAGECONFIG_append_x = " ${PACKAGECONFIG_APPEND} kms accessibility sm"
FILESEXTRAPATHS_prepend_x := "${THISDIR}/${PN}:"
PACKAGECONFIG_remove_x = "evdev"

Как вы можете видеть, я добавил суффикс "_x" ко всем переменным рецепта.Предполагается (по крайней мере, это то, что я понимаю), эти "_x" делают переменную назначаемой на тот случай, если определена PLATFORM = "x".Правильно?Но он не работает, как ожидалось, он создает ту же проблему.Итак, на практике это означает, что я не понимаю даже основ этого механизма.

Могут ли некоторые из вас дать хорошее объяснение этому?Я думаю, что это должно быть полезно для других с такой же проблемой.Большое спасибо за ваше время!: -)

1 Ответ

0 голосов
/ 15 июня 2018

Просто добавьте COMPATIBLE_MACHINE = "x" в файл .bbappend.

Как видите, я добавил суффикс "_x" ко всем переменным рецепта

Удалить всеСуффикс "_x" в файле .bbappend.

...