aboutsummaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-graphics
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2024-03-13 05:40:11 +0100
committerKhem Raj <raj.khem@gmail.com>2024-03-12 22:28:39 -0700
commit0f2a49910011b9d9857f24cb70b795f187fab776 (patch)
tree85d11dc785e024ddc1c5f87b979e57a6ad309259 /meta-oe/recipes-graphics
parent2054fda6d1dea9a0310f817492dfd743357372ad (diff)
downloadmeta-openembedded-0f2a49910011b9d9857f24cb70b795f187fab776.tar.gz
lvgl: Replace sed patching with real patches
Replace the current awful sed hacking with real patches bound for upstream. The sed hacking was simply not maintainable anymore. Signed-off-by: Marek Vasut <marex@denx.de> Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'meta-oe/recipes-graphics')
-rw-r--r--meta-oe/recipes-graphics/lvgl/files/0001-fix-drm-Default-to-XRGB8888-framebuffer.patch36
-rw-r--r--meta-oe/recipes-graphics/lvgl/files/0002-fix-sdl-handle-both-LV_IMAGE_SRC_FILE-and-LV_IMAGE_S.patch63
-rw-r--r--meta-oe/recipes-graphics/lvgl/files/0003-Make-fbdev-device-node-runtime-configurable-via-envi.patch45
-rw-r--r--meta-oe/recipes-graphics/lvgl/files/0004-Factor-out-fbdev-initialization-code.patch52
-rw-r--r--meta-oe/recipes-graphics/lvgl/files/0005-Add-DRM-KMS-example-support.patch59
-rw-r--r--meta-oe/recipes-graphics/lvgl/files/0006-Add-SDL2-example-support.patch69
-rw-r--r--meta-oe/recipes-graphics/lvgl/lvgl-demo-fb_9.0.0.bb24
-rw-r--r--meta-oe/recipes-graphics/lvgl/lvgl_9.0.0.bb11
8 files changed, 337 insertions, 22 deletions
diff --git a/meta-oe/recipes-graphics/lvgl/files/0001-fix-drm-Default-to-XRGB8888-framebuffer.patch b/meta-oe/recipes-graphics/lvgl/files/0001-fix-drm-Default-to-XRGB8888-framebuffer.patch
new file mode 100644
index 0000000000..9d758cb087
--- /dev/null
+++ b/meta-oe/recipes-graphics/lvgl/files/0001-fix-drm-Default-to-XRGB8888-framebuffer.patch
@@ -0,0 +1,36 @@
+From 7b89e18c2f21e4b91b461007368df724198ac904 Mon Sep 17 00:00:00 2001
+From: Marek Vasut <marex@denx.de>
+Date: Tue, 12 Mar 2024 03:13:33 +0100
+Subject: [PATCH 1/2] fix(drm): Default to XRGB8888 framebuffer
+
+The ARGB8888 framebuffer format for base canvas makes little sense
+as the base canvas is unlikely to be transparent and require alpha.
+Use XRGB8888 framebuffer format which is more widely supported by
+DRM drivers as base plane pixel format.
+
+This makes e.g. i.MX8M Nano work by default.
+
+Upstream-Status: Submitted [https://github.com/lvgl/lvgl/pull/5851]
+Signed-off-by: Marek Vasut <marex@denx.de>
+---
+This is identical fix to lv_drivers https://github.com/lvgl/lv_drivers/pull/282
+---
+ src/drivers/display/drm/lv_linux_drm.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/drivers/display/drm/lv_linux_drm.c b/src/drivers/display/drm/lv_linux_drm.c
+index c706f9cb2..faa2212bf 100644
+--- a/src/drivers/display/drm/lv_linux_drm.c
++++ b/src/drivers/display/drm/lv_linux_drm.c
+@@ -24,7 +24,7 @@
+ * DEFINES
+ *********************/
+ #if LV_COLOR_DEPTH == 32
+- #define DRM_FOURCC DRM_FORMAT_ARGB8888
++ #define DRM_FOURCC DRM_FORMAT_XRGB8888
+ #elif LV_COLOR_DEPTH == 16
+ #define DRM_FOURCC DRM_FORMAT_RGB565
+ #else
+--
+2.43.0
+
diff --git a/meta-oe/recipes-graphics/lvgl/files/0002-fix-sdl-handle-both-LV_IMAGE_SRC_FILE-and-LV_IMAGE_S.patch b/meta-oe/recipes-graphics/lvgl/files/0002-fix-sdl-handle-both-LV_IMAGE_SRC_FILE-and-LV_IMAGE_S.patch
new file mode 100644
index 0000000000..bd619b1572
--- /dev/null
+++ b/meta-oe/recipes-graphics/lvgl/files/0002-fix-sdl-handle-both-LV_IMAGE_SRC_FILE-and-LV_IMAGE_S.patch
@@ -0,0 +1,63 @@
+From 5b7f657e8ad656e0854f2252b3bd482b966d650c Mon Sep 17 00:00:00 2001
+From: Marek Vasut <marex@denx.de>
+Date: Wed, 13 Mar 2024 02:12:30 +0100
+Subject: [PATCH 2/2] fix(sdl): handle both LV_IMAGE_SRC_FILE and
+ LV_IMAGE_SRC_VARIABLE
+
+The SDL image draw code currently assumes that the image source is a
+filename and attempts to open that filename. This is not necessarily
+the case, e.g. the lv_demo_fb uses encoded images which are of type
+LV_IMAGE_SRC_VARIABLE and instead of filename, come with a buffer of
+pixels. Handle the later using SDL_CreateRGBSurfaceFrom().
+
+Upstream-Status: Submitted [https://github.com/lvgl/lvgl/pull/5852]
+Signed-off-by: Marek Vasut <marex@denx.de>
+---
+ src/draw/sdl/lv_draw_sdl.c | 30 +++++++++++++++++++++++++++---
+ 1 file changed, 27 insertions(+), 3 deletions(-)
+
+diff --git a/src/draw/sdl/lv_draw_sdl.c b/src/draw/sdl/lv_draw_sdl.c
+index cbb555d94..5eee5b725 100644
+--- a/src/draw/sdl/lv_draw_sdl.c
++++ b/src/draw/sdl/lv_draw_sdl.c
+@@ -224,10 +224,34 @@ static bool draw_to_texture(lv_draw_sdl_unit_t * u, cache_data_t * data)
+ break;
+ case LV_DRAW_TASK_TYPE_IMAGE: {
+ lv_draw_image_dsc_t * image_dsc = task->draw_dsc;
+- const char * path = image_dsc->src;
+- SDL_Surface * surface = IMG_Load(&path[2]);
++ lv_image_src_t type = lv_image_src_get_type(image_dsc->src);
++ SDL_Surface * surface = NULL;
++ if(type == LV_IMAGE_SRC_FILE) {
++ const char * path = image_dsc->src;
++ surface = IMG_Load(&path[2]);
++ }
++ else if(type == LV_IMAGE_SRC_VARIABLE) {
++ lv_image_dsc_t * lvd = image_dsc->src;
++ surface = SDL_CreateRGBSurfaceFrom(lvd->data,
++ lvd->header.w, lvd->header.h,
++ LV_COLOR_FORMAT_GET_BPP(lvd->header.cf),
++ lvd->header.stride,
++#if SDL_BYTEORDER == SDL_LIL_ENDIAN
++ 0x00FF0000,
++ 0x0000FF00,
++ 0x000000FF,
++ 0xFF000000
++#else
++ 0x0000FF00,
++ 0x00FF0000,
++ 0xFF000000,
++ 0x000000FF
++#endif
++ );
++ }
++
+ if(surface == NULL) {
+- fprintf(stderr, "could not load image: %s\n", IMG_GetError());
++ fprintf(stderr, "could not load image\n");
+ return false;
+ }
+
+--
+2.43.0
+
diff --git a/meta-oe/recipes-graphics/lvgl/files/0003-Make-fbdev-device-node-runtime-configurable-via-envi.patch b/meta-oe/recipes-graphics/lvgl/files/0003-Make-fbdev-device-node-runtime-configurable-via-envi.patch
new file mode 100644
index 0000000000..73c01cb590
--- /dev/null
+++ b/meta-oe/recipes-graphics/lvgl/files/0003-Make-fbdev-device-node-runtime-configurable-via-envi.patch
@@ -0,0 +1,45 @@
+From 85d90749a10b5f91741d37b75825935bf7cc4fb3 Mon Sep 17 00:00:00 2001
+From: Marek Vasut <marex@denx.de>
+Date: Tue, 12 Mar 2024 03:00:37 +0100
+Subject: [PATCH 3/6] Make fbdev device node runtime configurable via
+ environment variable
+
+Test whether $LV_VIDEO_CARD environment variable is non-NULL and in
+case it is, use it as the video card file in lv_linux_fbdev_set_file().
+Otherwise fall back to /dev/fb0, i.e. the current behavior. This way,
+it is possible to test LVGL on systems with multiple fbdev devices.
+
+Upstream-Status: Submitted [https://github.com/lvgl/lv_port_linux_frame_buffer/pull/47]
+Signed-off-by: Marek Vasut <marex@denx.de>
+---
+ main.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/main.c b/main.c
+index 9775b9c..b64a098 100644
+--- a/main.c
++++ b/main.c
+@@ -4,13 +4,19 @@
+ #include <pthread.h>
+ #include <time.h>
+
++static const char *lv_linux_get_video_card_node(const char *videocard_default)
++{
++ return getenv("LV_VIDEO_CARD") ? : videocard_default;
++}
++
+ int main(void)
+ {
++ const char *videocard = lv_linux_get_video_card_node("/dev/fb0");
+ lv_init();
+
+ /*Linux frame buffer device init*/
+ lv_display_t * disp = lv_linux_fbdev_create();
+- lv_linux_fbdev_set_file(disp, "/dev/fb0");
++ lv_linux_fbdev_set_file(disp, videocard);
+
+ /*Create a Demo*/
+ lv_demo_widgets();
+--
+2.43.0
+
diff --git a/meta-oe/recipes-graphics/lvgl/files/0004-Factor-out-fbdev-initialization-code.patch b/meta-oe/recipes-graphics/lvgl/files/0004-Factor-out-fbdev-initialization-code.patch
new file mode 100644
index 0000000000..d24d150c06
--- /dev/null
+++ b/meta-oe/recipes-graphics/lvgl/files/0004-Factor-out-fbdev-initialization-code.patch
@@ -0,0 +1,52 @@
+From 593da8e11cc5029773ad330b5d7633ee9f2fba95 Mon Sep 17 00:00:00 2001
+From: Marek Vasut <marex@denx.de>
+Date: Tue, 12 Mar 2024 18:09:42 +0100
+Subject: [PATCH 4/6] Factor out fbdev initialization code
+
+Pull fbdev initialization code into separate function and add ifdef
+around it, so it can be conditionally compiled in. This is done in
+preparation for addition of other backend initialization example
+code.
+
+Upstream-Status: Submitted [https://github.com/lvgl/lv_port_linux_frame_buffer/pull/47]
+Signed-off-by: Marek Vasut <marex@denx.de>
+---
+ main.c | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+diff --git a/main.c b/main.c
+index b64a098..288519c 100644
+--- a/main.c
++++ b/main.c
+@@ -9,14 +9,24 @@ static const char *lv_linux_get_video_card_node(const char *videocard_default)
+ return getenv("LV_VIDEO_CARD") ? : videocard_default;
+ }
+
+-int main(void)
++#if LV_USE_LINUX_FBDEV
++static void lv_linux_disp_init(void)
+ {
+ const char *videocard = lv_linux_get_video_card_node("/dev/fb0");
+- lv_init();
+-
+- /*Linux frame buffer device init*/
+ lv_display_t * disp = lv_linux_fbdev_create();
++
+ lv_linux_fbdev_set_file(disp, videocard);
++}
++#else
++#error Unsupported configuration
++#endif
++
++int main(void)
++{
++ lv_init();
++
++ /*Linux display device init*/
++ lv_linux_disp_init();
+
+ /*Create a Demo*/
+ lv_demo_widgets();
+--
+2.43.0
+
diff --git a/meta-oe/recipes-graphics/lvgl/files/0005-Add-DRM-KMS-example-support.patch b/meta-oe/recipes-graphics/lvgl/files/0005-Add-DRM-KMS-example-support.patch
new file mode 100644
index 0000000000..9ee7a7f19d
--- /dev/null
+++ b/meta-oe/recipes-graphics/lvgl/files/0005-Add-DRM-KMS-example-support.patch
@@ -0,0 +1,59 @@
+From dabf40559428733413432afa29598bc145aa6636 Mon Sep 17 00:00:00 2001
+From: Marek Vasut <marex@denx.de>
+Date: Tue, 12 Mar 2024 03:08:13 +0100
+Subject: [PATCH 5/6] Add DRM/KMS example support
+
+Extend the main.c to support both legacy fbdev and DRM/KMS initialization.
+
+To use legacy fbdev support, adjust lv_conf.h as follows:
+LV_USE_LINUX_FBDEV=1
+LV_USE_LINUX_DRM=0
+
+To use DRM/KMS support, adjust lv_conf.h as follows:
+LV_USE_LINUX_FBDEV=0
+LV_USE_LINUX_DRM=1
+
+Upstream-Status: Submitted [https://github.com/lvgl/lv_port_linux_frame_buffer/pull/47]
+Signed-off-by: Marek Vasut <marex@denx.de>
+---
+ CMakeLists.txt | 5 ++++-
+ main.c | 8 ++++++++
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index d91b196..c1cfb7f 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -12,6 +12,9 @@ target_include_directories(lvgl PUBLIC ${PROJECT_SOURCE_DIR})
+
+ add_executable(main main.c mouse_cursor_icon.c)
+
+-target_link_libraries(main lvgl lvgl::examples lvgl::demos lvgl::thorvg ${SDL2_LIBRARIES} m pthread)
++include(${CMAKE_CURRENT_LIST_DIR}/lvgl/tests/FindLibDRM.cmake)
++include_directories(${Libdrm_INCLUDE_DIRS})
++
++target_link_libraries(main lvgl lvgl::examples lvgl::demos lvgl::thorvg ${SDL2_LIBRARIES} ${Libdrm_LIBRARIES} m pthread)
+ add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/main DEPENDS main)
+
+diff --git a/main.c b/main.c
+index 288519c..ab4e936 100644
+--- a/main.c
++++ b/main.c
+@@ -17,6 +17,14 @@ static void lv_linux_disp_init(void)
+
+ lv_linux_fbdev_set_file(disp, videocard);
+ }
++#elif LV_USE_LINUX_DRM
++static void lv_linux_disp_init(void)
++{
++ const char *videocard = lv_linux_get_video_card_node("/dev/dri/card0");
++ lv_display_t * disp = lv_linux_drm_create();
++
++ lv_linux_drm_set_file(disp, videocard, -1);
++}
+ #else
+ #error Unsupported configuration
+ #endif
+--
+2.43.0
+
diff --git a/meta-oe/recipes-graphics/lvgl/files/0006-Add-SDL2-example-support.patch b/meta-oe/recipes-graphics/lvgl/files/0006-Add-SDL2-example-support.patch
new file mode 100644
index 0000000000..691ee80b59
--- /dev/null
+++ b/meta-oe/recipes-graphics/lvgl/files/0006-Add-SDL2-example-support.patch
@@ -0,0 +1,69 @@
+From b202ce51f7b68c460fcd1b6d9c3ffa8aaf2baaf6 Mon Sep 17 00:00:00 2001
+From: Marek Vasut <marex@denx.de>
+Date: Tue, 12 Mar 2024 19:05:38 +0100
+Subject: [PATCH 6/6] Add SDL2 example support
+
+Extend the main.c to support both legacy fbdev, DRM/KMS, SDL2 initialization.
+The SDL2 window resolution can be configured using environment variables
+LV_VIDEO_WIDTH and LV_VIDEO_HEIGHT and defaults to 800 x 480 .
+
+To use legacy fbdev support, adjust lv_conf.h as follows:
+LV_USE_LINUX_FBDEV=1
+LV_USE_LINUX_DRM=0
+LV_USE_SDL=0
+
+To use DRM/KMS support, adjust lv_conf.h as follows:
+LV_USE_LINUX_FBDEV=0
+LV_USE_LINUX_DRM=1
+LV_USE_SDL=0
+
+To use SDL2 support, adjust lv_conf.h as follows:
+LV_USE_LINUX_FBDEV=0
+LV_USE_LINUX_DRM=0
+LV_USE_SDL=1
+
+Upstream-Status: Submitted [https://github.com/lvgl/lv_port_linux_frame_buffer/pull/47]
+Signed-off-by: Marek Vasut <marex@denx.de>
+---
+ CMakeLists.txt | 6 +++++-
+ main.c | 8 ++++++++
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index c1cfb7f..658193f 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -15,6 +15,10 @@ add_executable(main main.c mouse_cursor_icon.c)
+ include(${CMAKE_CURRENT_LIST_DIR}/lvgl/tests/FindLibDRM.cmake)
+ include_directories(${Libdrm_INCLUDE_DIRS})
+
+-target_link_libraries(main lvgl lvgl::examples lvgl::demos lvgl::thorvg ${SDL2_LIBRARIES} ${Libdrm_LIBRARIES} m pthread)
++find_package(SDL2)
++find_package(SDL2_image)
++include_directories(${SDL2_INCLUDE_DIRS} ${SDL2_IMAGE_INCLUDE_DIRS})
++
++target_link_libraries(main lvgl lvgl::examples lvgl::demos lvgl::thorvg ${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES} ${Libdrm_LIBRARIES} m pthread)
+ add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/main DEPENDS main)
+
+diff --git a/main.c b/main.c
+index ab4e936..4b66ebc 100644
+--- a/main.c
++++ b/main.c
+@@ -25,6 +25,14 @@ static void lv_linux_disp_init(void)
+
+ lv_linux_drm_set_file(disp, videocard, -1);
+ }
++#elif LV_USE_SDL
++static void lv_linux_disp_init(void)
++{
++ const int width = atoi(getenv("LV_VIDEO_WIDTH") ? : "800");
++ const int height = atoi(getenv("LV_VIDEO_HEIGHT") ? : "480");
++
++ lv_sdl_window_create(width, height);
++}
+ #else
+ #error Unsupported configuration
+ #endif
+--
+2.43.0
+
diff --git a/meta-oe/recipes-graphics/lvgl/lvgl-demo-fb_9.0.0.bb b/meta-oe/recipes-graphics/lvgl/lvgl-demo-fb_9.0.0.bb
index ee3d5ab204..70df822ccc 100644
--- a/meta-oe/recipes-graphics/lvgl/lvgl-demo-fb_9.0.0.bb
+++ b/meta-oe/recipes-graphics/lvgl/lvgl-demo-fb_9.0.0.bb
@@ -7,6 +7,12 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=802d3d83ae80ef5f343050bf96cce3a4 \
SRC_URI = "\
git://github.com/lvgl/lv_port_linux_frame_buffer.git;protocol=https;branch=master;name=demo \
git://github.com/lvgl/lvgl;protocol=https;branch=master;name=lvgl;subdir=git/lvgl \
+ file://0001-fix-drm-Default-to-XRGB8888-framebuffer.patch;patchdir=lvgl \
+ file://0002-fix-sdl-handle-both-LV_IMAGE_SRC_FILE-and-LV_IMAGE_S.patch;patchdir=lvgl \
+ file://0003-Make-fbdev-device-node-runtime-configurable-via-envi.patch \
+ file://0004-Factor-out-fbdev-initialization-code.patch \
+ file://0005-Add-DRM-KMS-example-support.patch \
+ file://0006-Add-SDL2-example-support.patch \
"
SRCREV_demo = "dccc6a1ca48372aa993dbea7a8e17dec6f42df6a"
SRCREV_lvgl = "e29d35b43c509b6d7189f5dac87139441669ae66"
@@ -26,23 +32,9 @@ S = "${WORKDIR}/git"
TARGET_CFLAGS += "-I${STAGING_INCDIR}/libdrm"
do_configure:prepend() {
- # Fix ARGB8888 base plane format misuse again
- sed -i 's@ARGB8888@XRGB8888@g' "${S}/lvgl/src/drivers/display/drm/lv_linux_drm.c"
-
- if [ "${LVGL_CONFIG_USE_DRM}" -eq 1 ] ; then
- # Add libdrm build dependency
- sed -i '/^target_link_libraries/ s@pthread@& drm@' "${S}/CMakeLists.txt"
- # Switch from fbdev to drm usage
- sed -i "s@lv_linux_fbdev_set_file.*@lv_linux_drm_set_file(disp, \"${LVGL_CONFIG_DRM_CARD}\", -1);@g" "${S}/main.c"
- sed -i 's@fbdev@drm@g' "${S}/main.c"
- fi
-
if [ "${LVGL_CONFIG_USE_SDL}" -eq 1 ] ; then
- # Add libsdl build dependency
- sed -i '/^target_link_libraries/ s@pthread@& SDL2 SDL2_image@' "${S}/CMakeLists.txt"
- # Switch from fbdev to sdl usage
- sed -i 's@lv_linux_fbdev_create()@lv_sdl_window_create(atoi(getenv("LV_VIDEO_WIDTH") ? : "800"), atoi(getenv("LV_VIDEO_HEIGHT") ? : "480"))@g' "${S}/main.c"
- sed -i '/lv_linux_fbdev_set_file/ d' "${S}/main.c"
+ # Add libsdl build dependency, SDL2_image has no cmake file
+ sed -i '/^target_link_libraries/ s@pthread@& SDL2_image@' "${S}/CMakeLists.txt"
fi
}
diff --git a/meta-oe/recipes-graphics/lvgl/lvgl_9.0.0.bb b/meta-oe/recipes-graphics/lvgl/lvgl_9.0.0.bb
index d147e89203..7f1f57a2b8 100644
--- a/meta-oe/recipes-graphics/lvgl/lvgl_9.0.0.bb
+++ b/meta-oe/recipes-graphics/lvgl/lvgl_9.0.0.bb
@@ -8,7 +8,11 @@ SUMMARY = "Light and Versatile Graphics Library"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENCE.txt;md5=bf1198c89ae87f043108cea62460b03a"
-SRC_URI = "git://github.com/lvgl/lvgl;protocol=https;branch=master"
+SRC_URI = "\
+ git://github.com/lvgl/lvgl;protocol=https;branch=master \
+ file://0001-fix-drm-Default-to-XRGB8888-framebuffer.patch \
+ file://0002-fix-sdl-handle-both-LV_IMAGE_SRC_FILE-and-LV_IMAGE_S.patch \
+ "
SRCREV = "e29d35b43c509b6d7189f5dac87139441669ae66"
PV .= "+git${SRCPV}"
@@ -22,11 +26,6 @@ ALLOW_EMPTY:${PN} = "1"
PACKAGECONFIG ??= "drm"
require lv-conf.inc
-do_configure:prepend() {
- # Fix ARGB8888 base plane format misuse again
- sed -i 's@ARGB8888@XRGB8888@g' "${S}/src/drivers/display/drm/lv_linux_drm.c"
-}
-
FILES:${PN}-dev += "\
${includedir}/${PN}/ \
${includedir}/${PN}/lvgl/ \