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',
'OPTIONS_24BIT',
'OPTIONS_FULL_32BIT',
"OPTIONS_VG_LITE"]
'OPTIONS_VG_LITE',
'OPTIONS_SDL']
name: Build ${{ matrix.build_option }}
steps:
- uses: actions/checkout@v4

View File

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

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) {
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,

View File

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

View File

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

View File

@@ -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);

View File

@@ -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);

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>
#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 <SDL2/SDL_image.h>
@@ -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)
{

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);
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

View File

@@ -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)

View File

@@ -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',

View File

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