Description
Describe the problem
The Arduino boards platform system supports bundling of libraries. These libraries are typically specific to the platform's architecture, often variants of fundamental libraries which are standardized infrastructure of each plaform (e.g., "SPI", "Wire").
For this reason, these libraries must only be discoverable when compiling for a board of that platform or its core dependents.
🐛 Bundled libraries of all installed platforms are discoverable during compilation for any board.
To reproduce
$ ./arduino-cli version
arduino-cli.exe Version: git-snapshot Commit: f0245bc2 Date: 2022-05-29T10:31:11Z
$ ./arduino-cli core install arduino:avr arduino:samd
[...]
$ mkdir /tmp/FooSketch
$ echo "#include <SAMD_BootloaderUpdater.h>
> void setup () {}
> void loop () {}
> " > /tmp/FooSketch/FooSketch.ino
$ ./arduino-cli compile --fqbn arduino:avr:uno /tmp/FooSketch/
WARNING: library SAMD_BootloaderUpdater claims to run on samd_beta architecture(s) and may be incompatible with your current board which runs on avr architecture(s).
E:\deleteme\arduino-cli\directories\data\packages\arduino\hardware\samd\1.8.13\libraries\SAMD_BootloaderUpdater\src\SAMD_BootloaderUpdater.cpp:32:4: error: #error "Unsupported board!"
#error "Unsupported board!"
^~~~~
E:\deleteme\arduino-cli\directories\data\packages\arduino\hardware\samd\1.8.13\libraries\SAMD_BootloaderUpdater\src\SAMD_BootloaderUpdater.cpp: In function 'void eraseFlash(uint32_t, int)':
E:\deleteme\arduino-cli\directories\data\packages\arduino\hardware\samd\1.8.13\libraries\SAMD_BootloaderUpdater\src\SAMD_BootloaderUpdater.cpp:47:7: error: 'NVMCTRL' was not declared in this scope
NVMCTRL->ADDR.reg = ((uint32_t)((uint32_t)address + i)) / 2;
^~~~~~~
E:\deleteme\arduino-cli\directories\data\packages\arduino\hardware\samd\1.8.13\libraries\SAMD_BootloaderUpdater\src\SAMD_BootloaderUpdater.cpp:48:28: error: 'NVMCTRL_CTRLA_CMDEX_KEY' was not declared in this scope
NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_ER;
^~~~~~~~~~~~~~~~~~~~~~~
E:\deleteme\arduino-cli\directories\data\packages\arduino\hardware\samd\1.8.13\libraries\SAMD_BootloaderUpdater\src\SAMD_BootloaderUpdater.cpp:48:54: error: 'NVMCTRL_CTRLA_CMD_ER' was not declared in this scope
NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_ER;
^~~~~~~~~~~~~~~~~~~~
E:\deleteme\arduino-cli\directories\data\packages\arduino\hardware\samd\1.8.13\libraries\SAMD_BootloaderUpdater\src\SAMD_BootloaderUpdater.cpp: In function 'void writeFlash(uint32_t, const void*, int)':
E:\deleteme\arduino-cli\directories\data\packages\arduino\hardware\samd\1.8.13\libraries\SAMD_BootloaderUpdater\src\SAMD_BootloaderUpdater.cpp:69:15: error: 'NVMCTRL' was not declared in this scope
while (!NVMCTRL->INTFLAG.bit.READY);
^~~~~~~
E:\deleteme\arduino-cli\directories\data\packages\arduino\hardware\samd\1.8.13\libraries\SAMD_BootloaderUpdater\src\SAMD_BootloaderUpdater.cpp: In member function 'int SAMD_BootloaderUpdaterClass::update(void
(*)(float))':
E:\deleteme\arduino-cli\directories\data\packages\arduino\hardware\samd\1.8.13\libraries\SAMD_BootloaderUpdater\src\SAMD_BootloaderUpdater.cpp:82:3: error: 'NVMCTRL' was not declared in this scope
NVMCTRL->CTRLB.bit.MANW = 0;
^~~~~~~
Error during build: exit status 1
🐛 The "SAMD_BootloaderUpdater" library of the arduino:samd
platform was discovered while compiling for a board of the arduino:avr
platform.
Expected behavior
Platform bundled libraries are discoverable only when compiling for a board of that platform or of a platform which references its core.
In the contrived demo above, the compilation was expected to fail, but with a different error:
$ arduino-cli version
arduino-cli.exe Version: git-snapshot Commit: 7e9e4cac Date: 2022-05-29T10:33:38Z
$ ./arduino-cli compile --fqbn arduino:avr:uno /tmp/FooSketch/
C:\Users\per\AppData\Local\Temp\FooSketch\FooSketch.ino:1:10: fatal error: SAMD_BootloaderUpdater.h: No such file or directory
#include <SAMD_BootloaderUpdater.h>
^~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Error during build: exit status 1
Arduino CLI version
Operating system
Windows
Operating system version
10
Additional context
I bisected the bug to f0245bc (it does not occur at the previous commit 7e9e4ca)
The more significant (but less suitable for a simple demo) manifestations of the bug result from compiling a sketch that is valid for the target platform which uses one of the common platform bundled libraries such as "Wire". In this case the bug may manifest, at best, as a compilation error cryptic to the target user, at worst, as a subtle runtime fault or degradation.
Issue checklist
- I searched for previous reports in the issue tracker
- I verified the problem still occurs when using the nightly build
- My report contains all necessary details