Tidy up the firmware Makefile

Now the build doesn't need to compile *everything* on each invocation