sdk/include/lv_conf.h mirrors the emulator's (music + keypad_encoder
demos enabled) so apps using the SDK see the same LVGL feature set
the host provides.
sdk/cmake/CZApp.cmake gains:
- demos/ header search path so apps can #include
"widgets/lv_demo_widgets.h" etc.
- NO_KBD_STUBS option for apps that want to resolve the host's real
lv_sdl_keyboard_create at dlopen time (instead of the weak inert
stub). Default weak stub stays for the 90% of apps that don't care
about keyboard input.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The emulator always dlsyms lv_sdl_keyboard_create / lv_sdl_keyboard_handler
and, when the app provides neither, falls back to a bare keypad indev with
no read_cb. LVGL then spams "indev_read_cb is not registered" every tick.
CZApp.cmake now emits weak defaults that install a proper no-op read_cb,
matching LVGL's signature (returns lv_indev_t*). Apps that want real
keyboard input override these with strong definitions at link time.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
sdk/include/cz_app.h is the public ABI apps link against: two extern "C"
entry points (app_main, app_event) and the CZ_EV_* event enum.
sdk/cmake/CZApp.cmake gives app authors a one-liner
(cz_add_lvgl_app(target SOURCES ...)) that sets the right per-OS link
flags (-undefined dynamic_lookup on mac, --unresolved-symbols=ignore-all
on Linux, loud warning on Windows until T08 lands) and emits a ui_init
thunk so the current emulator keeps working while apps migrate to the
new ABI.
discover_projects.py now surfaces the new schema fields with safe
defaults so existing app-builder.json files still work unchanged.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>