// -*- mode:doc; -*-
// vim: set syntax=asciidoc:

[[requirement]]
== System requirements

Buildroot is designed to run on Linux systems.

While Buildroot itself will build most host packages it needs for the
compilation, certain standard Linux utilities are expected to be
already installed on the host system. Below you will find an overview of
the mandatory and optional packages (note that package names may vary
between distributions).

[[requirement-mandatory]]

=== Mandatory packages

* Build tools:

** +which+
** +sed+
** +make+ (version 3.81 or any later)
** +binutils+
** +build-essential+ (only for Debian based systems)
** +gcc+ (version 4.8 or any later)
** `g++` (version 4.8 or any later)
** +bash+
** +patch+
** +gzip+
** +bzip2+
** +perl+ (version 5.8.7 or any later)
** +tar+
** +cpio+
** +unzip+
** +rsync+
** +file+ (must be in +/usr/bin/file+)
** +bc+

* Source fetching tools:
** +wget+

[[requirement-optional]]

=== Optional packages

* Recommended dependencies:
+
Some features or utilities in Buildroot, like the legal-info, or the
graph generation tools, have additional dependencies. Although they
are not mandatory for a simple build, they are still highly recommended:
+
** +python+ (version 2.7 or any later)

* Configuration interface dependencies:
+
For these libraries, you need to install both runtime and development
data, which in many distributions are packaged separately. The
development packages typically have a _-dev_ or _-devel_ suffix.
+
** +ncurses5+ to use the 'menuconfig' interface
** +qt5+ to use the 'xconfig' interface
** +glib2+, +gtk2+ and +glade2+ to use the 'gconfig' interface

* Source fetching tools:
+
In the official tree, most of the package sources are retrieved using
+wget+ from _ftp_, _http_ or _https_ locations. A few packages are only
available through a version control system. Moreover, Buildroot is
capable of downloading sources via other tools, like +rsync+ or +scp+
(refer to xref:download-infra[] for more details). If you enable
packages using any of these methods, you will need to install the
corresponding tool on the host system:
+
** +bazaar+
** +cvs+
** +git+
** +mercurial+
** +rsync+
** +scp+
** +subversion+

* Java-related packages, if the Java Classpath needs to be built for
  the target system:
** The +javac+ compiler
** The +jar+ tool

* Documentation generation tools:
** +asciidoc+, version 8.6.3 or higher
** +w3m+
** +python+ with the +argparse+ module (automatically present in 2.7+ and 3.2+)
** +dblatex+ (required for the pdf manual only)

* Graph generation tools:
** +graphviz+ to use 'graph-depends' and '<pkg>-graph-depends'
** +python-matplotlib+ to use 'graph-build'
