// -*- 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+
** +patch+
** +gzip+
** +bzip2+
** +perl+
** +tar+
** +cpio+
** +python+ (version 2.6 or 2.7)
** +unzip+
** +rsync+

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