Skip to content

compile_lvgl.sh

Downloads and compiles LVGL v9.2 into a static library for the kernel.

Overview

compile_lvgl.sh clones the LVGL graphics library source, cross-compiles every C source file to 32-bit freestanding ELF objects, and archives them into lib/liblvgl.a. It also compiles any custom Asuro-specific LVGL extension files found in lvglh/. A caching mechanism on the host-mounted /code/lvgl/ directory allows subsequent builds to skip the entire compilation.

Prerequisites

  • git, gcc, ar, and standard POSIX utilities must be available.
  • The lvglh/ directory must contain an lv_conf.h configuration header (and optionally custom .c files).
  • The lib/ output directory must exist.

Inputs

Source Description
LVGL Git repository Cloned from https://github.com/lvgl/lvgl.git at tag v9.2.2.
lvglh/ Project-local directory containing lv_conf.h and optional custom C source files.
/code/lvgl/liblvgl.a Optional cached artifact from a previous build (host mount).

Outputs

File Description
lib/liblvgl.a Static archive containing all compiled LVGL and custom extension objects.
/code/lvgl/ Cached copy of the static library, LVGL source, and object files for future builds.

Behavior

  1. Cache check: If /code/lvgl/liblvgl.a exists, copies it to lib/ and exits immediately.
  2. Clone: Shallow-clones the LVGL repository at the specified version tag into /tmp/lvgl.
  3. Discover sources: Finds all .c files under the LVGL src/ directory, excluding test files.
  4. Compile: Compiles each source file with GCC using the following key flags:
  5. -m32 -march=i686 -- 32-bit i686 target.
  6. -ffreestanding -fno-builtin -fno-stack-protector -fno-pic -fno-pie -- Bare-metal environment.
  7. -O2 -- Optimization level 2.
  8. -DLV_CONF_INCLUDE_SIMPLE -- Tells LVGL to include lv_conf.h via a simple path.
  9. Include paths for lvglh/ and the LVGL source tree.
  10. Archive: Collects all .o files into lib/liblvgl.a using ar rcs.
  11. Custom extensions: If lvglh/ contains .c files, compiles them with the same flags and appends the resulting objects to liblvgl.a.
  12. Cache write: Copies the static library, source, and objects to /code/lvgl/ on the host mount for future builds.

Progress is reported every 50 files. The script aborts with exit code 1 if any compilation errors occur.

Notes

  • All intermediate work (clone, object files) happens in /tmp for speed on container-local filesystems.
  • The cache lives on the host mount at /code/lvgl/. Deleting lvgl/liblvgl.a from the project root forces a full rebuild.
  • The static library is linked into the kernel by compile_link.sh using --start-group / --end-group alongside libgcc.