Using Buildroot
===============

Configuration and general usage
-------------------------------

Buildroot has a nice configuration tool similar to the one you can
find in the http://www.kernel.org/[Linux kernel] or in
http://www.busybox.org/[Busybox]. Note that you can (and should) build
everything as a normal user. There is no need to be root to configure
and use Buildroot. The first step is to run the configuration
assistant:

--------------------
 $ make menuconfig
--------------------

to run the curses-based configurator, or

--------------------
 $ make xconfig
--------------------

or

--------------------
 $ make gconfig
--------------------

to run the Qt or GTK-based configurators.

All of these "make" commands will need to build a configuration
utility, so you may need to install "development" packages for
relevant libraries used by the configuration utilities. On Debian-like
systems, the +libncurses5-dev+ package is required to use the
'menuconfig' interface, +libqt4-dev+ is required to use the 'xconfig'
interface, and +libglib2.0-dev, libgtk2.0-dev and libglade2-dev+ are
needed to use the 'gconfig' interface.

For each menu entry in the configuration tool, you can find associated
help that describes the purpose of the entry.

Once everything is configured, the configuration tool generates a
+.config+ file that contains the description of your
configuration. It will be used by the Makefiles to do what's needed.

Let's go:

--------------------
 $ make
--------------------

You *should never* use +make -jN+ with Buildroot: it does not support
'top-level parallel make'. Instead, use the +BR2_JLEVEL+ option to
tell Buildroot to run each package compilation with +make -jN+.

This command will generally perform the following steps:

* Download source files (as required)
* Configure, build and install the cross-compiling toolchain if an
  internal toolchain is used, or import a toolchain if an external
  toolchain is used
* Build/install selected target packages
* Build a kernel image, if selected
* Build a bootloader image, if selected
* Create a root filesystem in selected formats

Buildroot output is stored in a single directory, +output/+.
This directory contains several subdirectories:

* +images/+ where all the images (kernel image, bootloader and root
  filesystem images) are stored.

* +build/+ where all the components except for the cross-compilation
  toolchain are built (this includes tools needed to run Buildroot on
  the host and packages compiled for the target). The +build/+
  directory contains one subdirectory for each of these components.

* +staging/+ which contains a hierarchy similar to a root filesystem
  hierarchy. This directory contains the installation of the
  cross-compilation toolchain and all the userspace packages selected
  for the target. However, this directory is 'not' intended to be
  the root filesystem for the target: it contains a lot of development
  files, unstripped binaries and libraries that make it far too big
  for an embedded system. These development files are used to compile
  libraries and applications for the target that depend on other
  libraries.

* +target/+ which contains 'almost' the complete root filesystem for
  the target: everything needed is present except the device files in
  +/dev/+ (Buildroot can't create them because Buildroot doesn't run
  as root and doesn't want to run as root). Therefore, this directory
  *should not be used on your target*.  Instead, you should use one of
  the images built in the +images/+ directory. If you need an
  extracted image of the root filesystem for booting over NFS, then
  use the tarball image generated in +images/+ and extract it as
  root. Compared to +staging/+, +target/+ contains only the files and
  libraries needed to run the selected target applications: the
  development files (headers, etc.) are not present, unless the
  +development files in target filesystem+ option is selected.

* +host/+ contains the installation of tools compiled for the host
  that are needed for the proper execution of Buildroot, including the
  cross-compilation toolchain.

* +toolchain/+ contains the build directories for the various
  components of the cross-compilation toolchain.

Offline builds
--------------

If you intend to do an offline build and just want to download
all sources that you previously selected in the configurator
('menuconfig', 'xconfig' or 'gconfig'), then issue:

--------------------
 $ make source
--------------------

You can now disconnect or copy the content of your +dl+
directory to the build-host.

Building out-of-tree
--------------------

Buildroot supports building out of tree with a syntax similar to the
Linux kernel. To use it, add +O=<directory>+ to the make command line:

--------------------
 $ make O=/tmp/build
--------------------

Or:

--------------------
 $ cd /tmp/build; make O=$PWD -C path/to/buildroot
--------------------

All the output files will be located under +/tmp/build+.

When using out-of-tree builds, the Buildroot +.config+ and temporary
files are also stored in the output directory. This means that you can
safely run multiple builds in parallel using the same source tree as
long as they use unique output directories.

For ease of use, Buildroot generates a Makefile wrapper in the output
directory - So after the first run, you no longer need to pass +O=..+
and +-C ..+, simply run (in the output directory):

--------------------
 $ make <target>
--------------------

Environment variables
---------------------
[[env-vars]]

Buildroot also honors some environment variables, when they are passed
to +make+ or set in the environment:

* +HOSTCXX+, the host C++ compiler to use
* +HOSTCC+, the host C compiler to use
* +UCLIBC_CONFIG_FILE=<path/to/.config>+, path to
  the uClibc configuration file, used to compile uClibc, if an
  internal toolchain is being built
* +BUSYBOX_CONFIG_FILE=<path/to/.config>+, path to
  the Busybox configuration file
* +BUILDROOT_DL_DIR+ to override the directory in which
  Buildroot stores/retrieves downloaded files

An example that uses config files located in the toplevel directory and
in your $HOME:

--------------------
 $ make UCLIBC_CONFIG_FILE=uClibc.config BUSYBOX_CONFIG_FILE=$HOME/bb.config
--------------------

If you want to use a compiler other than the default +gcc+
or +g+++ for building helper-binaries on your host, then do

--------------------
 $ make HOSTCXX=g++-4.3-HEAD HOSTCC=gcc-4.3-HEAD
--------------------
