Files
emb_cli/lib
Joel Winarske c45952bd58 feat(cross): cross-file extends — app layer over a project target
`cross.extends` gains a second form alongside the board reference:
  - <board>        : a target in emb's shipped board library (hardware).
  - <dir>#<target> : a target in another emb project at <dir> (the project
                     layer) — e.g. a Flutter app extending an ivi-homescreen
                     target, so plugin config (DISABLE_PLUGINS/PLUGINS_DIR,
                     plugin -dev packages) lives with the app.

This completes the layering: app -> project -> board. <dir> is resolved relative
to the extending manifest's project root (the .emb/ parent in .emb/ mode, else
the manifest's dir); the referenced project's own extends chain is applied via
resolve(), and the same merge rules apply (maps deep-merge, backends/cpu_flags
replace, sysroot.dev_packages union). Reference cycles across projects are
detected and reported.

Tests cover the three-layer merge (hardware from board, backends from project,
plugins from app, dev_packages unioned across all three) plus unknown-target
and missing-project errors.

Signed-off-by: Joel Winarske <joel.winarske@gmail.com>
2026-06-20 06:46:28 -07:00
..