Bootloader Support in seL4 Tools Build System

@apavey posted RFC-4 to the RFC list but after some thought and discussion, it is apparent that there is a need to discuss how bootloaders might be supported in the seL4 build system.

The RFC proposes that an addition is made to the seL4 tools repository where there is a global CMake list called UseBootEnv that can have a list of supported components that make a bootable image. An optional ConfigureBootEnv CMake function then takes this list, parses it, and takes care of building the bootable image. In the ConfigureBootEnv function more bootable environments can be supported. The reason for using a list is that in some cases more than one thing might need to be supported. The plan here is to also generate scripts to format sd cards.

The current draft of our implementation is located on a branch of ours. The current implementation shouldn’t change default behaviour except when using bbl, since the bootloader building has been extracted from the middle of the rootserver logic and added to the end to operate only on the final image.

This meets our immediate needs but does anyone have other ideas for better interfaces? Is the Boot Environment list a good idea? Are there better abstractions in CMake to handle something like this? Should it just provide a function like the simulation generation scripts, where the developer can add the function call to the end of their top level CMake script? Any other ideas?

My opinion is that our CMake function DeclareRootserver is too magical (it does too many things that aren’t expected by someone not familiar with it’s implementation) and it should be easier to instead add additional build rules that can further operate on the kernel in rootserver images more arbitrarly.

I agree. I’ll pull it out and see make it more useful in the general case where it doesn’t rely on being called from the DelcareRootserver function.