Bob Build Tool

Bob is a functional build automation tool with an emphasisis on cross compilation. It is intended for complex embedded projects and thus focuses on reproducible builds while still being nice to developers in agile environments.

What makes Bob different?

In contrast to similar tools Bob tries to bridge the gap between a classic package build system that reliably builds hundreds of packages and a working environment where individual developers can work on their applications. Bob strives to be fast, reliable and reproducible while still being the core of a continuous integration work flow.

One description to rule'em all

Bob recipes describe everything how the software is built. Build, edit, re-build and test your packages exactly the same way as the CI server would build them. If it builds locally then it will build on the CI server too and vice versa.

Jenkins CI integration

Bob will configure a Jenkins server right from the recipes. No need to to deal separately with the CI setup. Spend less time debugging your Jenkins jobs because everything is already described in the recipes.

Binary Artifacts

Why build a package locally if the CI server or someone else has built it already? Bob can use a binary artifact cache to fetch compatible artifacts. Despite a shared location no special setup is needed. Use your CPU to compile packages you're working on, not the prerequisites that everybody else has built already.

Variant management

Recipes declare their input and the required steps to build the package. Depending on the configured environment Bob automatically computes how many variants of a package must be built. E.g. building the same recipe with different compilers in the same project is as easy as checking out different source code for a package for different platforms.

Enable reproducible builds

Bob's functional approach makes all input to a package explicitly visible. Bob can virtualise the build environment with a sandbox. In the sandbox all paths are host independent, only declared input is accessible read-only and just the workspace is writeable. No possibility for the configure script to see a stray library that was not declared.

Audit trail

Every artifact has an audit trail attached to it describing all input and processing steps that have led to it. The audit trail shows what has been built where and when with what recipes. This works across local and Jenkins builds.

What are the primary use cases for Bob?

Embedded Linux systems

Just like Bitbake and Buildroot you can use Bob to build a custom embedded Linux image. Bob makes it very easy to add your own applications in this environment and immediately test them in the final image. Build upon stable packages and develop your applications in a true CI setup to accelerate development. See the basement project for a starting point.

Complex embedded devices

Bob supports building firmware images for devices that contain cores with different architectures. For example a device could have an Application core, as DSP and a microcontroller. Bob supports this setup, especially if some code is shared between the different cores.

Open Source

Bob is open source, free and always will be. Pull Requests, suggestions or comments are all welcome and valued.

Hosted on Github

Our project (and this website) is hosted on Github.

Reference recipes

The basement project serves as a reference project for Bob. Use it as a blueprint for your project or build a custom Linux device with it. There are also some small tutorial projects available.

Community

Everybody is welcome to contribute on Github. If you have a specific question you're welcome to post on the mailing list.