treewide: add Wayland and SDL2 backends

This commit is contained in:
Dylan Van Assche 2025-11-29 21:37:51 +01:00 committed by Johannes Marbach
parent 271cdf8534
commit e69bcf5dc2
11 changed files with 44 additions and 3 deletions

View file

@ -56,6 +56,9 @@ On distributions based on systemd, `unl0kr` can be used as a [password agent](ht
# systemd-ask-password --no-tty # Unl0kr is started # systemd-ask-password --no-tty # Unl0kr is started
``` ```
**Note**: SDL2 can be used as display backend for development purposes by setting the Meson option `developer` and use `backend=sdl` in the configuration file.
Other uses besides development are not supported by Buffybox.
## Packaging ## Packaging
Create a full package: Create a full package:

View file

@ -115,6 +115,7 @@ hostname=mydevice
- [libinput] - Input device handling - [libinput] - Input device handling
- [libudev] - Device enumeration - [libudev] - Device enumeration
- [libxkbcommon] - Keyboard layout support - [libxkbcommon] - Keyboard layout support
- [libdrm] - DRM backend
- evdev kernel module - evdev kernel module
## Backends ## Backends

View file

@ -1159,7 +1159,8 @@
*==================*/ *==================*/
/** Use SDL to open window on PC and handle mouse and keyboard. */ /** Use SDL to open window on PC and handle mouse and keyboard. */
#define LV_USE_SDL 0 // LV_USE_SDL is defined dynamically via meson.build so we must not define it here
// #define LV_USE_SDL 0
#if LV_USE_SDL #if LV_USE_SDL
#define LV_SDL_INCLUDE_PATH <SDL2/SDL.h> #define LV_SDL_INCLUDE_PATH <SDL2/SDL.h>
#define LV_SDL_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT /**< LV_DISPLAY_RENDER_MODE_DIRECT is recommended for best performance */ #define LV_SDL_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT /**< LV_DISPLAY_RENDER_MODE_DIRECT is recommended for best performance */
@ -1231,6 +1232,7 @@
#endif #endif
/** Driver for /dev/dri/card */ /** Driver for /dev/dri/card */
// LV_USE_LINUX_DRM is defined dynamically via meson.build so we must not define it here
//#define LV_USE_LINUX_DRM 0 //#define LV_USE_LINUX_DRM 0
#if LV_USE_LINUX_DRM #if LV_USE_LINUX_DRM

View file

@ -23,6 +23,13 @@ else
f0rmz_args += '-DLV_USE_LINUX_DRM=0' f0rmz_args += '-DLV_USE_LINUX_DRM=0'
endif endif
if deplibsdl.found()
f0rmz_dependencies += deplibsdl
f0rmz_args += '-DLV_USE_SDL=1'
else
f0rmz_args += '-DLV_USE_SDL=0'
endif
executable('f0rmz', executable('f0rmz',
include_directories: common_include_dirs, include_directories: common_include_dirs,
sources: f0rmz_sources + shared_sources + shared_sources_ul_f0 + squeek2lvgl_sources + lvgl_sources, sources: f0rmz_sources + shared_sources + shared_sources_ul_f0 + squeek2lvgl_sources + lvgl_sources,

View file

@ -14,6 +14,7 @@ depinih = dependency('inih')
deplibinput = dependency('libinput') deplibinput = dependency('libinput')
deplibudev = dependency('libudev') deplibudev = dependency('libudev')
depxkbcommon = dependency('xkbcommon') # For unl0kr and f0rmz only depxkbcommon = dependency('xkbcommon') # For unl0kr and f0rmz only
deplibsdl = dependency('sdl2', required: get_option('developer'))
if get_option('man') if get_option('man')
depscdoc = dependency('scdoc', native: true) depscdoc = dependency('scdoc', native: true)

View file

@ -1,4 +1,5 @@
option('with-drm', type: 'feature', value: 'auto', description: 'Enable DRM backend') option('with-drm', type: 'feature', value: 'auto', description: 'Enable DRM backend')
option('developer', type: 'feature', value: 'auto', description: 'Enable developer features')
option('man', type: 'boolean', value: true, description: 'Install manual pages') option('man', type: 'boolean', value: true, description: 'Install manual pages')
option('systemd-buffyboard-service', type: 'feature', value: 'auto', description: 'Install systemd service file for buffyboard') option('systemd-buffyboard-service', type: 'feature', value: 'auto', description: 'Install systemd service file for buffyboard')
option('systemd-password-agent', type: 'feature', value: 'auto', description: 'Build a systemd password agent for touchscreens') option('systemd-password-agent', type: 'feature', value: 'auto', description: 'Build a systemd password agent for touchscreens')

View file

@ -16,6 +16,9 @@ static const char *backends[] = {
#endif #endif
#if LV_USE_LINUX_DRM #if LV_USE_LINUX_DRM
"drm", "drm",
#endif
#if LV_USE_SDL
"sdl",
#endif #endif
NULL NULL
}; };

View file

@ -9,7 +9,7 @@
#include "lv_conf.h" #include "lv_conf.h"
#if LV_USE_LINUX_FBDEV == 0 && LV_USE_LINUX_DRM == 0 #if LV_USE_LINUX_FBDEV == 0 && LV_USE_LINUX_DRM == 0 && LV_USE_SDL == 0
#error Neither of graphical backends is enabled #error Neither of graphical backends is enabled
#endif #endif
@ -26,6 +26,9 @@ typedef enum {
#if LV_USE_LINUX_DRM #if LV_USE_LINUX_DRM
BBX_BACKENDS_BACKEND_DRM, BBX_BACKENDS_BACKEND_DRM,
#endif #endif
#if LV_USE_SDL
BBX_BACKENDS_BACKEND_SDL,
#endif
} bbx_backends_backend_id_t; } bbx_backends_backend_id_t;
/** /**

View file

@ -63,6 +63,17 @@ lv_display_t *bbx_display_create(bbx_backends_backend_id_t backend_id, bbx_displ
break; break;
#endif /* LV_USE_LINUX_DRM */ #endif /* LV_USE_LINUX_DRM */
#if LV_USE_SDL
case BBX_BACKENDS_BACKEND_SDL:
bbx_log(BBX_LOG_LEVEL_VERBOSE, "Using SDL2 backend");
disp = lv_sdl_window_create(config->hor_res > 0 ? config->hor_res: 800, config->ver_res > 0 ? config->ver_res: 480);
if (!disp) {
bbx_log(BBX_LOG_LEVEL_ERROR, "Failed to create SDL2 display");
return NULL;
}
break;
#endif /* LV_USE_SDL */
default: default:
bbx_log(BBX_LOG_LEVEL_ERROR, "Unable to find suitable backend"); bbx_log(BBX_LOG_LEVEL_ERROR, "Unable to find suitable backend");
return NULL; return NULL;

View file

@ -1159,7 +1159,8 @@
*==================*/ *==================*/
/** Use SDL to open window on PC and handle mouse and keyboard. */ /** Use SDL to open window on PC and handle mouse and keyboard. */
#define LV_USE_SDL 0 // LV_USE_SDL is defined dynamically via meson.build so we must not define it here
// #define LV_USE_SDL 0
#if LV_USE_SDL #if LV_USE_SDL
#define LV_SDL_INCLUDE_PATH <SDL2/SDL.h> #define LV_SDL_INCLUDE_PATH <SDL2/SDL.h>
#define LV_SDL_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT /**< LV_DISPLAY_RENDER_MODE_DIRECT is recommended for best performance */ #define LV_SDL_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT /**< LV_DISPLAY_RENDER_MODE_DIRECT is recommended for best performance */
@ -1231,6 +1232,7 @@
#endif #endif
/** Driver for /dev/dri/card */ /** Driver for /dev/dri/card */
// LV_USE_LINUX_DRM is defined dynamically via meson.build so we must not define it here
//#define LV_USE_LINUX_DRM 0 //#define LV_USE_LINUX_DRM 0
#if LV_USE_LINUX_DRM #if LV_USE_LINUX_DRM

View file

@ -23,6 +23,13 @@ else
unl0kr_args += '-DLV_USE_LINUX_DRM=0' unl0kr_args += '-DLV_USE_LINUX_DRM=0'
endif endif
if deplibsdl.found()
unl0kr_dependencies += deplibsdl
unl0kr_args += '-DLV_USE_SDL=1'
else
unl0kr_args += '-DLV_USE_SDL=0'
endif
executable('unl0kr', executable('unl0kr',
include_directories: common_include_dirs, include_directories: common_include_dirs,
sources: unl0kr_sources + shared_sources + shared_sources_ul_f0 + squeek2lvgl_sources + lvgl_sources, sources: unl0kr_sources + shared_sources + shared_sources_ul_f0 + squeek2lvgl_sources + lvgl_sources,