summaryrefslogtreecommitdiff
path: root/README.rst
blob: df1f72f1a48715022ad2bbe0dc84aff62d35fd80 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
BuildStream
-----------
.. image:: https://gitlab.com/BuildStream/buildstream/badges/master/coverage.svg?job=coverage
   :target: https://gitlab.com/BuildStream/buildstream/commits/master

What is BuildStream?
====================

BuildStream is an Free Software tool for building/integrating software stacks.
It supports multiple build-systems (e.g. autotools, cmake, cpan, distutils, make,
meson, qmake), covers many programming languages, and can create outputs in a
range of packaging formats, 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 <https://buildstream.gitlab.io/buildstream/>`_
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 using
  the instructions declared in the .bst files
* transforms 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/x86image/build-x86image
* https://gitlab.com/BuildStream/buildstream-examples/tree/master/netsurf-flatpak

If you have any questions please ask on our `#buildstream <irc://irc.gnome.org/buildstream>`_ channel in `irc.gnome.org <irc://irc.gnome.org>`_