ci(sdl): add sdl build to ci test (#6505)

Signed-off-by: lhdjply <lhdjply@126.com>
Signed-off-by: Liu Yi <lhdjply@126.com>
This commit is contained in:
Liu Yi
2024-07-19 18:10:58 +08:00
committed by GitHub
parent 790aa5a529
commit 80b8c33f21
13 changed files with 108 additions and 46 deletions

View File

@@ -17,7 +17,8 @@ jobs:
build_option: ['OPTIONS_16BIT', build_option: ['OPTIONS_16BIT',
'OPTIONS_24BIT', 'OPTIONS_24BIT',
'OPTIONS_FULL_32BIT', 'OPTIONS_FULL_32BIT',
"OPTIONS_VG_LITE"] 'OPTIONS_VG_LITE',
'OPTIONS_SDL']
name: Build ${{ matrix.build_option }} name: Build ${{ matrix.build_option }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4

View File

@@ -9,7 +9,7 @@ sudo dpkg --add-architecture i386
sudo apt update sudo apt update
sudo apt install gcc gcc-multilib g++-multilib ninja-build \ sudo apt install gcc gcc-multilib g++-multilib ninja-build \
libpng-dev libjpeg-turbo8-dev libfreetype6-dev \ 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 \ libpng-dev:i386 libjpeg-dev:i386 libfreetype6-dev:i386 \
ruby-full gcovr cmake python3 pngquant libinput-dev libxkbcommon-dev libdrm-dev pkg-config ruby-full gcovr cmake python3 pngquant libinput-dev libxkbcommon-dev libdrm-dev pkg-config
pip3 install pypng lz4 pip3 install pypng lz4

View File

@@ -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) { else if(type == LV_IMAGE_SRC_VARIABLE) {
lv_image_dsc_t * lvd = image_dsc->src; lv_image_dsc_t * lvd = (lv_image_dsc_t *)image_dsc->src;
surface = SDL_CreateRGBSurfaceFrom(lvd->data, surface = SDL_CreateRGBSurfaceFrom((void *)lvd->data,
lvd->header.w, lvd->header.h, lvd->header.w, lvd->header.h,
LV_COLOR_FORMAT_GET_BPP(lvd->header.cf), LV_COLOR_FORMAT_GET_BPP(lvd->header.cf),
lvd->header.stride, lvd->header.stride,

View File

@@ -38,14 +38,6 @@ typedef struct {
lv_cache_t * texture_cache; lv_cache_t * texture_cache;
} lv_draw_sdl_unit_t; } 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 * GLOBAL PROTOTYPES
**********************/ **********************/

View File

@@ -12,7 +12,7 @@
#include "../../indev/lv_indev.h" #include "../../indev/lv_indev.h"
#include "../../core/lv_group.h" #include "../../core/lv_group.h"
#include "../../stdlib/lv_string.h" #include "../../stdlib/lv_string.h"
#include LV_SDL_INCLUDE_PATH #include "lv_sdl_private.h"
/********************* /*********************
* DEFINES * 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; uint32_t win_id = UINT32_MAX;
switch(event->type) { switch(event->type) {
@@ -113,7 +113,7 @@ void _lv_sdl_keyboard_handler(SDL_Event * event)
return; 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*/ /*Find a suitable indev*/

View File

@@ -11,8 +11,8 @@
#include "../../core/lv_group.h" #include "../../core/lv_group.h"
#include "../../stdlib/lv_string.h" #include "../../stdlib/lv_string.h"
#include "lv_sdl_private.h"
#include LV_SDL_INCLUDE_PATH
/********************* /*********************
* DEFINES * 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; uint32_t win_id = UINT32_MAX;
switch(event->type) { switch(event->type) {
@@ -127,7 +127,7 @@ void _lv_sdl_mouse_handler(SDL_Event * event)
return; 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*/ /*Find a suitable indev*/
lv_indev_t * indev = lv_indev_get_next(NULL); lv_indev_t * indev = lv_indev_get_next(NULL);

View File

@@ -12,7 +12,7 @@
#include "../../core/lv_group.h" #include "../../core/lv_group.h"
#include "../../indev/lv_indev_private.h" #include "../../indev/lv_indev_private.h"
#include "../../stdlib/lv_string.h" #include "../../stdlib/lv_string.h"
#include LV_SDL_INCLUDE_PATH #include "lv_sdl_private.h"
/********************* /*********************
* DEFINES * 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; uint32_t win_id = UINT32_MAX;
switch(event->type) { switch(event->type) {
@@ -99,7 +99,7 @@ void _lv_sdl_mousewheel_handler(SDL_Event * event)
return; 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*/ /*Find a suitable indev*/
lv_indev_t * indev = lv_indev_get_next(NULL); lv_indev_t * indev = lv_indev_get_next(NULL);

View File

@@ -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 */

View File

@@ -22,7 +22,7 @@
#include <stdlib.h> #include <stdlib.h>
#define SDL_MAIN_HANDLED /*To fix SDL's "undefined reference to WinMain" issue*/ #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 #if LV_USE_DRAW_SDL
#include <SDL2/SDL_image.h> #include <SDL2/SDL_image.h>
@@ -31,6 +31,7 @@
/********************* /*********************
* DEFINES * DEFINES
*********************/ *********************/
#define lv_deinit_in_progress LV_GLOBAL_DEFAULT()->deinit_in_progress
/********************** /**********************
* TYPEDEFS * TYPEDEFS
@@ -61,30 +62,19 @@ static void window_create(lv_display_t * disp);
static void window_update(lv_display_t * disp); static void window_update(lv_display_t * disp);
#if LV_USE_DRAW_SDL == 0 #if LV_USE_DRAW_SDL == 0
static void texture_resize(lv_display_t * disp); 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 #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 sdl_event_handler(lv_timer_t * t);
static void release_disp_cb(lv_event_t * e); 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 void res_chg_event_cb(lv_event_t * e);
static bool inited = false;
/********************** /**********************
* STATIC VARIABLES * STATIC VARIABLES
**********************/ **********************/
static bool inited = false;
static lv_timer_t * event_handler_timer; static lv_timer_t * event_handler_timer;
#define lv_deinit_in_progress LV_GLOBAL_DEFAULT()->deinit_in_progress
/********************** /**********************
* MACROS * MACROS
**********************/ **********************/
@@ -175,7 +165,7 @@ uint8_t lv_sdl_window_get_zoom(lv_display_t * disp)
return dsc->zoom; 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); lv_display_t * disp = lv_display_get_next(NULL);
if(win_id == UINT32_MAX) return disp; if(win_id == UINT32_MAX) return disp;
@@ -202,7 +192,7 @@ void * lv_sdl_window_get_renderer(lv_display_t * disp)
return dsc->renderer; return dsc->renderer;
} }
void lv_sdl_quit() void lv_sdl_quit(void)
{ {
if(inited) { if(inited) {
SDL_Quit(); 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); window_update(disp);
} }
#else #else
LV_UNUSED(area);
LV_UNUSED(px_map);
if(lv_display_flush_is_last(disp)) { if(lv_display_flush_is_last(disp)) {
window_update(disp); window_update(disp);
} }
@@ -311,14 +303,14 @@ static void sdl_event_handler(lv_timer_t * t)
/*Refresh handling*/ /*Refresh handling*/
SDL_Event event; SDL_Event event;
while(SDL_PollEvent(&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 #if LV_SDL_MOUSEWHEEL_MODE == LV_SDL_MOUSEWHEEL_MODE_ENCODER
_lv_sdl_mousewheel_handler(&event); lv_sdl_mousewheel_handler(&event);
#endif #endif
_lv_sdl_keyboard_handler(&event); lv_sdl_keyboard_handler(&event);
if(event.type == SDL_WINDOWEVENT) { 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; if(disp == NULL) continue;
lv_sdl_window_t * dsc = lv_display_get_driver_data(disp); 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_TEXTUREACCESS_STATIC, disp->hor_res, disp->ver_res);
SDL_SetTextureBlendMode(dsc->texture, SDL_BLENDMODE_BLEND); SDL_SetTextureBlendMode(dsc->texture, SDL_BLENDMODE_BLEND);
} }
#endif
static void * sdl_draw_buf_realloc_aligned(void * ptr, size_t new_size) 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); _aligned_free(ptr);
#endif /* _WIN32 */ #endif /* _WIN32 */
} }
#endif
static void res_chg_event_cb(lv_event_t * e) static void res_chg_event_cb(lv_event_t * e)
{ {

View File

@@ -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); 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_set_title(lv_display_t * disp, const char * title);
void * lv_sdl_window_get_renderer(lv_display_t * disp); void * lv_sdl_window_get_renderer(lv_display_t * disp);
void lv_sdl_quit(); void lv_sdl_quit(void);
/********************** /**********************
* MACROS * MACROS

View File

@@ -69,6 +69,10 @@ set(LVGL_TEST_OPTIONS_VG_LITE
-Wno-dangling-pointer # workaround for thorvg dangling-pointer warning -Wno-dangling-pointer # workaround for thorvg dangling-pointer warning
) )
set(LVGL_TEST_OPTIONS_SDL
-DLV_TEST_OPTION=7
)
set(LVGL_TEST_OPTIONS_MINIMAL_MONOCHROME set(LVGL_TEST_OPTIONS_MINIMAL_MONOCHROME
-DLV_TEST_OPTION=1 -DLV_TEST_OPTION=1
) )
@@ -106,6 +110,8 @@ set(LVGL_TEST_OPTIONS_TEST_DEFHEAP
if (OPTIONS_VG_LITE) if (OPTIONS_VG_LITE)
set (BUILD_OPTIONS ${LVGL_TEST_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) elseif (OPTIONS_NORMAL_8BIT)
set (BUILD_OPTIONS ${LVGL_TEST_OPTIONS_NORMAL_8BIT}) set (BUILD_OPTIONS ${LVGL_TEST_OPTIONS_NORMAL_8BIT})
elseif (OPTIONS_16BIT) elseif (OPTIONS_16BIT)
@@ -330,6 +336,14 @@ include_directories(${PNG_INCLUDE_DIR})
find_package(Freetype REQUIRED) find_package(Freetype REQUIRED)
include_directories(${FREETYPE_INCLUDE_DIRS}) 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 # libinput is required for the libinput device driver test case
find_package(Libinput OPTIONAL_COMPONENTS) find_package(Libinput OPTIONAL_COMPONENTS)
if ($ENV{NON_AMD64_BUILD}) if ($ENV{NON_AMD64_BUILD})
@@ -446,6 +460,12 @@ foreach( test_case_fname ${TEST_CASE_FILES} )
pthread pthread
${TEST_LIBS}) ${TEST_LIBS})
if(OPTIONS_SDL)
target_link_libraries(${test_name} PRIVATE
${SDL_LIBRARY}
${SDL_IMAGE_LIBRARY})
endif()
if (NOT $ENV{NON_AMD64_BUILD}) if (NOT $ENV{NON_AMD64_BUILD})
target_link_libraries(${test_name} PRIVATE target_link_libraries(${test_name} PRIVATE
${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} glfw) ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} glfw)

View File

@@ -6,6 +6,7 @@ import shutil
import subprocess import subprocess
import sys import sys
import os import os
import platform
from itertools import chain from itertools import chain
from pathlib import Path from pathlib import Path
@@ -24,6 +25,9 @@ build_only_options = {
'OPTIONS_VG_LITE': 'VG-Lite simulator with full config, 32 bit color depth', '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 = { test_options = {
'OPTIONS_TEST_SYSHEAP': 'Test config, system heap, 32 bit color depth', 'OPTIONS_TEST_SYSHEAP': 'Test config, system heap, 32 bit color depth',
'OPTIONS_TEST_DEFHEAP': 'Test config, LVGL heap, 32 bit color depth', 'OPTIONS_TEST_DEFHEAP': 'Test config, LVGL heap, 32 bit color depth',

View File

@@ -72,6 +72,12 @@ typedef void * lv_user_data_t;
#define LV_DPI_DEF 160 #define LV_DPI_DEF 160
#include "lv_test_conf_vg_lite.h" #include "lv_test_conf_vg_lite.h"
#include "lv_test_conf_full.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 #elif LV_TEST_OPTION == 4
#define LV_COLOR_DEPTH 24 #define LV_COLOR_DEPTH 24
#define LV_DPI_DEF 120 #define LV_DPI_DEF 120