build: the submodule is how libavr arrives; the era already carries it

The pin the whole history now encodes becomes the primary route: the
submodule default replaces FetchContent and the unpinned forge fallback,
LIBAVR_ROOT stays as the tandem-development override, the presets already
take the toolchain file from the submodule, and the Studio projects anchor
their include path there — correct by construction. The version tags and
the one-command historical build are documented beside the version map.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-28 00:28:49 +02:00
parent 3ce817ea03
commit fe0d9f8790
7 changed files with 35 additions and 27 deletions

View File

@@ -40,14 +40,13 @@ flash, so the optimisation level stays where correctness needs it.
## What Studio needs from the machine
libavr checked out **beside this repo**, found at
`$(MSBuildProjectDirectory)\..\..\..\libavr\include`anchored to the project,
because a plain relative path resolves against the generated makefile's
directory (the configuration's output directory), not the project's. There is no
`LIBAVR_ROOT` escape hatch: a variable exported in a shell is invisible to Studio
launched from the Start menu, and the failure reads as a missing
`libavr/libavr.hpp`. Pinning libavr as a submodule is the better answer and is on
libavr's task list.
libavr from the **submodule**, found at
`$(MSBuildProjectDirectory)\..\..\libavr\include`correct by construction, and
anchored to the project because a plain relative path resolves against the
generated makefile's directory (the configuration's output directory), not the
project's. There is no `LIBAVR_ROOT` escape hatch: a variable exported in a
shell is invisible to Studio launched from the Start menu, and the failure reads
as a missing `libavr/libavr.hpp` — which is what the submodule answers.
A GCC 16.1 toolchain registered as flavour `avr-g++-16.1.0`, nothing older
reaching `-std=c++26`.
@@ -60,9 +59,9 @@ per project checks the flags have not drifted (both from libavr's
```sh
for name in pureboot tsb_asm; do
python ../libavr/tools/atmelstudio/componentinfo.py \
python libavr/tools/atmelstudio/componentinfo.py \
"ide/$name/$name.componentinfo.xml" --device ATmega328P
python ../libavr/tools/atmelstudio/check-flags.py \
python libavr/tools/atmelstudio/check-flags.py \
--solution ide/bootloader.atsln --project "$name" --target "$name" \
--compile-commands build/atmega328p-generated/compile_commands.json \
--log "build/as-$name.log"