feat(lvgl): CI-gate the LVGL backend + add lvgl mode to all four targets#41
Merged
Conversation
First step of the LVGL backend graduation (Docs/LvglProductizationPlan.md Gate 1): smoke exercised only native/modern overlays, so the LVGL backend was never CI-verified. Add lvgl to the overlay-generation matrix for the targets whose build script accepts it today (ovmf-x64 + loongarch), asserting the generated overlay wires the LVGL renderer library (ModernUiLvglRendererLib), LvglCoreLib, and the shared ModernDisplayEngineDxe interaction backend. The native/modern (GOP) overlays still must never pull in the LVGL renderer -- that prohibition is now scoped to non-lvgl engines so it stays an invariant for the GOP path while permitting lvgl in its own overlay. armvirt and riscvvirt build scripts do not accept lvgl yet, so they remain native/modern only here; adding lvgl support to them is a prerequisite for an all-target lvgl default (tracked in the plan). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Execution-grade plan to take the LVGL renderer from experimental sample to a shippable DisplayEngine backend across the four XArch targets: six gates (backend graduation, CJK coverage, memory/perf budget, resolution robustness, interaction completeness, validation/CI) with grounded measurements, checklists, effort sizing, a phased roadmap, and the maintainer's locked decisions (lvgl-as-default with its prerequisites; tiered CJK coverage). Companion to Docs/PRODUCTIZATION_STATUS.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bring the remaining two targets up to the ovmf-x64/loongarch pattern so all four XArch targets can build MODERN_SETUP_DISPLAY_ENGINE=lvgl -- the prerequisite for making lvgl the default backend (Docs/LvglProductizationPlan.md Gate 1). Per script: accept "lvgl"; resolve the renderer LibraryClass to the LVGL-backed ModernUiLvglRendererLib (vs the GOP rasterizer) via a renderer_inf switch; add the LvglCoreLib library block and force-link CryptoPkg IntrinsicLib into ModernDisplayEngineDxe in lvgl mode (memcpy/memset pulled by the LVGL software draw pipeline); expand the modern-only DSC/FDF rewrites to also fire for lvgl; and append Experimental/ to PACKAGES_PATH so LvglSpikePkg resolves. Smoke now exercises lvgl overlay generation for all four targets. Overlay generation verified for all four targets via smoke. Full AARCH64/RISCV64 lvgl cross-compilation is not exercised in this environment, but RISC-V64 LVGL already builds upstream (Scripts/build-lvgl-spike-riscv.sh) and the LVGL sources are architecture-agnostic C. The lvgl+REPLACE_UIAPP app-intrinsics combo on these two targets is a follow-up (not on the default or smoke path). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
First foundation of the LVGL backend graduation (
Docs/LvglProductizationPlan.mdGate 1): bring the LVGL display-engine backend under CI and make it buildable on all four XArch targets, without yet flipping the default. The LVGL backend is the sameModernDisplayEngineDxewith the renderer library swapped (ModernUiLvglRendererLibvs the GOP rasterizer) — no change to edk2 HII/FormBrowser ownership.What's in this PR
native/modernoverlays, so the LVGL path was never CI-verified. Smoke now generates and checks thelvgloverlay, asserting it wiresModernUiLvglRendererLib+LvglCoreLib+ the sharedModernDisplayEngineDxe, while native/modern (GOP) overlays still must never pull in the LVGL renderer.{modern, native}; they now acceptlvglwith the same wiring as ovmf-x64/loongarch (renderer switch,LvglCoreLibblock,IntrinsicLibforce-link,modern→lvglDSC/FDF rewrites,Experimental/onPACKAGES_PATH). All four targets now pass lvgl overlay generation in smoke.Docs/LvglProductizationPlan.md: execution-grade plan (six gates, grounded measurements, phased roadmap, locked decisions) companion toDocs/PRODUCTIZATION_STATUS.md.Verification
python3 Tests/Smoke/smoke_validate.py— PASS, including lvgl overlay generation for armvirt, loongarch, ovmf-x64, riscvvirt.Scripts/build-lvgl-spike-riscv.sh) and the LVGL sources are architecture-agnostic C.Deliberately not in this PR
lvgl(touches every default build + needsScripts/bootstrap-edk2.shto initExternal/lvgl) and de-spiking the framing — sequenced as a focused follow-up so the high-risk default flip has its own review surface.External/edk2is intentionally untouched.🤖 Generated with Claude Code