Я пытаюсь понять механизм, предоставляемый 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".Правильно?Но он не работает, как ожидалось, он создает ту же проблему.Итак, на практике это означает, что я не понимаю даже основ этого механизма.
Могут ли некоторые из вас дать хорошее объяснение этому?Я думаю, что это должно быть полезно для других с такой же проблемой.Большое спасибо за ваше время!: -)