Thanks to @DVA-4 for spotting this while building the Eltro MK3 on AMYboard. Source write-up: AMYBOARD_PROGRAMMING_GUIDE.md §1.
The Arduino board target defines AMYBOARD_ARDUINO only — not AMYBOARD. Most of the tree guards with both, but several places gate on defined(TULIP) || defined(AMYBOARD) alone, so those paths silently vanish from Arduino builds:
src/amy_midi.c lines ~5, ~215, ~262, ~661
src/amy_midi.h line ~37
src/parse.c lines ~7, ~315
Meanwhile e.g. src/api.c:54, src/i2s.c:67, and src/amy_midi.c:420 correctly check both. From a user's perspective this is a trap: code that "should be there" isn't compiled in, and nothing tells you.
Suggested fix: collapse to one truth — e.g. have amy.h define AMYBOARD whenever AMYBOARD_ARDUINO is defined (or introduce a single umbrella macro like AMY_IS_AMYBOARD), then audit every defined(AMYBOARD) site. A grep-able convention would prevent recurrence.
Thanks to @DVA-4 for spotting this while building the Eltro MK3 on AMYboard. Source write-up: AMYBOARD_PROGRAMMING_GUIDE.md §1.
The Arduino board target defines
AMYBOARD_ARDUINOonly — notAMYBOARD. Most of the tree guards with both, but several places gate ondefined(TULIP) || defined(AMYBOARD)alone, so those paths silently vanish from Arduino builds:src/amy_midi.clines ~5, ~215, ~262, ~661src/amy_midi.hline ~37src/parse.clines ~7, ~315Meanwhile e.g.
src/api.c:54,src/i2s.c:67, andsrc/amy_midi.c:420correctly check both. From a user's perspective this is a trap: code that "should be there" isn't compiled in, and nothing tells you.Suggested fix: collapse to one truth — e.g. have
amy.hdefineAMYBOARDwheneverAMYBOARD_ARDUINOis defined (or introduce a single umbrella macro likeAMY_IS_AMYBOARD), then audit everydefined(AMYBOARD)site. A grep-able convention would prevent recurrence.