Skip to content

feat(lvgl): CI-gate the LVGL backend + add lvgl mode to all four targets#41

Merged
MarsDoge merged 3 commits into
mainfrom
feat/lvgl-graduation
Jun 8, 2026
Merged

feat(lvgl): CI-gate the LVGL backend + add lvgl mode to all four targets#41
MarsDoge merged 3 commits into
mainfrom
feat/lvgl-graduation

Conversation

@MarsDoge

@MarsDoge MarsDoge commented Jun 8, 2026

Copy link
Copy Markdown
Owner

Summary

First foundation of the LVGL backend graduation (Docs/LvglProductizationPlan.md Gate 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 same ModernDisplayEngineDxe with the renderer library swapped (ModernUiLvglRendererLib vs the GOP rasterizer) — no change to edk2 HII/FormBrowser ownership.

What's in this PR

  • CI-gate the LVGL overlay — smoke previously exercised only native/modern overlays, so the LVGL path was never CI-verified. Smoke now generates and checks the lvgl overlay, asserting it wires ModernUiLvglRendererLib + LvglCoreLib + the shared ModernDisplayEngineDxe, while native/modern (GOP) overlays still must never pull in the LVGL renderer.
  • Add LVGL mode to armvirt + riscvvirt — these two build scripts accepted only {modern, native}; they now accept lvgl with the same wiring as ovmf-x64/loongarch (renderer switch, LvglCoreLib block, IntrinsicLib force-link, modernlvgl DSC/FDF rewrites, Experimental/ on PACKAGES_PATH). All four targets now pass lvgl overlay generation in smoke.
  • Productization plan docDocs/LvglProductizationPlan.md: execution-grade plan (six gates, grounded measurements, phased roadmap, locked decisions) companion to Docs/PRODUCTIZATION_STATUS.md.

Verification

  • python3 Tests/Smoke/smoke_validate.py — PASS, including lvgl overlay generation for armvirt, loongarch, ovmf-x64, riscvvirt.
  • Scope is overlay generation (smoke's level). Full AARCH64/RISCV64 lvgl cross-compilation is not exercised here, but RISC-V64 LVGL already builds upstream (Scripts/build-lvgl-spike-riscv.sh) and the LVGL sources are architecture-agnostic C.

Deliberately not in this PR

  • Flipping the default backend to lvgl (touches every default build + needs Scripts/bootstrap-edk2.sh to init External/lvgl) and de-spiking the framing — sequenced as a focused follow-up so the high-risk default flip has its own review surface.

External/edk2 is intentionally untouched.

🤖 Generated with Claude Code

MarsDoge and others added 3 commits June 8, 2026 10:18
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>
@MarsDoge MarsDoge merged commit 5ce459f into main Jun 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant