The target all was previous running setup followed by build. As
both setup and build are phony targets they run in sequence and because
the firmware contain the timestamp they always run (dependencies doesn't
do anything). all now does exactly what it says on the tin
without introducing non-standard targets.
clean now removes the images that created during build which is
what you expect from that target. See:
https://www.gnu.org/software/make/manual/html_node/Standard-Targets.html#Standard-Targets
The file(s) being removed may not exist, but make shouldn't fail because
of it:
$ make clean
rm ./firmware/*.uf2
rm: cannot remove './firmware/*.uf2': No such file or directory
make: *** [Makefile:10: clean] Error 1
$ echo $?
2
this also removes leading ./ from path in clean, and assumes that `make
clean` is being run from the top level repo dir