From 80b8c33f219d21b57b4cef0e2f149f471490cefa Mon Sep 17 00:00:00 2001 From: Liu Yi Date: Fri, 19 Jul 2024 18:10:58 +0800 Subject: [PATCH] ci(sdl): add sdl build to ci test (#6505) Signed-off-by: lhdjply Signed-off-by: Liu Yi --- .github/workflows/ccpp.yml | 3 +- scripts/install-prerequisites.sh | 2 +- src/draw/sdl/lv_draw_sdl.c | 4 +-- src/draw/sdl/lv_draw_sdl.h | 8 ----- src/drivers/sdl/lv_sdl_keyboard.c | 6 ++-- src/drivers/sdl/lv_sdl_mouse.c | 6 ++-- src/drivers/sdl/lv_sdl_mousewheel.c | 6 ++-- src/drivers/sdl/lv_sdl_private.h | 49 +++++++++++++++++++++++++++++ src/drivers/sdl/lv_sdl_window.c | 36 +++++++++------------ src/drivers/sdl/lv_sdl_window.h | 4 +-- tests/CMakeLists.txt | 20 ++++++++++++ tests/main.py | 4 +++ tests/src/lv_test_conf.h | 6 ++++ 13 files changed, 108 insertions(+), 46 deletions(-) create mode 100644 src/drivers/sdl/lv_sdl_private.h diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 86dc7310a7..c709f53bd9 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -17,7 +17,8 @@ jobs: build_option: ['OPTIONS_16BIT', 'OPTIONS_24BIT', 'OPTIONS_FULL_32BIT', - "OPTIONS_VG_LITE"] + 'OPTIONS_VG_LITE', + 'OPTIONS_SDL'] name: Build ${{ matrix.build_option }} steps: - uses: actions/checkout@v4 diff --git a/scripts/install-prerequisites.sh b/scripts/install-prerequisites.sh index 471da6ffb6..05d1f1a44e 100755 --- a/scripts/install-prerequisites.sh +++ b/scripts/install-prerequisites.sh @@ -9,7 +9,7 @@ sudo dpkg --add-architecture i386 sudo apt update sudo apt install gcc gcc-multilib g++-multilib ninja-build \ libpng-dev libjpeg-turbo8-dev libfreetype6-dev \ - libglew-dev libglfw3-dev \ + libglew-dev libglfw3-dev libsdl2-dev libsdl2-image-dev \ libpng-dev:i386 libjpeg-dev:i386 libfreetype6-dev:i386 \ ruby-full gcovr cmake python3 pngquant libinput-dev libxkbcommon-dev libdrm-dev pkg-config pip3 install pypng lz4 diff --git a/src/draw/sdl/lv_draw_sdl.c b/src/draw/sdl/lv_draw_sdl.c index 76bd8a4db3..44826d7be6 100644 --- a/src/draw/sdl/lv_draw_sdl.c +++ b/src/draw/sdl/lv_draw_sdl.c @@ -236,8 +236,8 @@ static bool draw_to_texture(lv_draw_sdl_unit_t * u, cache_data_t * data) } } else if(type == LV_IMAGE_SRC_VARIABLE) { - lv_image_dsc_t * lvd = image_dsc->src; - surface = SDL_CreateRGBSurfaceFrom(lvd->data, + lv_image_dsc_t * lvd = (lv_image_dsc_t *)image_dsc->src; + surface = SDL_CreateRGBSurfaceFrom((void *)lvd->data, lvd->header.w, lvd->header.h, LV_COLOR_FORMAT_GET_BPP(lvd->header.cf), lvd->header.stride, diff --git a/src/draw/sdl/lv_draw_sdl.h b/src/draw/sdl/lv_draw_sdl.h index b394ecca82..2f48b535bd 100644 --- a/src/draw/sdl/lv_draw_sdl.h +++ b/src/draw/sdl/lv_draw_sdl.h @@ -38,14 +38,6 @@ typedef struct { lv_cache_t * texture_cache; } lv_draw_sdl_unit_t; -#if LV_DRAW_SW_SHADOW_CACHE_SIZE -typedef struct { - uint8_t cache[LV_DRAW_SW_SHADOW_CACHE_SIZE * LV_DRAW_SW_SHADOW_CACHE_SIZE]; - int32_t cache_size; - int32_t cache_r; -} lv_draw_sw_shadow_cache_t; -#endif - /********************** * GLOBAL PROTOTYPES **********************/ diff --git a/src/drivers/sdl/lv_sdl_keyboard.c b/src/drivers/sdl/lv_sdl_keyboard.c index 191e958029..188e5cacb6 100644 --- a/src/drivers/sdl/lv_sdl_keyboard.c +++ b/src/drivers/sdl/lv_sdl_keyboard.c @@ -12,7 +12,7 @@ #include "../../indev/lv_indev.h" #include "../../core/lv_group.h" #include "../../stdlib/lv_string.h" -#include LV_SDL_INCLUDE_PATH +#include "lv_sdl_private.h" /********************* * DEFINES @@ -99,7 +99,7 @@ static void release_indev_cb(lv_event_t * e) } } -void _lv_sdl_keyboard_handler(SDL_Event * event) +void lv_sdl_keyboard_handler(SDL_Event * event) { uint32_t win_id = UINT32_MAX; switch(event->type) { @@ -113,7 +113,7 @@ void _lv_sdl_keyboard_handler(SDL_Event * event) return; } - lv_display_t * disp = _lv_sdl_get_disp_from_win_id(win_id); + lv_display_t * disp = lv_sdl_get_disp_from_win_id(win_id); /*Find a suitable indev*/ diff --git a/src/drivers/sdl/lv_sdl_mouse.c b/src/drivers/sdl/lv_sdl_mouse.c index 9e42480478..98b4f695f3 100644 --- a/src/drivers/sdl/lv_sdl_mouse.c +++ b/src/drivers/sdl/lv_sdl_mouse.c @@ -11,8 +11,8 @@ #include "../../core/lv_group.h" #include "../../stdlib/lv_string.h" +#include "lv_sdl_private.h" -#include LV_SDL_INCLUDE_PATH /********************* * DEFINES *********************/ @@ -97,7 +97,7 @@ static void release_indev_cb(lv_event_t * e) } } -void _lv_sdl_mouse_handler(SDL_Event * event) +void lv_sdl_mouse_handler(SDL_Event * event) { uint32_t win_id = UINT32_MAX; switch(event->type) { @@ -127,7 +127,7 @@ void _lv_sdl_mouse_handler(SDL_Event * event) return; } - lv_display_t * disp = _lv_sdl_get_disp_from_win_id(win_id); + lv_display_t * disp = lv_sdl_get_disp_from_win_id(win_id); /*Find a suitable indev*/ lv_indev_t * indev = lv_indev_get_next(NULL); diff --git a/src/drivers/sdl/lv_sdl_mousewheel.c b/src/drivers/sdl/lv_sdl_mousewheel.c index d38ced4748..0803126683 100644 --- a/src/drivers/sdl/lv_sdl_mousewheel.c +++ b/src/drivers/sdl/lv_sdl_mousewheel.c @@ -12,7 +12,7 @@ #include "../../core/lv_group.h" #include "../../indev/lv_indev_private.h" #include "../../stdlib/lv_string.h" -#include LV_SDL_INCLUDE_PATH +#include "lv_sdl_private.h" /********************* * DEFINES @@ -84,7 +84,7 @@ static void release_indev_cb(lv_event_t * e) } } -void _lv_sdl_mousewheel_handler(SDL_Event * event) +void lv_sdl_mousewheel_handler(SDL_Event * event) { uint32_t win_id = UINT32_MAX; switch(event->type) { @@ -99,7 +99,7 @@ void _lv_sdl_mousewheel_handler(SDL_Event * event) return; } - lv_display_t * disp = _lv_sdl_get_disp_from_win_id(win_id); + lv_display_t * disp = lv_sdl_get_disp_from_win_id(win_id); /*Find a suitable indev*/ lv_indev_t * indev = lv_indev_get_next(NULL); diff --git a/src/drivers/sdl/lv_sdl_private.h b/src/drivers/sdl/lv_sdl_private.h new file mode 100644 index 0000000000..1fd519bfa7 --- /dev/null +++ b/src/drivers/sdl/lv_sdl_private.h @@ -0,0 +1,49 @@ +/** + * @file lv_sdl_private.h + * + */ + +#ifndef LV_SDL_PRIVATE_H +#define LV_SDL_PRIVATE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ +#include "../../misc/lv_types.h" + +#if LV_USE_SDL + +#include LV_SDL_INCLUDE_PATH + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +void lv_sdl_keyboard_handler(SDL_Event * event); +void lv_sdl_mouse_handler(SDL_Event * event); +void lv_sdl_mousewheel_handler(SDL_Event * event); +lv_display_t * lv_sdl_get_disp_from_win_id(uint32_t win_id); + +/********************** + * MACROS + **********************/ + +#endif /*LV_USE_SDL*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV_SDL_PRIVATE_H */ diff --git a/src/drivers/sdl/lv_sdl_window.c b/src/drivers/sdl/lv_sdl_window.c index 1908c04b28..35e834f072 100644 --- a/src/drivers/sdl/lv_sdl_window.c +++ b/src/drivers/sdl/lv_sdl_window.c @@ -22,7 +22,7 @@ #include #define SDL_MAIN_HANDLED /*To fix SDL's "undefined reference to WinMain" issue*/ -#include LV_SDL_INCLUDE_PATH +#include "lv_sdl_private.h" #if LV_USE_DRAW_SDL #include @@ -31,6 +31,7 @@ /********************* * DEFINES *********************/ +#define lv_deinit_in_progress LV_GLOBAL_DEFAULT()->deinit_in_progress /********************** * TYPEDEFS @@ -61,30 +62,19 @@ static void window_create(lv_display_t * disp); static void window_update(lv_display_t * disp); #if LV_USE_DRAW_SDL == 0 static void texture_resize(lv_display_t * disp); + static void * sdl_draw_buf_realloc_aligned(void * ptr, size_t new_size); + static void sdl_draw_buf_free(void * ptr); #endif -static void * sdl_draw_buf_realloc_aligned(void * ptr, size_t new_size); -static void sdl_draw_buf_free(void * ptr); static void sdl_event_handler(lv_timer_t * t); static void release_disp_cb(lv_event_t * e); - -/*********************** - * GLOBAL PROTOTYPES - ***********************/ -lv_display_t * _lv_sdl_get_disp_from_win_id(uint32_t win_id); -void _lv_sdl_mouse_handler(SDL_Event * event); -void _lv_sdl_mousewheel_handler(SDL_Event * event); -void _lv_sdl_keyboard_handler(SDL_Event * event); static void res_chg_event_cb(lv_event_t * e); -static bool inited = false; - /********************** * STATIC VARIABLES **********************/ +static bool inited = false; static lv_timer_t * event_handler_timer; -#define lv_deinit_in_progress LV_GLOBAL_DEFAULT()->deinit_in_progress - /********************** * MACROS **********************/ @@ -175,7 +165,7 @@ uint8_t lv_sdl_window_get_zoom(lv_display_t * disp) return dsc->zoom; } -lv_display_t * _lv_sdl_get_disp_from_win_id(uint32_t win_id) +lv_display_t * lv_sdl_get_disp_from_win_id(uint32_t win_id) { lv_display_t * disp = lv_display_get_next(NULL); if(win_id == UINT32_MAX) return disp; @@ -202,7 +192,7 @@ void * lv_sdl_window_get_renderer(lv_display_t * disp) return dsc->renderer; } -void lv_sdl_quit() +void lv_sdl_quit(void) { if(inited) { SDL_Quit(); @@ -291,6 +281,8 @@ static void flush_cb(lv_display_t * disp, const lv_area_t * area, uint8_t * px_m window_update(disp); } #else + LV_UNUSED(area); + LV_UNUSED(px_map); if(lv_display_flush_is_last(disp)) { window_update(disp); } @@ -311,14 +303,14 @@ static void sdl_event_handler(lv_timer_t * t) /*Refresh handling*/ SDL_Event event; while(SDL_PollEvent(&event)) { - _lv_sdl_mouse_handler(&event); + lv_sdl_mouse_handler(&event); #if LV_SDL_MOUSEWHEEL_MODE == LV_SDL_MOUSEWHEEL_MODE_ENCODER - _lv_sdl_mousewheel_handler(&event); + lv_sdl_mousewheel_handler(&event); #endif - _lv_sdl_keyboard_handler(&event); + lv_sdl_keyboard_handler(&event); if(event.type == SDL_WINDOWEVENT) { - lv_display_t * disp = _lv_sdl_get_disp_from_win_id(event.window.windowID); + lv_display_t * disp = lv_sdl_get_disp_from_win_id(event.window.windowID); if(disp == NULL) continue; lv_sdl_window_t * dsc = lv_display_get_driver_data(disp); @@ -439,7 +431,6 @@ static void texture_resize(lv_display_t * disp) SDL_TEXTUREACCESS_STATIC, disp->hor_res, disp->ver_res); SDL_SetTextureBlendMode(dsc->texture, SDL_BLENDMODE_BLEND); } -#endif static void * sdl_draw_buf_realloc_aligned(void * ptr, size_t new_size) { @@ -465,6 +456,7 @@ static void sdl_draw_buf_free(void * ptr) _aligned_free(ptr); #endif /* _WIN32 */ } +#endif static void res_chg_event_cb(lv_event_t * e) { diff --git a/src/drivers/sdl/lv_sdl_window.h b/src/drivers/sdl/lv_sdl_window.h index 4a3901fdc6..cbe11ca8af 100644 --- a/src/drivers/sdl/lv_sdl_window.h +++ b/src/drivers/sdl/lv_sdl_window.h @@ -43,13 +43,11 @@ void lv_sdl_window_set_zoom(lv_display_t * disp, uint8_t zoom); uint8_t lv_sdl_window_get_zoom(lv_display_t * disp); -lv_display_t * _lv_sdl_get_disp_from_win_id(uint32_t win_id); - void lv_sdl_window_set_title(lv_display_t * disp, const char * title); void * lv_sdl_window_get_renderer(lv_display_t * disp); -void lv_sdl_quit(); +void lv_sdl_quit(void); /********************** * MACROS diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index bdb440de1c..3651ac07ad 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -69,6 +69,10 @@ set(LVGL_TEST_OPTIONS_VG_LITE -Wno-dangling-pointer # workaround for thorvg dangling-pointer warning ) +set(LVGL_TEST_OPTIONS_SDL + -DLV_TEST_OPTION=7 +) + set(LVGL_TEST_OPTIONS_MINIMAL_MONOCHROME -DLV_TEST_OPTION=1 ) @@ -106,6 +110,8 @@ set(LVGL_TEST_OPTIONS_TEST_DEFHEAP if (OPTIONS_VG_LITE) set (BUILD_OPTIONS ${LVGL_TEST_OPTIONS_VG_LITE}) +elseif (OPTIONS_SDL) + set (BUILD_OPTIONS ${LVGL_TEST_OPTIONS_SDL}) elseif (OPTIONS_NORMAL_8BIT) set (BUILD_OPTIONS ${LVGL_TEST_OPTIONS_NORMAL_8BIT}) elseif (OPTIONS_16BIT) @@ -330,6 +336,14 @@ include_directories(${PNG_INCLUDE_DIR}) find_package(Freetype REQUIRED) include_directories(${FREETYPE_INCLUDE_DIRS}) +if(OPTIONS_SDL) + find_package(SDL2 REQUIRED) + find_library(NAME SDL2_image REQUIRED) + link_libraries(SDL2_image) + include_directories(${SDL2_INCLUDE_DIRS}) + include_directories(${SDL2_IMAGE_INCLUDE_DIRS}) +endif() + # libinput is required for the libinput device driver test case find_package(Libinput OPTIONAL_COMPONENTS) if ($ENV{NON_AMD64_BUILD}) @@ -446,6 +460,12 @@ foreach( test_case_fname ${TEST_CASE_FILES} ) pthread ${TEST_LIBS}) + if(OPTIONS_SDL) + target_link_libraries(${test_name} PRIVATE + ${SDL_LIBRARY} + ${SDL_IMAGE_LIBRARY}) + endif() + if (NOT $ENV{NON_AMD64_BUILD}) target_link_libraries(${test_name} PRIVATE ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} glfw) diff --git a/tests/main.py b/tests/main.py index 0082403249..c0bab8df5e 100755 --- a/tests/main.py +++ b/tests/main.py @@ -6,6 +6,7 @@ import shutil import subprocess import sys import os +import platform from itertools import chain from pathlib import Path @@ -24,6 +25,9 @@ build_only_options = { 'OPTIONS_VG_LITE': 'VG-Lite simulator with full config, 32 bit color depth', } +if platform.system() != 'Windows': + build_only_options['OPTIONS_SDL'] = 'SDL simulator with full config, 32 bit color depth' + test_options = { 'OPTIONS_TEST_SYSHEAP': 'Test config, system heap, 32 bit color depth', 'OPTIONS_TEST_DEFHEAP': 'Test config, LVGL heap, 32 bit color depth', diff --git a/tests/src/lv_test_conf.h b/tests/src/lv_test_conf.h index 7c957c21e0..6ff7f50503 100644 --- a/tests/src/lv_test_conf.h +++ b/tests/src/lv_test_conf.h @@ -72,6 +72,12 @@ typedef void * lv_user_data_t; #define LV_DPI_DEF 160 #include "lv_test_conf_vg_lite.h" #include "lv_test_conf_full.h" +#elif LV_TEST_OPTION == 7 +#define LV_COLOR_DEPTH 32 +#define LV_DPI_DEF 160 +#define LV_USE_DRAW_SDL 1 +#define LV_USE_SDL 1 +#include "lv_test_conf_full.h" #elif LV_TEST_OPTION == 4 #define LV_COLOR_DEPTH 24 #define LV_DPI_DEF 120