One of my personal goals with the FORGE Operating System is portability, both across architectures and platforms, and across toolchains. This goal ensures the code written remains at a reasonably quality level, and little things like “quickfix inline assembly” snippets are definitely not allowed.

I recently updated the build system for FORGE to enable Clang and the LLVM tools as a usable toolchain for compiling FORGE. Aside from the fact that GNU binutils is still necessary (as there is not yet an LLVM replacement for GNU ld), this means the intermediate steps of FORGE’s compilation all compile to LLVM bitcode, which is converted into assembly code and linked at the very end of the compilation.

More on clang + LLVM later though - it’s still a work in progress as I try and get the most out of the toolchain. The ‘end goal’ is to be able to be completely free of gcc/binutils in development.

I have also now set up a buildbot for FORGE which shows the status of each variant and target in the build system. This has let me see at a glance that I have recently broken the ARM builds, and that all X86 builds are building happily at the moment. Perhaps in the future the BuildBot can also generate nightly ISOs that can be downloaded for testing at the ‘bleeding edge’, once FORGE is somewhat usable as a general purpose operating system.

The BuildBot automatically builds all of these targets after each set of commits, allowing immediate feedback on whether a particular change has broken another target (eg, a change in X86 that is not compatible with ARM). This kind of continuous feedback is excellent.

The BuildBot has an IRC bot in the FORGE IRC channel on, #forgeos.