Chinese README: README.zh-CN.md
These Dockerfiles are the build-image definitions used by local verification, CI, and the legacy VisualGDB debug container.
Image layout:
sources/stores the shared dependency version manifest, source-fetch helpers, target build scripts, the LaneApp LVGL profile, the pinned MiniGUI source archive, and the legacy ARM toolchain bundles.x86Legacy/keeps the legacy Wheezy-based X86 debug image, including MiniGUI 2.0.4, SSH, and the old toolchain/debug baseline.x86/is the independent LaneApp i386 compiler baseline: Ubuntu 16.04, GCC 5.4, glibc 2.23, Clang 6, MiniGUI 2.0.4, GDB/GDBServer, Valgrind, strace/ltrace, and GCC sanitizer runtimes.arm/is the ARM32 LaneApp cross-compiler baseline: Ubuntu 16.04 host tools, GCC 5.4, legacy glibc 2.13, MiniGUI 2.0.4 rebuilt from the pinned source archive, EABI5 soft-float, and ARMv4T-compatible code generation.x64/forX64arm64/forARM64loongson/forLA64
Shared dependency policy:
- All portable third-party dependencies are downloaded at build time from pinned GitHub release/tag archives and verified with SHA256 before extraction.
- The X86 LaneApp profile pins
curl 8.10.1,libxml2 2.12.10,freetype 2.13.3,libusb 1.0.23,sqlite 3.51.2,FFmpeg 4.4.5,PostgreSQL/libpq 17.2,mbedTLS 3.4.0, the LaneApp libpeer revision, andLVGL 9.3.0. libusbstays pinned to1.0.23to preserve the conservative ARM32 source and runtime compatibility baseline.- The ARM image wraps Ubuntu's GCC 5.4 cross compiler around the repository-owned legacy sysroot. Its image smoke test verifies the 32-bit EABI5 soft-float ABI,
/lib/ld-linux.so.3, the glibc 2.13 ceiling, disabled FORTIFY calls, and PostgreSQL's private static archives. sqlitestays aligned with the upstream app's3.51.2baseline so the image exposes a matching staticlibsqlite3.a, and it is fetched from the pinned GitHub mirror tag at image-build time like the other portable dependencies.- The independent X86 image builds the LaneApp dependencies from pinned source archives and installs static libraries, headers, and pkg-config metadata under
/usr/local. This includes the former LaneApp-private FFmpeg/VAAPI build chain, so LaneApp code changes do not rebuild these dependencies and LaneApp does not retain an FFmpeg submodule. - X86 curl keeps HTTPS enabled through the same mbedTLS 3.4.0 stack used by libpeer, libsrtp, and FFmpeg; IPv6 is disabled. OpenSSL 1.1.1w remains an optional source-build profile and is not installed in the default X86 image, avoiding two TLS implementations in one LaneApp process.
- The X86 FFmpeg profile enables H.264 VAAPI against Xenial's libva/libdrm stack. FFmpeg remains static, while the hardware-facing i965 driver and its pinned 32-bit libva/libdrm runtime are exported at
/opt/pcct/runtime/vaapifor LaneApp packaging. - The X86 static verification links curl, libxml2, FFmpeg, libpeer/libsrtp, mbedTLS, libpq, libusb, and the LaneApp LVGL profile into one smoke binary. Only baseline OS libraries and the explicitly packaged VAAPI/libdrm runtime may remain dynamic.
x86Legacy,x86, andarmeach build MiniGUI 2.0.4 from the repository-owned source archive; none of the images reuse MiniGUI build artifacts from another image or from the legacy ARM sysroot.
Batch build with Docker Compose:
docker-compose.ymlcan start all build images in parallel and bind-mount a host source directory into/LaneApp.docker-compose.ymlis the runtime entrypoint and pulls prebuilt images from GHCR by default.docker-compose.override.ymlonly carries the localbuilddefinitions. When you rundocker compose up --build, Compose uses the override and rebuilds the images locally before starting them.- Set
BUILD_DIRto the host directory you want to build, and optionally setBUILD_COMMAND(defaults tomake). - Optionally set
PCCT_IMAGE_PREFIX(defaults toghcr.io/iotsharp) andPCCT_IMAGE_TAG(defaults tolatest) to switch image registry/tag. - The repo root also provides
compose-up-all.cmdandcompose-up-all.shwrapper scripts so you do not have to export the environment variables manually each time. - The wrapper scripts default to
pullmode, which only usesdocker-compose.ymland pulls remote images. Pass--buildor--mode buildto adddocker-compose.override.ymland rebuild the images locally. - The wrapper scripts default to the
alltarget set. You can narrow the run with--targets, for examplex64,arm64,x86,x64, orx86 x64. Supported targets arex86legacy,x86,arm,x64,arm64, andloongson. - PowerShell example:
$env:BUILD_DIR='D:/path/to/project'; $env:BUILD_COMMAND='make'; docker compose up --build - Bash example:
BUILD_DIR=/abs/path/to/project BUILD_COMMAND=make docker compose up --build - Windows
cmdexamples:compose-up-all.cmd D:\path\to\projectcompose-up-all.cmd D:\path\to\project --targets x64,arm64compose-up-all.cmd D:\path\to\project "cmake --build build" --build --targets x86,x64compose-up-all.cmd D:\path\to\project --mode build --targets all -- --abort-on-container-exit - Linux/macOS
shexamples:sh ./compose-up-all.sh /path/to/projectsh ./compose-up-all.sh /path/to/project --targets x64,arm64sh ./compose-up-all.sh /path/to/project "cmake --build build" --build --targets x86,x64sh ./compose-up-all.sh /path/to/project --mode build --targets all -- --abort-on-container-exit - The compose run exits after all service commands finish. Build outputs stay in the mounted host directory.
Legacy VisualGDB debug entrypoint:
- Start the local debug builder with
docker compose -f docker-compose.debug.yml up --build -d x86-debug-builder - The container exposes SSH on
127.0.0.1:2221, which matchesLaneApp-Debug.vgdbsettings x86Legacystill keeps the MiniGUI 2.0.4, SSH, and dual-targetarm + x86legacy workflow; the other images stay on the unified modern dependency stack.