|
ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
|
Hand-written first-party libraries – the drivers and substrates the rest of the firmware builds on (HAL peripherals and register maps, the ra8_core substrate, I/O fabric, security and TrustZone, the e-reader stack, storage, networking, and board support).
More...Hand-written first-party libraries – the drivers and substrates the rest of the firmware builds on (HAL peripherals and register maps, the ra8_core substrate, I/O fabric, security and TrustZone, the e-reader stack, storage, networking, and board support).
Vendored SOUP lives under libs/third_party and is excluded from these docs.
The project's standard library: hand-written, first-party C, one directory per library. ra8_ is the C symbol namespace, not a directory-naming habit – a directory ra8_foo/ owns the ra8_foo_* functions and types and the k_ra8_foo_* enum values, per docs/STYLE_GUIDE.md. ls libs/ is the registry; nothing in this file restates it.
Two directories are exempt from the coding-style rules. third_party/ is vendored SOUP (Software of Unknown Provenance) and keeps its upstream conventions; its component justifications live under docs/SOUP/ and MC/DC re-test is waived there. ra8_fonts/ carries the prefix because it owns the font blob symbols, but it is data plus a generated header, not hand-authored code.
Code may depend on anything lower, never on anything higher. The bottom edge is enforced: scripts/checks/check_core_layering.py fails the build if anything under ra8_core includes a header owned by another library. Full ring numbering and the {World: S/NS/NSC} TrustZone tag every Ring-3+ file carries are in docs/RING_AND_WORLD.md.
A library's own file-header @par Tag is authoritative for its ring and world. The grouping below is a reading aid for someone opening ls libs/ for the first time.
Who actually includes whom, derived from the #include edges between libs/ and port/ – not from the CMake graph, which cannot answer it (every libs/*/CMakeLists.txt is a no-op and consumers glob the sources into one object library). The number on each arrow is how many files carry that edge.
The whole system, cores and all, is in docs/diagrams/system_map.svg.
A new top-level directory is warranted when the code is a genuinely new library boundary – its own symbol namespace, its own ring and world, and a reason no existing library should absorb it. Hardware-specific code with nothing new architecturally is a HAL driver: add files under ra8_hal/. When you do add one, tag every file's header per docs/RING_AND_WORLD.md and give every exported symbol the ra8_foo_* naming. Do not add it to a list in this file, and never write a running total of libraries anywhere – both rot the day the next one lands.