From 69680ded39e46fb4dcc4dca5554089fcba68e469 Mon Sep 17 00:00:00 2001 From: Mike Engel Date: Wed, 6 Aug 2025 11:57:08 +0200 Subject: [PATCH] lvgl: upgrade to version 9.3 This commit upgrades our LVGL support to v9.3.0. We used the meta-openembedded implementation, reference and reused the lv_conf.inc file for the demo configuration. https://onedigi.atlassian.net/browse/DEL-9222 Signed-off-by: Mike Engel --- .../recipes-graphics/lvgl/lv-conf.inc | 102 +++++++++++++++++ .../recipes-graphics/lvgl/lv-drivers.inc | 43 ------- .../recipes-graphics/lvgl/lvgl-demo_8.3.0.bb | 108 ------------------ .../recipes-graphics/lvgl/lvgl-demo_9.3.0.bb | 78 +++++++++++++ 4 files changed, 180 insertions(+), 151 deletions(-) create mode 100644 meta-digi-dey/recipes-graphics/lvgl/lv-conf.inc delete mode 100644 meta-digi-dey/recipes-graphics/lvgl/lv-drivers.inc delete mode 100644 meta-digi-dey/recipes-graphics/lvgl/lvgl-demo_8.3.0.bb create mode 100644 meta-digi-dey/recipes-graphics/lvgl/lvgl-demo_9.3.0.bb diff --git a/meta-digi-dey/recipes-graphics/lvgl/lv-conf.inc b/meta-digi-dey/recipes-graphics/lvgl/lv-conf.inc new file mode 100644 index 000000000..e2d90864e --- /dev/null +++ b/meta-digi-dey/recipes-graphics/lvgl/lv-conf.inc @@ -0,0 +1,102 @@ +# By default, use drm backend if possible. +# If unavailable, fall back to a secondary backend +PACKAGECONFIG ?= "drm" +PACKAGECONFIG:ccimx6ul = "fbdev" +PACKAGECONFIG:ccimx6 = "fbdev" + +PACKAGECONFIG[drm] = ",,libdrm" +PACKAGECONFIG[fbdev] = ",," +PACKAGECONFIG[gridnav] = ",," +PACKAGECONFIG[thorvg] = ",," +PACKAGECONFIG[sdl] = ",,virtual/libsdl2 libsdl2-image" + +# Add libdrm include if drm is selected in PACKAGECONFIG +TARGET_CFLAGS += "${@bb.utils.contains('PACKAGECONFIG', 'drm', '-I${STAGING_INCDIR}/libdrm', '', d)}" + +LVGL_CONFIG_USE_DRM = "${@bb.utils.contains('PACKAGECONFIG', 'drm', '1', '0', d)}" + +LVGL_CONFIG_USE_EVDEV = "${@bb.utils.contains_any('PACKAGECONFIG', 'drm fbdev', '1', '0', d)}" + +LVGL_CONFIG_USE_FBDEV = "${@bb.utils.contains('PACKAGECONFIG', 'fbdev', '1', '0', d)}" + +LVGL_CONFIG_USE_SDL = "${@bb.utils.contains('PACKAGECONFIG', 'sdl', '1', '0', d)}" + +LVGL_CONFIG_SDL_FULLSCREEN ?= "0" + +LVGL_CONFIG_LV_MEM_CUSTOM ?= "0" +LVGL_CONFIG_LV_MEM_SIZE ?= "(64 * 1024U)" +LVGL_CONFIG_LV_COLOR_DEPTH ?= "32" + +LVGL_CONFIG_LV_USE_LOG ?= "0" +LVGL_CONFIG_LV_LOG_LEVEL ?= "LV_LOG_LEVEL_WARN" +LVGL_CONFIG_LV_LOG_PRINTF ?= "0" + +LVGL_CONFIG_LV_USE_FONT_COMPRESSED ?= "0" + +LVGL_CONFIG_LV_USE_GRIDNAV = "${@bb.utils.contains('PACKAGECONFIG', 'gridnav', '1', '0', d)}" + +LVGL_CONFIG_LV_THEME_DEFAULT_DARK ?= "0" + +LVGL_CONFIG_USE_LOTTIE = "${@bb.utils.contains('PACKAGECONFIG', 'thorvg', '1', '0', d)}" + +LVGL_CONFIG_USE_VECTOR_GRAPHICS = "${@bb.utils.contains('PACKAGECONFIG', 'thorvg', '1', '0', d)}" + +LVGL_CONFIG_USE_THORVG_INTERNAL = "${@bb.utils.contains('PACKAGECONFIG', 'thorvg', '1', '0', d)}" + +LVGL_CONFIG_USE_MATRIX = "${@bb.utils.contains('PACKAGECONFIG', 'thorvg', '1', '0', d)}" + +LVGL_CONFIG_USE_FLOAT = "${@bb.utils.contains('PACKAGECONFIG', 'thorvg', '1', '0', d)}" + +DEBUG_BUILD ??= "0" + +ALLOW_EMPTY:${PN} = "1" + +EXTRA_OECMAKE += "-Dinstall:BOOL=ON -DLIB_INSTALL_DIR=${baselib}" + +do_configure:append() { + # If there is a configuration template, start from that + [ -r "${S}/lv_conf_template.h" ] && cp -Lv "${S}/lv_conf_template.h" "${S}/lv_conf.h" + + sed -r -e "s|#if 0 .*Set it to \"1\" to enable content.*|#if 1 // Enabled by ${PN}|" \ + \ + -e "s|^([[:space:]]*#define LV_USE_LINUX_DRM[[:space:]]).*|\1${LVGL_CONFIG_USE_DRM}|" \ + \ + -e "s|^([[:space:]]*#define LV_USE_LINUX_FBDEV[[:space:]]).*|\1${LVGL_CONFIG_USE_FBDEV}|" \ + \ + -e "s|^([[:space:]]*#define LV_USE_SDL[[:space:]]).*|\1${LVGL_CONFIG_USE_SDL}|" \ + -e "s|^([[:space:]]*#define LV_USE_DRAW_SDL[[:space:]]).*|\1${LVGL_CONFIG_USE_SDL}|" \ + -e "s|^([[:space:]]*#define LV_SDL_BUF_COUNT[[:space:]]).*|\1 2|" \ + -e "s|^([[:space:]]*#define LV_SDL_FULLSCREEN[[:space:]]).*|\1${LVGL_CONFIG_SDL_FULLSCREEN}|" \ + \ + -e "s|^([[:space:]]*#define LV_COLOR_DEPTH[[:space:]]).*|\1${LVGL_CONFIG_LV_COLOR_DEPTH}|" \ + -e "s|^([[:space:]]*#define LV_MEM_CUSTOM[[:space:]]).*|\1${LVGL_CONFIG_LV_MEM_CUSTOM}|" \ + -e "s|^([[:space:]]*#define LV_MEM_SIZE[[:space:]]).*|\1${LVGL_CONFIG_LV_MEM_SIZE}|" \ + \ + -e "s|^([[:space:]]*#define LV_TICK_CUSTOM[[:space:]]).*|\1 1|" \ + -e "s|^([[:space:]]*#define LV_TICK_CUSTOM_INCLUDE[[:space:]]).*|\1 |" \ + -e "s|^([[:space:]]*#define LV_TICK_CUSTOM_SYS_TIME_EXPR[[:space:]]).*|extern uint32_t custom_tick_get(void);\n\1 (custom_tick_get())|" \ + \ + -e "s|^([[:space:]]*#define LV_USE_EVDEV[[:space:]]).*|\1${LVGL_CONFIG_USE_EVDEV}|" \ + \ + -e "s|^([[:space:]]*#define LV_USE_ASSERT_NULL[[:space:]]).*|\1${DEBUG_BUILD}|" \ + -e "s|^([[:space:]]*#define LV_USE_ASSERT_MALLOC[[:space:]]).*|\1${DEBUG_BUILD}|" \ + -e "s|^([[:space:]]*#define LV_USE_ASSERT_STYLE[[:space:]]).*|\1${DEBUG_BUILD}|" \ + -e "s|^([[:space:]]*#define LV_USE_ASSERT_MEM_INTEGRITY[[:space:]]).*|\1${DEBUG_BUILD}|" \ + -e "s|^([[:space:]]*#define LV_USE_ASSERT_OBJ[[:space:]]).*|\1${DEBUG_BUILD}|" \ + \ + -e "s|^([[:space:]]*#define LV_USE_LOG[[:space:]]).*|\1${LVGL_CONFIG_LV_USE_LOG}|" \ + -e "s|^([[:space:]]*#define LV_LOG_LEVEL[[:space:]]).*|\1${LVGL_CONFIG_LV_LOG_LEVEL}|" \ + -e "s|^([[:space:]]*#define LV_LOG_PRINTF[[:space:]]).*|\1${LVGL_CONFIG_LV_LOG_PRINTF}|" \ + \ + -e "s|^([[:space:]]*#define LV_USE_FONT_COMPRESSED[[:space:]]).*|\1${LVGL_CONFIG_LV_USE_FONT_COMPRESSED}|" \ + -e "s|^([[:space:]]*#define LV_USE_GRIDNAV[[:space:]]).*|\1${LVGL_CONFIG_LV_USE_GRIDNAV}|" \ + -e "s|^([[:space:]]*#define LV_THEME_DEFAULT_DARK[[:space:]]).*|\1${LVGL_CONFIG_LV_THEME_DEFAULT_DARK}|" \ + \ + -e "s|^([[:space:]]*#define LV_USE_VECTOR_GRAPHIC[[:space:]]).*|\1${LVGL_CONFIG_USE_VECTOR_GRAPHICS}|" \ + -e "s|^([[:space:]]*#define LV_USE_THORVG_INTERNAL[[:space:]]).*|\1${LVGL_CONFIG_USE_THORVG_INTERNAL}|" \ + -e "s|^([[:space:]]*#define LV_USE_MATRIX[[:space:]]).*|\1${LVGL_CONFIG_USE_MATRIX}|" \ + -e "s|^([[:space:]]*#define LV_USE_FLOAT[[:space:]]).*|\1${LVGL_CONFIG_USE_FLOAT}|" \ + \ + -e "s|^([[:space:]]*#define LV_USE_LOTTIE[[:space:]]).*|\1${LVGL_CONFIG_USE_LOTTIE}|" \ + -i "${S}/lv_conf.h" +} diff --git a/meta-digi-dey/recipes-graphics/lvgl/lv-drivers.inc b/meta-digi-dey/recipes-graphics/lvgl/lv-drivers.inc deleted file mode 100644 index a66614d60..000000000 --- a/meta-digi-dey/recipes-graphics/lvgl/lv-drivers.inc +++ /dev/null @@ -1,43 +0,0 @@ -PACKAGECONFIG[drm] = ",,libdrm" -PACKAGECONFIG[fbdev] = ",," -PACKAGECONFIG[sdl] = ",,virtual/libsdl2" -PACKAGECONFIG[wayland] = ",,libxkbcommon wayland" - -LVGL_CONFIG_USE_DRM = "${@bb.utils.contains('PACKAGECONFIG', 'drm', '1', '0', d)}" -LVGL_CONFIG_DRM_CARD ?= "/dev/dri/card0" - -LVGL_CONFIG_USE_EVDEV = "${@bb.utils.contains_any('PACKAGECONFIG', 'drm fbdev', '1', '0', d)}" -LVGL_CONFIG_EVDEV_INPUT ?= "/dev/input/mouse0" -LVGL_CONFIG_EVDEV_INPUT:ccimx6ul ?= "/dev/input/touchscreen0" - -LVGL_CONFIG_USE_FBDEV = "${@bb.utils.contains('PACKAGECONFIG', 'fbdev', '1', '0', d)}" - -LVGL_CONFIG_USE_SDL = "${@bb.utils.contains('PACKAGECONFIG', 'sdl', '1', '0', d)}" - -LVGL_CONFIG_USE_WAYLAND = "${@bb.utils.contains('PACKAGECONFIG', 'wayland', '1', '0', d)}" - -ALLOW_EMPTY:${PN} = "1" - -EXTRA_OECMAKE += "-Dinstall:BOOL=ON -DLIB_INSTALL_DIR=${baselib}" - -do_configure:append() { - # If there is a configuration template, start from that - [ -r "${S}/lv_drv_conf_template.h" ] && cp -Lv "${S}/lv_drv_conf_template.h" "${S}/lv_drv_conf.h" - - # Configure the software using sed - sed -e "s|#if 0 .*Set it to \"1\" to enable the content.*|#if 1 // Enabled by ${PN}|g" \ - \ - -e "s|\(^# define USE_DRM \).*|# define USE_DRM ${LVGL_CONFIG_USE_DRM}|g" \ - -e "s|\(^# define DRM_CARD \).*|# define DRM_CARD \"${LVGL_CONFIG_DRM_CARD}\"|g" \ - \ - -e "s|\(^# define USE_EVDEV \).*|# define USE_EVDEV ${LVGL_CONFIG_USE_EVDEV}|g" \ - -e "s|\(^# define EVDEV_NAME \).*|# define EVDEV_NAME \"${LVGL_CONFIG_EVDEV_INPUT}\"|g" \ - \ - -e "s|\(^# define USE_FBDEV \).*|# define USE_FBDEV ${LVGL_CONFIG_USE_FBDEV}|g" \ - \ - -e "s|\(^# define USE_SDL \).*|# define USE_SDL ${LVGL_CONFIG_USE_SDL}|g" \ - \ - -e "s|\(^# define USE_WAYLAND \).*|# define USE_WAYLAND ${LVGL_CONFIG_USE_WAYLAND}|g" \ - \ - -i "${S}/lv_drv_conf.h" -} diff --git a/meta-digi-dey/recipes-graphics/lvgl/lvgl-demo_8.3.0.bb b/meta-digi-dey/recipes-graphics/lvgl/lvgl-demo_8.3.0.bb deleted file mode 100644 index 5af0f2010..000000000 --- a/meta-digi-dey/recipes-graphics/lvgl/lvgl-demo_8.3.0.bb +++ /dev/null @@ -1,108 +0,0 @@ -SUMMARY = "LVGL Demo Application" -HOMEPAGE = "https://github.com/digi-embedded/lv_port_linux_frame_buffer" -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://LICENSE;md5=802d3d83ae80ef5f343050bf96cce3a4 \ - file://lv_drivers/LICENSE;md5=d6fc0df890c5270ef045981b516bb8f2 \ - file://lvgl/LICENCE.txt;md5=bf1198c89ae87f043108cea62460b03a" - -SRCBRANCH ?= "dey/master" - -SRC_URI = " \ - gitsm://github.com/digi-embedded/lv_port_linux_frame_buffer.git;branch=${SRCBRANCH};protocol=https \ - file://lvgl-demo-init \ - file://lvgl-demo-init.service \ -" -SRCREV = "0a799d22a5aaf9de18aca428579945a0a9c2c270" - -EXTRA_OEMAKE = "DESTDIR=${D}" - -# By default, use wayland backend if possible. -# If unavailable, fall back to a secondary backend -MINIMAL_BACKEND ?= "fbdev" -MINIMAL_BACKEND:imxdrm = "drm" -MINIMAL_BACKEND:ccmp15 = "sdl" -PACKAGECONFIG = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '${MINIMAL_BACKEND}', d)}" - -require lv-drivers.inc - -inherit cmake systemd update-rc.d - -S = "${WORKDIR}/git" - -TARGET_CFLAGS += "-I${STAGING_INCDIR}/libdrm" - -# Change DRM card used for i.MX8-based platforms -LVGL_CONFIG_DRM_CARD:mx8-generic-bsp = "/dev/dri/card1" - -LVGL_CONFIG_HOR_RES ?= "800" -LVGL_CONFIG_VER_RES ?= "480" -LVGL_CONFIG_HOR_RES:ccimx6ul ?= "1280" -LVGL_CONFIG_VER_RES:ccimx6ul ?= "800" - -do_configure:prepend() { - if [ "${LVGL_CONFIG_USE_DRM}" -eq 1 ] ; then - # Add libdrm build dependency - sed -i '/^target_link_libraries/ s@lvgl::drivers@& drm@' "${S}/CMakeLists.txt" - fi - - if [ "${LVGL_CONFIG_USE_SDL}" -eq 1 ] ; then - # Add libsdl build dependency - sed -i '/^target_link_libraries/ s@lvgl::drivers@& SDL2@' "${S}/CMakeLists.txt" - fi - - if [ "${LVGL_CONFIG_USE_WAYLAND}" -eq 1 ] ; then - # Add wayland build dependencies - sed -i '/^target_link_libraries/ s@lvgl::drivers@& wayland-client wayland-cursor xkbcommon@' "${S}/CMakeLists.txt" - fi - - # Configure the app's dimensions - sed -e "s|\(^#define *LV_DRV_DISP_HOR_RES *\).*|\1${LVGL_CONFIG_HOR_RES}|g" \ - -e "s|\(^#define *LV_DRV_DISP_VER_RES *\).*|\1${LVGL_CONFIG_VER_RES}|g" \ - \ - -i "${S}/lv_drv_conf.h" -} - -WESTON_SERVICE ?= "weston.service" -WESTON_SERVICE:ccmp15 ?= "weston-launch.service" -WESTON_SERVICE:ccmp2 ?= "weston-launch.service" - -LVGL_DEMO_ENV ?= "DISPLAY=:0.0 XDG_RUNTIME_DIR=/run/user/0 WAYLAND_DISPLAY=\$\{DEMO_DISPLAY\}" -LVGL_DEMO_ENV:ccimx6ul ?= "" - -do_install:append() { - install -d ${D}${bindir} - install -m 0755 ${B}/lvgl_fb ${D}${bindir}/lvgl_demo - - # Install systemd service - if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then - # Install systemd unit files - install -d ${D}${systemd_unitdir}/system - install -m 0644 ${WORKDIR}/lvgl-demo-init.service ${D}${systemd_unitdir}/system/ - sed -i -e "s,##WESTON_SERVICE##,${WESTON_SERVICE},g" \ - "${D}${systemd_unitdir}/system/lvgl-demo-init.service" - fi - - # Install wrapper bootscript to launch LVGL demo on boot - install -d ${D}${sysconfdir}/init.d - install -m 0755 ${WORKDIR}/lvgl-demo-init ${D}${sysconfdir}/lvgl-demo-init - sed -i -e "s@##LVGL_DEMO_DISPLAY##@${WAYLAND_DISPLAY}@g" \ - -e "s@##LVGL_DEMO_ENV##@${LVGL_DEMO_ENV}@g" \ - "${D}${sysconfdir}/lvgl-demo-init" - ln -sf ${sysconfdir}/lvgl-demo-init ${D}${sysconfdir}/init.d/lvgl-demo-init -} - -PACKAGES =+ "${PN}-init" -FILES:${PN}-init = " \ - ${sysconfdir}/lvgl-demo-init \ - ${sysconfdir}/init.d/lvgl-demo-init \ - ${systemd_unitdir}/system/lvgl-demo-init.service \ -" - -INITSCRIPT_PACKAGES += "${PN}-init" -INITSCRIPT_NAME:${PN}-init = "lvgl-demo-init" -INITSCRIPT_PARAMS:${PN}-init = "start 99 3 5 . stop 20 0 1 2 6 ." - -SYSTEMD_PACKAGES = "${PN}-init" -SYSTEMD_SERVICE:${PN}-init = "lvgl-demo-init.service" - -COMPATIBLE_MACHINE = "(ccimx6$|ccimx6ul|ccimx8m|ccimx8x|ccimx93|ccmp15|ccmp2)" diff --git a/meta-digi-dey/recipes-graphics/lvgl/lvgl-demo_9.3.0.bb b/meta-digi-dey/recipes-graphics/lvgl/lvgl-demo_9.3.0.bb new file mode 100644 index 000000000..1b3dafb52 --- /dev/null +++ b/meta-digi-dey/recipes-graphics/lvgl/lvgl-demo_9.3.0.bb @@ -0,0 +1,78 @@ +SUMMARY = "LVGL Demo Application for Framebuffer" +HOMEPAGE = "https://github.com/lvgl/lv_port_linux_frame_buffer" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=802d3d83ae80ef5f343050bf96cce3a4 \ + file://lvgl/LICENCE.txt;md5=4570b6241b4fced1d1d18eb691a0e083" + +SRC_URI = "\ + git://github.com/lvgl/lv_port_linux_frame_buffer.git;protocol=https;branch=release/v9.3;name=demo \ + git://github.com/lvgl/lvgl;protocol=https;branch=release/v9.3;name=lvgl;subdir=git/lvgl \ + file://lvgl-demo-init \ + file://lvgl-demo-init.service \ +" + +SRCREV_demo = "d07de027a8eb220f4e20f0e1b8be28729332e9ea" +SRCREV_lvgl = "c033a98afddd65aaafeebea625382a94020fe4a7" +SRCREV_FORMAT = "demo_lvgl" + +EXTRA_OEMAKE = "DESTDIR=${D}" + +LVGL_CONFIG_DRM_CARD ?= "/dev/dri/card0" +# Change DRM card used for i.MX8-based platforms +LVGL_CONFIG_DRM_CARD:mx8-generic-bsp = "/dev/dri/card1" +LVGL_CONFIG_LV_USE_LOG = "1" +LVGL_CONFIG_LV_LOG_PRINTF = "1" +LVGL_CONFIG_LV_MEM_SIZE = "(256 * 1024U)" +LVGL_CONFIG_LV_USE_FONT_COMPRESSED = "1" + +require lv-conf.inc + +inherit cmake systemd update-rc.d + +S = "${WORKDIR}/git" + +LVGL_DEMO_ENV ?= "DISPLAY=:0.0 XDG_RUNTIME_DIR=/run/user/0 WAYLAND_DISPLAY=\$\{DEMO_DISPLAY\}" +LVGL_DEMO_ENV:ccimx6ul ?= "" + +do_configure:prepend() { + if [ "${LVGL_CONFIG_USE_SDL}" -eq 1 ] ; then + # Add libsdl build dependency, SDL2_image has no cmake file + sed -i '/^target_link_libraries/ s@pthread@& SDL2_image@' "${S}/CMakeLists.txt" + fi +} + +do_install:append() { + install -d ${D}${bindir} + install -m 0755 ${S}/bin/main ${D}${bindir}/lvgl-demo + + # Install systemd service + if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then + # Install systemd unit files + install -d ${D}${systemd_unitdir}/system + install -m 0644 ${WORKDIR}/lvgl-demo-init.service ${D}${systemd_unitdir}/system/ + fi + + # Install wrapper bootscript to launch LVGL demo on boot + install -d ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/lvgl-demo-init ${D}${sysconfdir}/lvgl-demo-init + sed -i -e "s@##LVGL_DEMO_DISPLAY##@${WAYLAND_DISPLAY}@g" \ + -e "s@##LVGL_DEMO_ENV##@${LVGL_DEMO_ENV}@g" \ + "${D}${sysconfdir}/lvgl-demo-init" + ln -sf ${sysconfdir}/lvgl-demo-init ${D}${sysconfdir}/init.d/lvgl-demo-init +} + +PACKAGES =+ "${PN}-init" +FILES:${PN}-init = " \ + ${sysconfdir}/lvgl-demo-init \ + ${sysconfdir}/init.d/lvgl-demo-init \ + ${systemd_unitdir}/system/lvgl-demo-init.service \ +" + +INITSCRIPT_PACKAGES += "${PN}-init" +INITSCRIPT_NAME:${PN}-init = "lvgl-demo-init" +INITSCRIPT_PARAMS:${PN}-init = "start 99 3 5 . stop 20 0 1 2 6 ." + +SYSTEMD_PACKAGES = "${PN}-init" +SYSTEMD_SERVICE:${PN}-init = "lvgl-demo-init.service" + +COMPATIBLE_MACHINE = "(ccimx6$|ccimx6ul|ccimx8m|ccimx8x|ccimx93|ccmp15|ccmp2)"