// -*- mode:doc; -*-

Daily use
---------

include::rebuilding-packages.txt[]

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
~~~~~~~~~~~~~~~~~~~~

As default, everything built by Buildroot is stored in the directory
+output+ in the Buildroot tree.

Buildroot also 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>
--------------------

[[env-vars]]

Environment variables
~~~~~~~~~~~~~~~~~~~~~

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.
  +
  Note that the uClibc configuration file can also be set from the
  configuration interface, so through the Buildroot +.config+ file; this
  is the recommended way of setting it.
  +
* +BUSYBOX_CONFIG_FILE=<path/to/.config>+, path to
  the Busybox configuration file.
  +
  Note that the Busybox configuration file can also be set from the
  configuration interface, so through the Buildroot +.config+ file; this
  is the recommended way of setting it.
  +
* +BUILDROOT_DL_DIR+ to override the directory in which
  Buildroot stores/retrieves downloaded files
  +
  Note that the Buildroot download directory can also be set from the
  configuration interface, so through the Buildroot +.config+ file; this
  is the recommended way of setting it.

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