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

[[requirement]]
System requirements
-------------------

Buildroot is designed to run on Linux systems.

Buildroot needs some software to be already installed on the host
system; here are the lists of the mandatory and optional packages
(package names may vary between distributions).

Take care to _install both runtime and development data_, especially
for the libraries that may be packaged in 2 distinct packages.


[[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 2.95 or any later)
** `g++` (version 2.95 or any later)
** +bash+
** +gawk+
** +bison+
** +flex+
** +gettext+
** +patch+
** +gzip+
** +bzip2+
** +perl+
** +tar+
** +cpio+
** +python+ (version 2.6 or 2.7)
** +unzip+
** +rsync+
** +texinfo+ (required for internal Buildroot toolchain backend)

* Source fetching tools:
** +wget+

[[requirement-optional]]

Optional packages
~~~~~~~~~~~~~~~~~

* Source fetching tools:
+
In the official tree, most of the package sources are retrieved
using +wget+; a few are only available through their +git+, +mercurial+,
or +svn+ repository.
+
All other source fetching methods are implemented and may be used in a
development context (further details: refer to xref:download-infra[]).
+
** +bazaar+
** +cvs+
** +git+
** +mercurial+
** +rsync+
** +scp+
** +subversion+

* Configuration interface dependencies (requires development libraries):
** +ncurses5+ to use the 'menuconfig' interface
** +qt4+ to use the 'xconfig' interface
** +glib2+, +gtk2+ and +glade2+ to use the 'gconfig' interface

* 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+
