add lvgl wasm.
All checks were successful
Deploy / Build (push) Successful in 5m3s

This commit is contained in:
luocai 2024-11-22 15:48:17 +08:00
parent d37c1a2d20
commit 47cd37a415
6 changed files with 1436 additions and 1 deletions

View File

@ -7,7 +7,9 @@
"${workspaceFolder}/build/_deps/kylin-src/Universal", "${workspaceFolder}/build/_deps/kylin-src/Universal",
"/opt/Libraries/boost_1_86_0/include", "/opt/Libraries/boost_1_86_0/include",
"/opt/Libraries/wt-4.11.1/include", "/opt/Libraries/wt-4.11.1/include",
"/opt/Libraries/ZLMediaKit/include" "/opt/Libraries/ZLMediaKit/include",
"build/LvglApplication",
"/home/amass/emsdk/upstream/emscripten/system/include"
], ],
"defines": [], "defines": [],
"compilerPath": "/usr/bin/gcc", "compilerPath": "/usr/bin/gcc",

View File

@ -0,0 +1,44 @@
cmake_minimum_required(VERSION 3.17)
project(LvglApplication)
find_package(SDL2 REQUIRED)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -s USE_SDL=2")
# 使使wasm
set(CMAKE_EXECUTABLE_SUFFIX ".html")
add_executable(lvglapp
main.cpp
)
target_link_options(lvglapp
PRIVATE --shell-file=${CMAKE_CURRENT_SOURCE_DIR}/lvgl_shell.html
)
include(FetchContent)
FetchContent_Declare(
lvgl
GIT_REPOSITORY https://github.com/lvgl/lvgl.git
GIT_TAG v9.2.2
SOURCE_DIR lvgl
)
set(LV_CONF_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lv_conf.h)
set(LV_CONF_BUILD_DISABLE_EXAMPLES ON)
# set(LV_CONF_BUILD_DISABLE_DEMOS ON)
FetchContent_MakeAvailable(lvgl)
target_include_directories(lvglapp
PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
)
# sudo apt-get install libsdl2-dev
target_link_libraries(lvglapp
PRIVATE lvgl::demos
PRIVATE lvgl::lvgl
PRIVATE lvgl::thorvg
PRIVATE embind
PRIVATE SDL2
)

1261
LvglApplication/lv_conf.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,54 @@
<html>
<head>
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, shrink-to-fit=no'/>
<style type="text/css">
html, body {
margin: 0;
width: 100%;
height: 100%;
min-width: 100%;
min-height: 100%;
}
body {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
#output {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<p id="output">
<canvas id="canvas"></canvas>
</p>
<script>
var siteURL = new URL(window.location.href);
var w = siteURL.searchParams.get("w") || "800";
var h = siteURL.searchParams.get("h") || "480";
var canvas = document.getElementById('canvas');
canvas.setAttribute("width", w);
canvas.setAttribute("height", h);
console.log("Requested " + w + "x" + h + " px");
var Module = {
print: function(text) {
console.log(text);
},
printErr: function(text) {
console.error(text);
},
canvas: (function() {
return canvas;
})(),
arguments: [ siteURL.searchParams.get("w") || "800", siteURL.searchParams.get("h") || "480", siteURL.searchParams.get("example") ?? "default" ]
};
window.addEventListener("click", () => window.focus());
</script>
{{{ SCRIPT }}}
</body>
</html>

65
LvglApplication/main.cpp Normal file
View File

@ -0,0 +1,65 @@
#include <SDL2/SDL.h>
#include <emscripten.h>
#include <emscripten/bind.h>
#include <iostream>
#include <lvgl/lvgl.h>
#include <stdlib.h>
#include <unistd.h>
using namespace emscripten;
void setCanvasSize(int width, int height) {
std::cout << "canvas size: " << width << "*" << height << std::endl;
}
EMSCRIPTEN_BINDINGS(lvglapp) {
function("setCanvasSize", &setCanvasSize);
}
int monitor_hor_res, monitor_ver_res;
static void hal_init(void);
extern "C" {
void lv_demo_widgets(void);
void do_loop();
}
int main(int argc, char **argv) {
monitor_hor_res = atoi(argv[1]);
monitor_ver_res = atoi(argv[2]);
printf("Starting with screen resolution of %dx%d px\n", monitor_hor_res, monitor_ver_res);
lv_init();
hal_init();
lv_demo_widgets();
emscripten_set_main_loop(do_loop, -1, true);
return 0;
}
void do_loop() {
/* Periodically call the lv_task handler.
* It could be done in a timer interrupt or an OS task too.*/
lv_task_handler();
}
static void hal_init(void) {
lv_display_t *disp = lv_sdl_window_create(monitor_hor_res, monitor_ver_res);
lv_group_t *g = lv_group_create();
lv_group_set_default(g);
lv_sdl_mouse_create();
lv_sdl_mousewheel_create();
lv_sdl_keyboard_create();
lv_indev_t *mouse = lv_sdl_mouse_create();
lv_indev_set_group(mouse, lv_group_get_default());
lv_indev_t *mousewheel = lv_sdl_mousewheel_create();
lv_indev_set_group(mousewheel, lv_group_get_default());
lv_indev_t *keyboard = lv_sdl_keyboard_create();
lv_indev_set_group(keyboard, lv_group_get_default());
}

View File

@ -111,6 +111,12 @@ function build_docker_images(){
fi fi
} }
function lvgl(){
emcmake cmake -DSDL2_DIR=/home/amass/emsdk/upstream/emscripten/system/lib/cmake/SDL2 -S LvglApplication -B ${build_path}/LvglApplication
cmake --build ${build_path}/LvglApplication --target all
# python3 -m http.server -d ./build/LvglApplication
}
function main() { function main() {
local cmd=$1 local cmd=$1
@ -128,6 +134,9 @@ function main() {
init) init)
init init
;; ;;
lvgl)
lvgl
;;
*) *)
build build
;; ;;