About¶
What is BuildStream?¶
BuildStream is a Free Software tool for building/integrating software stacks. It takes inspiration, lessons and use-cases from various projects including OBS, Reproducible Builds, Yocto, Baserock, Buildroot, Aboriginal, GNOME Continuous, JHBuild, Flatpak Builder and Android repo.
BuildStream supports multiple build-systems (e.g. autotools, cmake, cpan, distutils, make, meson, qmake), and can create outputs in a range of formats (e.g. debian packages, flatpak runtimes, sysroots, system images) for multiple platforms and chipsets.
Why should I use BuildStream?¶
BuildStream offers the following advantages:
Declarative build instructions/definitions
BuildStream provides a a flexible and extensible framework for the modelling of software build pipelines in a declarative YAML format, which allows you to manipulate filesystem data in a controlled, reproducible sandboxed environment.
Support for developer and integrator workflows
BuildStream provides traceability and reproducibility for integrators handling stacks of hundreds/thousands of components, as well as workspace features and shortcuts to minimise cycle-time for developers.
Fast and predictable
BuildStream can cache previous builds and track changes to source file content and build/config commands. BuildStream only rebuilds the things that have changed.
Extensible
You can extend BuildStream to support your favourite build-system.
Bootstrap toolchains and bootable systems
BuildStream can create full systems and complete toolchains from scratch, for a range of ISAs including x86_32, x86_64, ARMv7, ARMv8, MIPS.
How do I use BuildStream?¶
Please refer to the documentation for information about installing BuildStream, and about the BuildStream YAML format and plugin options.
How does BuildStream work?¶
BuildStream operates on a set of YAML files (.bst files), as follows:
- loads the YAML files which describe the target(s) and all dependencies
- evaluates the version information and build instructions to calculate a build graph for the target(s) and all dependencies and unique cache-keys for each element
- retrieves elements from cache if they are already built, or builds them in a sandboxed environment using the instructions declared in the .bst files
- transforms/configures and/or deploys the resulting target(s) based on the instructions declared in the .bst files.
How can I get started?¶
The easiest way to get started is to explore some existing .bst files, for example:
- https://gitlab.gnome.org/GNOME/gnome-build-meta/
- https://gitlab.com/freedesktop-sdk/freedesktop-sdk
- https://gitlab.com/baserock/definitions
- https://gitlab.com/BuildStream/buildstream-examples/tree/master/build-x86image
- https://gitlab.com/BuildStream/buildstream-examples/tree/master/netsurf-flatpak
If you have any questions please ask on our #buildstream channel in irc.gnome.org