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:
3
.github/workflows/ccpp.yml
vendored
3
.github/workflows/ccpp.yml
vendored
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
**********************/
|
||||
|
||||
@@ -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*/
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
49
src/drivers/sdl/lv_sdl_private.h
Normal file
49
src/drivers/sdl/lv_sdl_private.h
Normal 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 */
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user