<!DOCTYPE html>
<html lang="en">

<head>
  <title>Buildroot - Usage and documentation</title>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  <link rel="stylesheet" href="stylesheet.css">
</head>

<body>
  <div class="main">
    <div class="titre">
      <h1>Buildroot</h1>
    </div>

    <p><a href="http://buildroot.net/">Buildroot</a> usage and documentation
    by Thomas Petazzoni. Contributions from Karsten Kruse, Ned Ludd, Martin
    Herren and others.</p>

    <ul>
      <li><a href="#about">About Buildroot</a></li>
      <li><a href="#download">Obtaining Buildroot</a></li>
      <li><a href="#using">Using Buildroot</a></li>
      <li><a href="#custom_targetfs">Customizing the generated target filesystem</a></li>
      <li><a href="#custom_busybox">Customizing the Busybox configuration</a></li>
      <li><a href="#custom_uclibc">Customizing the uClibc configuration</a></li>
      <li><a href="#custom_linux26">Customizing the Linux kernel configuration</a></li>
      <li><a href="#rebuilding_packages">Understanding how to rebuild packages</a></li>
      <li><a href="#buildroot_innards">How Buildroot works</a></li>
      <li><a href="#using_toolchain">Using the uClibc toolchain outside Buildroot</a></li>
      <li><a href="#external_toolchain">Use an external toolchain</a></li>
      <li><a href="#ccache-support">Using <code>ccache</code> in Buildroot</li>
      <li><a href="#downloaded_packages">Location of downloaded packages</a></li>
      <li><a href="#add_packages">Adding new packages to Buildroot</a></li>
      <li><a href="#board_support">Creating your own board support</a></li>
      <li><a href="#faq">Frequently asked questions</a></li>
      <li><a href="#links">Resources</a></li>
    </ul>

    <p><b>WARNING:</b> Since the 2011.11 release, this page is on its way to be
    deprecated. Information may be incomplete and out-dated.</p>

    <p>To get an up-to-date documentation for
    <a href="http://buildroot.net/">Buildroot</a>-2011.11 or a git view, just
    run:</p>
<pre>
  $ make manual
</pre>
    <p><i>This requires <code>asciidoc</code> installed on the host system.</i></p>

    <p>For releases since <a href="http://buildroot.net/">Buildroot</a>-2012.02,
    manuals (html, pdf and text) are available in the  <code>docs/manual</code>
    directory.</p>

    <h2 id="about">About Buildroot</h2>

    <p>Buildroot is a set of Makefiles and patches that allows you to easily
    generate a cross-compilation toolchain, a root filesystem and a Linux
    kernel image for your target. Buildroot can be used for one, two or all
    of these options, independently.</p>

    <p>Buildroot is useful mainly for people working with embedded systems.
    Embedded systems often use processors that are not the regular x86
    processors everyone is used to having in his PC. They can be PowerPC
    processors, MIPS processors, ARM processors, etc.</p>

    <p>A compilation toolchain is the set of tools that allows you to
    compile code for your system. It consists of a compiler (in our case,
    <code>gcc</code>), binary utils like assembler and linker (in our case,
    <code>binutils</code>) and a C standard library (for example
    <a href="http://www.gnu.org/software/libc/libc.html">GNU Libc</a>,
    <a href="http://www.uclibc.org/">uClibc</a> or
    <a href="http://www.fefe.de/dietlibc/">dietlibc</a>). The system installed
    on your development station certainly already has a compilation
    toolchain that you can use to compile an application that runs on your
    system. If you're using a PC, your compilation toolchain runs on an x86
    processor and generates code for an x86 processor. Under most Linux
    systems, the compilation toolchain uses the GNU libc (glibc) as the C
    standard library.  This compilation toolchain is called the &quot;host
    compilation toolchain&quot;. The machine on which it is running, and on
    which you're working, is called the &quot;host system&quot;. The
    compilation toolchain is provided by your distribution, and Buildroot
    has nothing to do with it (other than using it to build a
    cross-compilation toolchain and other tools that are run on the
    development host).</p>

    <p>As said above, the compilation toolchain that comes with your system
    runs on and generates code for the processor in your host system. As
    your embedded system has a different processor, you need a
    cross-compilation toolchain &mdash; a compilation toolchain that runs on
    your host system but generates code for your target system (and target
    processor). For example, if your host system uses x86 and your target
    system uses ARM, the regular compilation toolchain on your host runs on
    x86 and generates code for x86, while the cross-compilation toolchain
    runs on x86 and generates code for ARM.</p>

    <p>Even if your embedded system uses an x86 processor, you might be
    interested in Buildroot for two reasons:</p>

    <ul>
      <li>The compilation toolchain on your host certainly uses the GNU Libc
      which is a complete but huge C standard library. Instead of using GNU
      Libc on your target system, you can use uClibc which is a tiny C
      standard library. If you want to use this C library, then you need a
      compilation toolchain to generate binaries linked with it. Buildroot
      can do that for you.</li>

      <li>Buildroot automates the building of a root filesystem with all needed
      tools like busybox. That makes it much easier than doing it by hand.</li>
    </ul>

    <p>You might wonder why such a tool is needed when you can compile
    <code>gcc</code>, <code>binutils</code>, <code>uClibc</code> and all
    the other tools by hand. Of course doing so is possible but, dealing with
    all of the configure options and problems of every <code>gcc</code> or
    <code>binutils</code> version is very time-consuming and uninteresting.
    Buildroot automates this process through the use of Makefiles and has a
    collection of patches for each <code>gcc</code> and <code>binutils</code>
    version to make them work on most architectures.</p>

    <p>Moreover, Buildroot provides an infrastructure for reproducing
    the build process of your kernel, cross-toolchain, and embedded root
    filesystem. Being able to reproduce the build process will be useful when a
    component needs to be patched or updated or when another person is supposed
    to take over the project.</p>

    <h2 id="download">Obtaining Buildroot</h2>

    <p>Buildroot releases are made approximately every 3
    months. Direct Git access and daily snapshots are also
    available, if you want more bleeding edge.</p>

    <p>Releases are available at
    <a href="http://buildroot.net/downloads/">http://buildroot.net/downloads/</a>.</p>

    <p>The latest snapshot is always available at
    <a href="http://buildroot.net/downloads/snapshots/buildroot-snapshot.tar.bz2">http://buildroot.net/downloads/snapshots/buildroot-snapshot.tar.bz2</a>,
    and previous snapshots are also available at
    <a href="http://buildroot.net/downloads/snapshots/">http://buildroot.net/downloads/snapshots/</a>.</p>

    <p>To download Buildroot using Git, you can simply follow
    the rules described on the &quot;Accessing Git&quot; page
    (<a href= "http://buildroot.net/git.html">http://buildroot.net/git.html</a>)
    of the Buildroot website
    (<a href="http://buildroot.net">http://buildroot.net</a>).
    For the impatient, here's a quick recipe:</p>

<pre>
 $ git clone git://git.buildroot.net/buildroot
</pre>

    <h2 id="using">Using Buildroot</h2>

    <p>Buildroot has a nice configuration tool similar to the one you can find
    in the Linux kernel
    (<a href="http://www.kernel.org/">http://www.kernel.org/</a>) or in Busybox
    (<a href="http://www.busybox.net/">http://www.busybox.net/</a>). 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:</p>

<pre>
 $ make menuconfig
</pre>

    <p>to run the curses-based configurator, or</p>

<pre>
 $ make xconfig
</pre>

    <p>or</p>

<pre>
 $ make gconfig
</pre>

    <p>to run the Qt or GTK-based configurators.</p>

    <p>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 <code>libncurses5-dev</code> package is required to use the <i>
    menuconfig</i> interface, <code>libqt4-dev</code> is required to use
    the <i>xconfig</i> interface, and <code>libglib2.0-dev, libgtk2.0-dev
    and libglade2-dev</code> are needed to use the <i>gconfig</i> interface.</p>

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

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


    <p>Let's go:</p>

<pre>
 $ make
</pre>

    <p>You <b>should never</b> use <code>make -jN</code> with
    Buildroot: it does not support <i>top-level parallel
    make</i>. Instead, use the <code>BR2_JLEVEL</code> option to tell
    Buildroot to run each package compilation with <code>make
    -jN</code>.</p>

    <p>This command will generally perform the following steps:</p>
    <ul>
      <li>Download source files (as required)</li>
      <li>Configure, build and install the cross-compiling toolchain
      if an internal toolchain is used, or import a toolchain if an
      external toolchain is used</li>
      <li>Build/install selected target packages</li>
      <li>Build a kernel image, if selected</li>
      <li>Build a bootloader image, if selected</li>
      <li>Create a root filesystem in selected formats</li>
    </ul>

    <p>Buildroot output is stored in a single directory, <code>output/</code>.
    This directory contains several subdirectories:</p>

    <ul>
      <li><code>images/</code> where all the images (kernel image,
      bootloader and root filesystem images) are stored.</li>

      <li><code>build/</code> 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
      <code>build/</code> directory contains one subdirectory for each of
      these components.</li>

      <li><code>staging/</code> 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 <i>not</i> 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.</li>

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

      <li><code>host/</code> contains the installation of tools compiled for
      the host that are needed for the proper execution of Buildroot,
      including the cross-compilation toolchain.</li>

      <li><code>toolchain/</code> contains the build directories for the
      various components of the cross-compilation toolchain.</li>
    </ul>

    <h3 id="offline_builds">Offline builds</h3>

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

<pre>
 $ make source
</pre>

    <p>You can now disconnect or copy the content of your <code>dl</code>
    directory to the build-host.</p>

    <h3 id="building_out_of_tree">Building out-of-tree</h3>

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

<pre>
 $ make O=/tmp/build
</pre>

    <p>Or:</p>

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

    <p>All the output files will be located under <code>/tmp/build</code>.</p>

    <p>When using out-of-tree builds, the Buildroot <code>.config</code> 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.</p>

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

<pre>
 $ make &lt;target&gt;
</pre>

    <h3 id="environment_variables">Environment variables</h3>

    <p>Buildroot also honors some environment variables, when they are passed
    to <code>make</code> or set in the environment:</p>
    <ul>
      <li><code>HOSTCXX</code>, the host C++ compiler to use</li>
      <li><code>HOSTCC</code>, the host C compiler to use</li>
      <li><code>UCLIBC_CONFIG_FILE=&lt;path/to/.config&gt;</code>, path to
      the uClibc configuration file, used to compile uClibc, if an
      internal toolchain is being built</li>
      <li><code>BUSYBOX_CONFIG_FILE=&lt;path/to/.config&gt;</code>, path to
      the Busybox configuration file</li>
      <li><code>BUILDROOT_DL_DIR</code> to override the directory in which
      Buildroot stores/retrieves downloaded files</li>
    </ul>

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

<pre>
 $ make UCLIBC_CONFIG_FILE=uClibc.config BUSYBOX_CONFIG_FILE=$HOME/bb.config
</pre>

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

<pre>
 $ make HOSTCXX=g++-4.3-HEAD HOSTCC=gcc-4.3-HEAD
</pre>

	<h2 id="custom_targetfs">Customizing the generated target filesystem</h2>

    <p>There are a few ways to customize the resulting target filesystem:</p>

    <ul>
      <li>Customize the target filesystem directly and rebuild the image.
      The target filesystem is available under <code>output/target/</code>.
      You can simply make your changes here and run make afterwards &mdash;
      this will rebuild the target filesystem image. This method allows you
      to do anything to the target filesystem, but if you decide to
      completely rebuild your toolchain and tools, these changes will be
      lost.</li>

      <li>Create your own <i>target skeleton</i>. You can start with
      the default skeleton available under <code>fs/skeleton</code>
      and then customize it to suit your
      needs. The <code>BR2_ROOTFS_SKELETON_CUSTOM</code>
      and <code>BR2_ROOTFS_SKELETON_CUSTOM_PATH</code> will allow you
      to specify the location of your custom skeleton. At build time,
      the contents of the skeleton are copied to output/target before
      any package installation.</li>

      <li>In the Buildroot configuration, you can specify the path to a
      post-build script, that gets called <i>after</i> Buildroot builds all
      the selected software, but <i>before</i> the rootfs packages are
      assembled. The destination root filesystem folder is given as the
      first argument to this script, and this script can then be used to
      copy programs, static data or any other needed file to your target
      filesystem.<br/>You should, however, use this feature with care.
      Whenever you find that a certain package generates wrong or unneeded
      files, you should fix that package rather than work around it with a
      post-build cleanup script.</li>

      <li>A special package, <i>customize</i>, stored in
      <code>package/customize</code> can be used. You can put all the
      files that you want to see in the final target root filesystem
      in <code>package/customize/source</code>, and then enable this
      special package in the configuration system.</li>
    </ul>

    <h2 id="custom_busybox">Customizing the Busybox configuration</h2>

    <p><a href="http://www.busybox.net/">Busybox</a> is very configurable,
    and you may want to customize it. You can follow these simple steps to
    do so. This method isn't optimal, but it's simple, and it works:</p>

    <ol>
      <li>Do an initial compilation of Buildroot, with busybox, without
      trying to customize it.</li>

      <li>Invoke <code>make busybox-menuconfig</code>.
      The nice configuration tool appears, and you can
      customize everything.</li>

      <li>Run the compilation of Buildroot again.</li>
    </ol>

    <p>Otherwise, you can simply change the
    <code>package/busybox/busybox-&lt;version&gt;.config</code> file, if you
    know the options you want to change, without using the configuration tool.
    </p>

    <p>If you want to use an existing config file for busybox, then see
    section <a href="#environment_variables">environment variables</a>.</p>

    <h2 id="custom_uclibc">Customizing the uClibc configuration</h2>

    <p>Just like <a href="#custom_busybox">BusyBox</a>,
    <a href="http://www.uclibc.org/">uClibc</a> offers a lot of
    configuration options. They allow you to select various
    functionalities depending on your needs and limitations.</p>

    <p>The easiest way to modify the configuration of uClibc is to
    follow these steps:</p>

    <ol>
      <li>Do an initial compilation of Buildroot without trying to
      customize uClibc.</li>

      <li>Invoke <code>make uclibc-menuconfig</code>.
      The nice configuration assistant, similar to
      the one used in the Linux kernel or Buildroot, appears. Make
      your configuration changes as appropriate.</li>

      <li>Copy the <code>$(O)/toolchain/uclibc-VERSION/.config</code>
      file to a different place
      (like <code>toolchain/uClibc/uClibc-myconfig.config</code>,
      or <code>board/mymanufacturer/myboard/uClibc.config</code>) and
      adjust the uClibc configuration (configuration
      option <code>BR2_UCLIBC_CONFIG</code>) to use this configuration
      instead of the default one.</li>

      <li>Run the compilation of Buildroot again.</li>
    </ol>

    <p>Otherwise, you can simply change
    <code>toolchain/uClibc/uClibc.config</code>, without running the
    configuration assistant.</p>

    <p>If you want to use an existing config file for uclibc, then see
    section <a href="#environment_variables">environment variables</a>.</p>

    <h2 id="custom_linux26">Customizing the Linux kernel configuration</h2>

    <p>The Linux kernel configuration can be customized just like
    <a href="#custom_busybox">BusyBox</a> and
    <a href="#custom_uclibc">uClibc</a> using <code>make linux-menuconfig
    </code>. Make sure you have enabled the kernel build in <code>make
    menuconfig</code> first. Once done, run <code>make</code> to (re)build
    everything.</p>

    <p>If you want to use an existing config file for Linux, then see
    section <a href="#environment_variables">environment variables</a>.</p>

    <h2 id="rebuilding_packages">Understanding how to rebuild packages</h2>

    <p>One of the most common questions asked by Buildroot
    users is how to rebuild a given package or how to
    remove a package without rebuilding everything from scratch.</p>

    <p>Removing a package is currently unsupported by Buildroot
    without rebuilding from scratch. This is because Buildroot doesn't
    keep track of which package installs what files in the
    <code>output/staging</code> and <code>output/target</code>
    directories. However, implementing clean package removal is on the
    TODO-list of Buildroot developers.</p>

    <p>The easiest way to rebuild a single package from scratch is to
    remove its build directory in <code>output/build</code>. Buildroot
    will then re-extract, re-configure, re-compile and re-install this
    package from scratch.</p>

    <p>However, if you don't want to rebuild the package completely
    from scratch, a better understanding of the Buildroot internals is
    needed. Internally, to keep track of which steps have been done
    and which steps remain to be done, Buildroot maintains stamp
    files (empty files that just tell whether this or that action
    has been done). The problem is that these stamp files are not
    uniformly named and handled by the different packages, so some
    understanding of the particular package is needed.</p>

    <p>For packages relying on Buildroot packages infrastructures (see
    <a href="#add_packages">this section</a> for details), the
    following stamp files are relevant:</p>

    <ul>
      <li><code>output/build/packagename-version/.stamp_configured</code>. If
      removed, Buildroot will trigger the recompilation of the package
      from the configuration step (execution of
      <code>./configure</code>).</li>

      <li><code>output/build/packagename-version/.stamp_built</code>. If
      removed, Buildroot will trigger the recompilation of the package
      from the compilation step (execution of <code>make</code>).</li>
    </ul>

    <p>For other packages, an analysis of the specific <i>package.mk</i>
    file is needed. For example, the zlib Makefile used to look like this
    (before it was converted to the generic package infrastructure):</p>

<pre>
$(ZLIB_DIR)/.configured: $(ZLIB_DIR)/.patched
	(cd $(ZLIB_DIR); rm -rf config.cache; \
		[...]
	)
	touch $@

$(ZLIB_DIR)/libz.a: $(ZLIB_DIR)/.configured
	$(MAKE) -C $(ZLIB_DIR) all libz.a
	touch -c $@
</pre>

    <p>If you want to trigger the reconfiguration, you need to
    remove <code>output/build/zlib-version/.configured</code>. If
    you want to trigger only the recompilation, you need to remove
    <code>output/build/zlib-version/libz.a</code>.</p>

    <p>Note that most packages, if not all, will progressively be
    ported over to the generic or autotools infrastructure, making it
    much easier to rebuild individual packages.</p>

    <h2 id="buildroot_innards">How Buildroot works</h2>

    <p>As mentioned above, Buildroot is basically a set of Makefiles that
    download, configure, and compile software with the correct options. It
    also includes patches for various software packages &mdash;  mainly the
    ones involved in the cross-compilation tool chain (<code>gcc</code>,
    <code>binutils</code> and <code>uClibc</code>).</p>

    <p>There is basically one Makefile per software package, and they are
    named with the <code>.mk</code> extension. Makefiles are split into
    three main sections:</p>

    <ul>
      <li><b>toolchain</b> (in the <code>toolchain/</code> directory) contains
      the Makefiles and associated files for all software related to the
      cross-compilation toolchain: <code>binutils</code>, <code>gcc</code>,
      <code>gdb</code>, <code>kernel-headers</code> and <code>uClibc</code>.</li>

      <li><b>package</b> (in the <code>package/</code> directory) contains the
      Makefiles and associated files for all user-space tools that Buildroot
      can compile and add to the target root filesystem. There is one
      sub-directory per tool.</li>

      <li><b>target</b> (in the <code>target</code> directory) contains the
      Makefiles and associated files for software related to the generation of
      the target root filesystem image. Four types of filesystems are supported:
      ext2, jffs2, cramfs and squashfs. For each of them there is a
      sub-directory with the required files. There is also a
      <code>default/</code> directory that contains the target filesystem
      skeleton.</li>
    </ul>

    <p>Each directory contains at least 2 files:</p>

    <ul>
      <li><code>something.mk</code> is the Makefile that downloads, configures,
      compiles and installs the package <code>something</code>.</li>

      <li><code>Config.in</code> is a part of the configuration tool
      description file. It describes the options related to the
      package.</li>
    </ul>

    <p>The main Makefile performs the following steps (once the
    configuration is done):</p>

    <ol>
      <li>Create all the output directories: <code>staging</code>,
      <code>target</code>, <code>build</code>, <code>stamps</code>,
      etc. in the output directory (<code>output/</code> by default,
      another value can be specified using <code>O=</code>)</li>

      <li>Generate all the targets listed in the
      <code>BASE_TARGETS</code> variable. When an internal toolchain
      is used, this means generating the cross-compilation
      toolchain. When an external toolchain is used, this means checking
      the features of the external toolchain and importing it into the
      Buildroot environment.</li>

      <li>Generate all the targets listed in the <code>TARGETS</code>
      variable. This variable is filled by all the individual
      components' Makefiles. Generating these targets will
      trigger the compilation of the userspace packages (libraries,
      programs), the kernel, the bootloader and the generation of the
      root filesystem images, depending on the configuration.</li>
    </ol>

    <h2 id="board_support"> Creating your own board support</h2>

    <p>Creating your own board support in Buildroot allows users of a
    particular hardware platform to easily build a system that is
    known to work.</p>

    <p>To do so, you need to create a normal Buildroot configuration
    that builds a basic system for the hardware: toolchain, kernel,
    bootloader, filesystem and a simple Busybox-only userspace. No
    specific package should be selected: the configuration should be
    as minimal as possible, and should only build a working basic
    Busybox system for the target platform. You can of course use more
    complicated configurations for your internal projects, but the
    Buildroot project will only integrate basic board
    configurations. This is because package selections are highly
    application-specific.</p>

    <p>Once you have a known working configuration, run <code>make
    savedefconfig</code>. This will generate a
    minimal <code>defconfig</code> file at the root of the Buildroot
    source tree. Move this file into the <code>configs/</code>
    directory, and rename it <code>MYBOARD_defconfig</code>.</p>

    <p>It is recommended to use as much as possible upstream versions
    of the Linux kernel and bootloaders, and to use as much as
    possible default kernel and bootloader configurations. If they are
    incorrect for your platform, we encourage you to send fixes to the
    corresponding upstream projects.</p>

    <p>However, in the mean time, you may want to store kernel or
    bootloader configuration or patches specific to your target
    platform. To do so, create a
    directory <code>board/MANUFACTURER</code> and a
    subdirectory <code>board/MANUFACTURER/BOARDNAME</code> (after
    replacing, of course, MANUFACTURER and BOARDNAME with the
    appropriate values, in lower case letters). You can then store
    your patches and configurations in these directories, and
    reference them from the main Buildroot configuration.</p>

    <h2 id="using_toolchain">Using the generated toolchain outside Buildroot</h2>

    <p>You may want to compile, for your target, your own programs or other
    software that are not packaged in Buildroot. In order to do this you can
    use the toolchain that was generated by Buildroot.</p>

    <p>The toolchain generated by Buildroot is located by default in
    <code>output/host/</code>. The simplest way to use it is to add
    <code>output/host/usr/bin/</code> to your PATH environment variable and
    then to use <code>ARCH-linux-gcc</code>, <code>ARCH-linux-objdump</code>,
    <code>ARCH-linux-ld</code>, etc.</p>

    <p>It is possible to relocate the toolchain &mdash; but
    then <code>--sysroot</code> must be passed every time the compiler
    is called to tell where the libraries and header files are.</p>

    <p>It is also possible to generate the Buildroot toolchain in a
    directory other than <code>output/host</code> by using the <code>
    Build options -&gt; Host dir</code> option.
    This could be useful if the toolchain must be shared with other users.</p>

    <h2 id="ccache-support">Using <code>ccache</code> in Buildroot</h2>

    <p><a href="http://ccache.samba.org">ccache</a> is a compiler
    cache. It stores the object files resulting from each compilation
    process, and is able to skip future compilation of the same source
    file (with same compiler and same arguments) by using the
    pre-existing object files. When doing almost identical builds from
    scratch a number of times, it can nicely speed up the build
    process.</p>

    <p><code>ccache</code> support is integrated in Buildroot. You
    just have to enable <code>Enable compiler cache</code>
    in <code>Build options</code>. This will automatically build
    <code>ccache</code> and use it for every host and target
    compilation.</p>

    <p>The cache is located
    in <code>$HOME/.buildroot-ccache</code>. It is stored outside of
    Buildroot output directory so that it can be shared by separate
    Buildroot builds. If you want to get rid of the cache, simply
    remove this directory.</p>

    <p>You can get statistics on the cache (its size, number of hits,
    misses, etc.) by running <code>make ccache-stats</code>.</p>

    <h2 id="downloaded_packages">Location of downloaded packages</h2>

    <p>It might be useful to know that the various tarballs that are
    downloaded by the Makefiles are all stored in the <code>DL_DIR</code>
    which by default is the <code>dl</code> directory. It's useful, for
    example, if you want to keep a complete version of Buildroot which is
    known to be working with the associated tarballs. This will allow you to
    regenerate the toolchain and the target filesystem with exactly the same
    versions.</p>

    <p>If you maintain several Buildroot trees, it might be better to have a
    shared download location. This can be accessed by creating a symbolic
    link from the <code>dl</code> directory to the shared download location:</p>

<pre>
 $ ln -s &lt;shared download location&gt; dl
</pre>

    <p>Another way of accessing a shared download location is to
    create the <code>BUILDROOT_DL_DIR</code> environment variable.
    If this is set, then the value of DL_DIR in the project is
    overridden. The following line should be added to
    <code>&quot;~/.bashrc&quot;</code>.</p>

<pre>
 $ export BUILDROOT_DL_DIR &lt;shared download location&gt;
</pre>

    <h2 id="external_toolchain">Using an external toolchain</h2>

    <p>Using an already existing toolchain is useful for different
    reasons:</p>

    <ul>
      <li>you already have a toolchain that is known to work for your
	specific CPU</li>
      <li>you want to speed up the Buildroot build process by skipping
      the long toolchain build part</li>
      <li>the toolchain generation feature of Buildroot is not
	sufficiently flexible for you (for example if you need to
	generate a system with <i>glibc</i> instead of
	<i>uClibc</i>)</li>
    </ul>

    <p>Buildroot supports using existing toolchains through a
    mechanism called <i>external toolchain</i>. The external toolchain
    mechanism is enabled in the <code>Toolchain</code> menu, by
    selecting <code>External toolchain</code> in <code>Toolchain
    type</code>.</p>

    <p>Then, you have three solutions to use an external
    toolchain:</p>

    <ul>

      <li>Use a predefined external toolchain profile, and let
      Buildroot download, extract and install the toolchain. Buildroot
      already knows about a few CodeSourcery toolchains for ARM,
      PowerPC, MIPS and SuperH. Just select the toolchain profile
      in <code>Toolchain</code> through the available ones. This is
      definitely the easiest solution.</li>

      <li>Use a predefined external toolchain profile, but instead of
      having Buildroot download and extract the toolchain, you can
      tell Buildroot where your toolchain is already installed on your
      system. Just select the toolchain profile
      in <code>Toolchain</code> through the available ones,
      unselect <code>Download toolchain automatically</code>, and fill
      the <code>Toolchain path</code> text entry with the path to your
      cross-compiling toolchain.</li>

      <li>Use a completely custom external toolchain. This is
      particularly useful for toolchains generated using
      Crosstool-NG. To do this, select the <code>Custom
      toolchain</code> solution in the <code>Toolchain</code>
      list. You need to fill the <code>Toolchain
      path</code>, <code>Toolchain prefix</code> and <code>External
      toolchain C library</code> options. Then, you have to tell
      Buildroot what your external toolchain supports. If your
      external toolchain uses the <i>glibc</i> library, you only have
      to tell whether your toolchain supports C++ or not. If your
      external toolchain uses the <i>uclibc</i> library, then you have
      to tell Buildroot if it supports largefile, IPv6, RPC,
      wide-char, locale, program invocation, threads and C++. At the
      beginning of the execution, Buildroot will tell you if the
      selected options do not match the toolchain configuration.</li>

    </ul>

    <p>Our external toolchain support has been tested with toolchains
    from CodeSourcery, toolchains generated
    by <a href="http://ymorin.is-a-geek.org/dokuwiki/projects/crosstool">Crosstool-NG</a>,
    and toolchains generated by Buildroot itself. In general, all
    toolchains that support the <i>sysroot</i> feature should
    work. If not, do not hesitate to contact the developers.</p>

    <p>We do not support toolchains from
    the <a href="http://www.denx.de/wiki/DULG/ELDK">ELDK of Denx</a>,
    for two reasons:</p>

    <ul>

      <li>The ELDK does not contain a pure toolchain (i.e just the
      compiler, binutils, the C and C++ libraries), but a toolchain
      that comes with a very large set of pre-compiled libraries and
      programs. Therefore, Buildroot cannot import the <i>sysroot</i>
      of the toolchain, as it would contain hundreds of megabytes of
      pre-compiled libraries that are normally built by
      Buildroot.</li>

      <li>The ELDK toolchains have a completely non-standard custom
      mechanism to handle multiple library variants. Instead of using
      the standard GCC <i>multilib</i> mechanism, the ARM ELDK uses
      different symbolic links to the compiler to differentiate
      between library variants (for ARM soft-float and ARM VFP), and
      the PowerPC ELDK compiler uses a <code>CROSS_COMPILE</code>
      environment variable. This non-standard behaviour makes it
      difficult to support ELDK in Buildroot.</li>

    </ul>

    <p>We also do not support using the distribution toolchain (i.e
    the gcc/binutils/C library installed by your distribution) as the
    toolchain to build software for the target. This is because your
    distribution toolchain is not a "pure" toolchain (i.e only with
    the C/C++ library), so we cannot import it properly into the
    Buildroot build environment. So even if you are building a system
    for a x86 or x86_64 target, you have to generate a
    cross-compilation toolchain with Buildroot or Crosstool-NG.</p>

    <h2 id="add_packages">Adding new packages to Buildroot</h2>

    <p>This section covers how new packages (userspace libraries or
    applications) can be integrated into Buildroot. It also shows how existing
    packages are integrated, which is needed for fixing issues or tuning their
    configuration.</p>

    <ul>
      <li><a href="#package-directory">Package directory</a></li>
      <li><a href="#config-in-file"><code>Config.in</code> file</a></li>
      <li><a href="#mk-file">The <code>.mk</code> file</a>
        <ul>
          <li><a href="#generic-tutorial">Makefile for generic packages : tutorial</a></li>
          <li><a href="#generic-reference">Makefile for generic packages : reference</a></li>
          <li><a href="#autotools-tutorial">Makefile for autotools-based packages : tutorial</a></li>
          <li><a href="#autotools-reference">Makefile for autotools-based packages : reference</a></li>
          <li><a href="#cmake-tutorial">Makefile for CMake-based packages : tutorial</a></li>
          <li><a href="#cmake-reference">Makefile for CMake-based packages : reference</a></li>
          <li><a href="#manual-tutorial">Manual Makefile : tutorial</a></li>
        </ul>
      </li>
      <li><a href="#gettext-integration">Gettext integration and interaction with packages</a></li>
    </ul>

    <h3 id="package-directory">Package directory</h3>

    <p>First of all, create a directory under the <code>package</code>
    directory for your software, for example <code>libfoo</code>.</p>

    <p>Some packages have been grouped by topic in a sub-directory:
    <code>multimedia</code>, <code>x11r7</code>, and
    <code>games</code>. If your package fits in one of these
    categories, then create your package directory in these.</p>

    <h3 id="config-in-file"><code>Config.in</code> file</h3>

    <p>Then, create a file named <code>Config.in</code>. This file
    will contain the option descriptions related to our
    <code>libfoo</code> software that will be used and displayed in the
    configuration tool. It should basically contain :</p>

<pre>
config BR2_PACKAGE_LIBFOO
	bool "libfoo"
	help
	  This is a comment that explains what libfoo is.

	  http://foosoftware.org/libfoo/
</pre>

    <p>Of course, you can add other options to configure particular
    things in your software. You can look at examples in other
    packages. The syntax of the Config.in file is the same as the one
    for the kernel Kconfig file. The documentation for this syntax is
    available at
    <a href="http://lxr.free-electrons.com/source/Documentation/kbuild/kconfig-language.txt">http://lxr.free-electrons.com/source/Documentation/kbuild/kconfig-language.txt</a>
    </p>

    <p>Finally you have to add your new <code>libfoo/Config.in</code> to
    <code>package/Config.in</code> (or in a category subdirectory if
    you decided to put your package in one of the existing
    categories). The files included there are <em>sorted
    alphabetically</em> per category and are <em>NOT</em> supposed to
    contain anything but the <em>bare</em> name of the package.</p>

<pre>
source "package/libfoo/Config.in"
</pre>

    <h3 id="mk-file">The <code>.mk</code> file</h3>

    <p>Finally, here's the hardest part. Create a file named
    <code>libfoo.mk</code>. It describes how the package should be
    downloaded, configured, built, installed, etc.</p>

    <p>Depending on the package type, the <code>.mk</code> file must be
    written in a different way, using different infrastructures:</p>

    <ul>
      <li><b>Makefiles for generic packages</b> (not using autotools): These
      are based on an infrastructure similar to the one used for
      autotools-based packages, but requires a little more work from the
      developer. They specify what should be done for the configuration,
      compilation, installation and cleanup of the package. This
      infrastructure must be used for all packages that do not use the
      autotools as their build system. In the future, other specialized
      infrastructures might be written for other build systems.<br/>We cover
      them through a <a href="#generic-tutorial">tutorial</a> and a
      <a href="#generic-reference">reference</a>.</li>

      <li><b>Makefiles for autotools-based software</b> (autoconf, automake,
      etc.): We provide a dedicated infrastructure for such packages, since
      autotools is a very common build system. This infrastructure <i>must
      </i> be used for new packages that rely on the autotools as their
      build system.<br/>We cover them through a
      <a href="#autotools-tutorial">tutorial</a> and a
      <a href="#autotools-reference">reference</a>.</li>

      <li><b>Manual Makefiles:</b> These are currently obsolete, and no new
      manual Makefiles should be added. However, since there are still many
      of them in the tree, we keep them documented in a
      <a href="#manual-tutorial">tutorial</a>.</li>
    </ul>

    <h4 id="generic-tutorial">Makefile for generic packages : tutorial</h4>

<pre>
<span style="color: #000000">01:</span><span style="font-style: italic; color: #9A1900"> #############################################################</span>
<span style="color: #000000">02:</span><span style="font-style: italic; color: #9A1900"> #</span>
<span style="color: #000000">03:</span><span style="font-style: italic; color: #9A1900"> # libfoo</span>
<span style="color: #000000">04:</span><span style="font-style: italic; color: #9A1900"> #</span>
<span style="color: #000000">05:</span><span style="font-style: italic; color: #9A1900"> #############################################################</span>
<span style="color: #000000">06:</span><span style="color: #009900"> LIBFOO_VERSION</span> = 1.0
<span style="color: #000000">07:</span><span style="color: #009900"> LIBFOO_SOURCE</span> = libfoo-<span style="color: #009900">$(LIBFOO_VERSION)</span>.tar.gz
<span style="color: #000000">08:</span><span style="color: #009900"> LIBFOO_SITE</span> = http://www.foosoftware.org/download
<span style="color: #000000">09:</span><span style="color: #009900"> LIBFOO_INSTALL_STAGING</span> = YES
<span style="color: #000000">10:</span><span style="color: #009900"> LIBFOO_DEPENDENCIES</span> = host-libaaa libbbb
<span style="color: #000000">11:</span>
<span style="color: #000000">12:</span> define LIBFOO_BUILD_CMDS
<span style="color: #000000">13:</span> 	<span style="color: #009900">$(MAKE)</span> CC=<span style="color: #009900">"$(TARGET_CC)"</span> LD=<span style="color: #009900">"$(TARGET_LD)"</span> -C <span style="color: #009900">$(@D)</span> all
<span style="color: #000000">14:</span> endef
<span style="color: #000000">15:</span>
<span style="color: #000000">16:</span> define LIBFOO_INSTALL_STAGING_CMDS
<span style="color: #000000">17:</span> 	<span style="color: #009900">$(INSTALL)</span> -D -m 0755 <span style="color: #009900">$(@D)</span>/libfoo.a <span style="color: #009900">$(STAGING_DIR)</span>/usr/lib/libfoo.a
<span style="color: #000000">18:</span> 	<span style="color: #009900">$(INSTALL)</span> -D -m 0644 <span style="color: #009900">$(@D)</span>/foo.h <span style="color: #009900">$(STAGING_DIR)</span>/usr/include/foo.h
<span style="color: #000000">19:</span> 	<span style="color: #009900">$(INSTALL)</span> -D -m 0755 <span style="color: #009900">$(@D)</span>/libfoo.so* <span style="color: #009900">$(STAGING_DIR)</span>/usr/lib
<span style="color: #000000">20:</span> endef
<span style="color: #000000">21:</span>
<span style="color: #000000">22:</span> define LIBFOO_INSTALL_TARGET_CMDS
<span style="color: #000000">23:</span> 	<span style="color: #009900">$(INSTALL)</span> -D -m 0755 <span style="color: #009900">$(@D)</span>/libfoo.so* <span style="color: #009900">$(TARGET_DIR)</span>/usr/lib
<span style="color: #000000">24:</span> 	<span style="color: #009900">$(INSTALL)</span> -d -m 0755 <span style="color: #009900">$(TARGET_DIR)</span>/etc/foo.d
<span style="color: #000000">25:</span> endef
<span style="color: #000000">26:</span>
<span style="color: #000000">27:</span><span style="color: #009900"> $(eval $(call GENTARGETS,package,libfoo))</span>
</pre>

    <p>The Makefile begins on line 6 to 8 with metadata information: the
    version of the package (<code>LIBFOO_VERSION</code>), the name of the
    tarball containing the package (<code>LIBFOO_SOURCE</code>) and the
    Internet location at which the tarball can be downloaded
    (<code>LIBFOO_SITE</code>). All variables must start with the same prefix,
    <code>LIBFOO_</code> in this case. This prefix is always the uppercased
    version of the package name (see below to understand where the package
    name is defined).</p>

    <p>On line 9, we specify that this package wants to install something to
    the staging space. This is often needed for libraries, since they must
    install header files and other development files in the staging space.
    This will ensure that the commands listed in the
    <code>LIBFOO_INSTALL_STAGING_CMDS</code> variable will be executed.</p>

    <p>On line 10, we specify the list of dependencies this package relies
    on. These dependencies are listed in terms of lower-case package names,
    which can be packages for the target (without the <code>host-</code>
    prefix) or packages for the host (with the <code>host-</code>) prefix).
    Buildroot will ensure that all these packages are built and installed
    <i>before</i> the current package starts its configuration.</p>

    <p>The rest of the Makefile defines what should be done at the different
    steps of the package configuration, compilation and installation.
    <code>LIBFOO_BUILD_CMDS</code> tells what steps should be performed to
    build the package. <code>LIBFOO_INSTALL_STAGING_CMDS</code> tells what
    steps should be performed to install the package in the staging space.
    <code>LIBFOO_INSTALL_TARGET_CMDS</code> tells what steps should be
    performed to install the package in the target space.</p>

    <p>All these steps rely on the <code>$(@D)</code> variable, which
    contains the directory where the source code of the package has been
    extracted.</p>

    <p>Finally, on line 27, we call the <code>GENTARGETS</code> which
    generates, according to the variables defined previously, all the
    Makefile code necessary to make your package working.</p>

    <h4 id="generic-reference">Makefile for generic packages : reference</h4>

    <p>The <code>GENTARGETS</code> macro takes three arguments:</p>

    <ul>
      <li>The first argument is the package directory prefix. If your
      package is in <code>package/libfoo</code>, then the directory prefix
      is <code>package</code>. If your package is in
      <code>package/editors/foo</code>, then the directory prefix must be
      <code>package/editors</code>.</li>

      <li>The second argument is the lower-cased package name. It must match
      the prefix of the variables in the <code>.mk</code> file and must
      match the configuration option name in the <code>Config.in</code>
      file. For example, if the package name is <code>libfoo</code>, then the
      variables in the <code>.mk</code> file must start with
      <code>LIBFOO_</code> and the configuration option in the
      <code>Config.in</code> file must be <code>BR2_PACKAGE_LIBFOO</code>.</li>

      <li>The third argument is optional. It can be used to tell if the
      package is a target package (cross-compiled for the target) or a host
      package (natively compiled for the host). If unspecified, it is
      assumed that it is a target package. See below for details.</li>
    </ul>

    <p>For a given package, in a single <code>.mk</code> file, it is
    possible to call GENTARGETS twice, once to create the rules to generate
    a target package and once to create the rules to generate a host package:
    </p>

<pre>
$(eval $(call GENTARGETS,package,libfoo))
$(eval $(call GENTARGETS,package,libfoo,host))
</pre>

    <p>This might be useful if the compilation of the target package
    requires some tools to be installed on the host. If the package name is
    <code>libfoo</code>, then the name of the package for the target is also
    <code>libfoo</code>, while the name of the package for the host is
    <code>host-libfoo</code>. These names should be used in the DEPENDENCIES
    variables of other packages, if they depend on <code>libfoo</code> or
    <code>host-libfoo</code>.</p>

    <p>The call to the <code>GENTARGETS</code> macro <b>must</b> be at the
    end of the <code>.mk</code> file, after all variable definitions.</p>

    <p>For the target package, the <code>GENTARGETS</code> uses the
    variables defined by the .mk file and prefixed by the uppercased package
    name: <code>LIBFOO_*</code>. For the host package, it uses the
    <code>HOST_LIBFOO_*</code>. For <i>some</i> variables, if the
    <code>HOST_LIBFOO_</code> prefixed variable doesn't exist, the package
    infrastructure uses the corresponding variable prefixed by
    <code>LIBFOO_</code>. This is done for variables that are likely to have
    the same value for both the target and host packages. See below for
    details.</p>

    <p>The list of variables that can be set in a <code>.mk</code> file to
    give metadata information is (assuming the package name is
    <code>libfoo</code>) :</p>

    <ul>
      <li><code>LIBFOO_VERSION</code>, mandatory, must contain the
      version of the package. Note that
      if <code>HOST_LIBFOO_VERSION</code> doesn't exist, it is assumed
      to be the same as <code>LIBFOO_VERSION</code>. It can also be a
      Subversion or Git branch or tag, for packages that are fetched
      directly from their revision control system.<br/>
      Example: <code>LIBFOO_VERSION = 0.1.2</code></li>

      <li><code>LIBFOO_SOURCE</code> may contain the name of the tarball of
      the package. If <code>HOST_LIBFOO_SOURCE</code> is not specified, it
      defaults to <code>LIBFOO_SOURCE</code>. If none are specified, then
      the value is assumed to be
      <code>packagename-$(LIBFOO_VERSION).tar.gz</code>.<br/>Example:
      <code>LIBFOO_SOURCE = foobar-$(LIBFOO_VERSION).tar.bz2</code></li>

      <li><code>LIBFOO_PATCH</code> may contain the name of a patch, that
      will be downloaded from the same location as the tarball indicated in
      <code>LIBFOO_SOURCE</code>. If <code>HOST_LIBFOO_PATCH</code> is not
      specified, it defaults to <code>LIBFOO_PATCH</code>. Also note that
      another mechanism is available to patch a package: all files of the
      form <code>packagename-packageversion-description.patch</code> present
      in the package directory inside Buildroot will be applied to the
      package after extraction.</li>

      <li><code>LIBFOO_SITE</code> may contain the Internet location
      of the package. It can either be the HTTP or FTP location of a
      tarball, or the URL of a Git or Subversion repository
      (see <code>LIBFOO_SITE_METHOD</code>
      below). If <code>HOST_LIBFOO_SITE</code> is not specified, it
      defaults to <code>LIBFOO_SITE</code>. If none are specified,
      then the location is assumed to be
      <code>http://$$(BR2_SOURCEFORGE_MIRROR).dl.sourceforge.net/sourceforge/packagename</code>.
      <br/>Examples:<br/>
      <code>LIBFOO_SITE=http://www.libfoosoftware.org/libfoo</code><br/>
      <code>LIBFOO_SITE=http://svn.xiph.org/trunk/Tremor/</code></li>

      <li><code>LIBFOO_SITE_METHOD</code> may contain the method to
      fetch the package source code. It can either
      be <code>wget</code> (for normal FTP/HTTP downloads of
      tarballs), <code>svn</code>, <code>git</code> or <code>bzr</code>.
      When not specified, it is guessed from the URL given
      in <code>LIBFOO_SITE</code>: <code>svn://</code>, <code>git://</code>
      and <code>bzr://</code> URLs will use the <code>svn</code>,
      <code>git</code> and <code>bzr</code> methods respectively. All other
      URL-types will use the <code>wget</code> method. So for example, in the
      case of a package whose source code is available through
      Subversion repository on HTTP, one <i>must</i>
      specifiy <code>LIBFOO_SITE_METHOD=svn</code>. For <code>svn</code>
      and <code>git</code> methods, what Buildroot does is a
      checkout/clone of the repository which is then tarballed and
      stored into the download cache. Next builds will not
      checkout/clone again, but will use the tarball
      directly. When <code>HOST_LIBFOO_SITE_METHOD</code> is not
      specified, it defaults to the value
      of <code>LIBFOO_SITE_METHOD</code>. See <code>package/multimedia/tremor/</code>
      for an example.</li>

      <li><code>LIBFOO_DEPENDENCIES</code> lists the dependencies (in terms
      of package name) that are required for the current target package to
      compile. These dependencies are guaranteed to be compiled and
      installed before the configuration of the current package starts. In a
      similar way, <code>HOST_LIBFOO_DEPENDENCIES</code> lists the
      dependency for the current host package.</li>

      <li><code>LIBFOO_INSTALL_STAGING</code> can be set to <code>YES</code>
      or <code>NO</code> (default). If set to <code>YES</code>, then the
      commands in the <code>LIBFOO_INSTALL_STAGING_CMDS</code> variables are
      executed to install the package into the staging directory.</li>

      <li><code>LIBFOO_INSTALL_TARGET</code> can be set to <code>YES</code>
      (default) or <code>NO</code>. If set to <code>YES</code>, then the
      commands in the <code>LIBFOO_INSTALL_TARGET_CMDS</code> variables are
      executed to install the package into the target directory.</li> </ul>

    <p>The recommended way to define these variables is to use the following
    syntax:</p>

<pre>
LIBFOO_VERSION = 2.32
</pre>

    <p>Now, the variables that define what should be performed at the
    different steps of the build process.</p>

    <ul>
      <li><code>LIBFOO_CONFIGURE_CMDS</code>, used to list the actions to be
      performed to configure the package before its compilation</li>

      <li><code>LIBFOO_BUILD_CMDS</code>, used to list the actions to be
      performed to compile the package</li>

      <li><code>HOST_LIBFOO_INSTALL_CMDS</code>, used to list the actions to
      be performed to install the package, when the package is a host
      package. The package must install its files to the directory given by
      <code>$(HOST_DIR)</code>. All files, including development files such
      as headers should be installed, since other packages might be compiled
      on top of this package.</li>

      <li><code>LIBFOO_INSTALL_TARGET_CMDS</code>, used to list the actions
      to be performed to install the package to the target directory, when
      the package is a target package. The package must install its files to
      the directory given by <code>$(TARGET_DIR)</code>. Only the files
      required for <i>documentation</i> and <i>execution</i> of the package
      should be installed. Header files should not be installed, they will
      be copied to the target, if the
      <code>development files in target filesystem</code> option is selected.
      </li>

      <li><code>LIBFOO_INSTALL_STAGING_CMDS</code>, used to list the actions
      to be performed to install the package to the staging directory, when
      the package is a target package. The package must install its files to
      the directory given by <code>$(STAGING_DIR)</code>. All development
      files should be installed, since they might be needed to compile other
      packages.</li>

      <li><code>LIBFOO_CLEAN_CMDS</code>, used to list the actions to
      perform to clean up the build directory of the package.</li>

      <li><code>LIBFOO_UNINSTALL_TARGET_CMDS</code>, used to list the actions
      to uninstall the package from the target directory
      <code>$(TARGET_DIR)</code></li>

      <li><code>LIBFOO_UNINSTALL_STAGING_CMDS</code>, used to list the
      actions to uninstall the package from the staging directory
      <code>$(STAGING_DIR)</code>.</li>
    </ul>

    <p>The preferred way to define these variables is:</p>

<pre>
define LIBFOO_CONFIGURE_CMDS
	action 1
	action 2
	action 3
endef
</pre>

    <p>In the action definitions, you can use the following variables:</p>

    <ul>
      <li><code>$(@D)</code>, which contains the directory in which the
      package source code has been uncompressed.</li>

      <li><code>$(TARGET_CC)</code>, <code>$(TARGET_LD)</code>, etc. to get
      the target cross-compilation utilities</li>

      <li><code>$(TARGET_CROSS)</code> to get the cross-compilation
      toolchain prefix</li>

      <li>Of course the <code>$(HOST_DIR)</code>, <code>$(STAGING_DIR)</code>
      and <code>$(TARGET_DIR)</code> variables to install the packages
      properly.</li>
    </ul>

    <p>The last feature of the generic infrastructure is the ability to add
    hooks. These define further actions to perform after existing steps.
    Most hooks aren't really useful for generic packages, since the
    <code>.mk</code> file already has full control over the actions
    performed in each step of the package construction. The hooks are more
    useful for packages using the autotools infrastructure described below.
    However, since they are provided by the generic infrastructure, they are
    documented here. The exception is <code>LIBFOO_POST_PATCH_HOOKS</code>.
    Patching the package is not user definable, so
    <code>LIBFOO_POST_PATCH_HOOKS</code> will be userful for generic packages.
    </p>

    <p>The following hook points are available:</p>

    <ul>
      <li><code>LIBFOO_POST_PATCH_HOOKS</code></li>
      <li><code>LIBFOO_PRE_CONFIGURE_HOOKS</code></li>
      <li><code>LIBFOO_POST_CONFIGURE_HOOKS</code></li>
      <li><code>LIBFOO_POST_BUILD_HOOKS</code></li>
      <li><code>LIBFOO_POST_INSTALL_HOOKS</code> (for host packages only)</li>
      <li><code>LIBFOO_POST_INSTALL_STAGING_HOOKS</code> (for target packages only)</li>
      <li><code>LIBFOO_POST_INSTALL_TARGET_HOOKS</code> (for target packages only)</li>
    </ul>

    <p>These variables are <i>lists</i> of variable names containing actions
    to be performed at this hook point. This allows several hooks to be
    registered at a given hook point. Here is an example:</p>

<pre>
define LIBFOO_POST_PATCH_FIXUP
	action1
	action2
endef

LIBFOO_POST_PATCH_HOOKS += LIBFOO_POST_PATCH_FIXUP
</pre>

   <h4 id="autotools-tutorial">Makefile for autotools-based packages : tutorial</h4>

   <p>First, let's see how to write a <code>.mk</code> file for an
   autotools-based package, with an example :</p>

<pre>
<span style="color: #000000">01:</span><span style="font-style: italic; color: #9A1900"> #############################################################</span>
<span style="color: #000000">02:</span><span style="font-style: italic; color: #9A1900"> #</span>
<span style="color: #000000">03:</span><span style="font-style: italic; color: #9A1900"> # libfoo</span>
<span style="color: #000000">04:</span><span style="font-style: italic; color: #9A1900"> #</span>
<span style="color: #000000">05:</span><span style="font-style: italic; color: #9A1900"> #############################################################</span>
<span style="color: #000000">06:</span><span style="color: #009900"> LIBFOO_VERSION</span> = 1.0
<span style="color: #000000">07:</span><span style="color: #009900"> LIBFOO_SOURCE</span> = libfoo-<span style="color: #009900">$(LIBFOO_VERSION)</span>.tar.gz
<span style="color: #000000">08:</span><span style="color: #009900"> LIBFOO_SITE</span> = http://www.foosoftware.org/download
<span style="color: #000000">09:</span><span style="color: #009900"> LIBFOO_INSTALL_STAGING</span> = YES
<span style="color: #000000">10:</span><span style="color: #009900"> LIBFOO_INSTALL_TARGET</span> = YES
<span style="color: #000000">11:</span><span style="color: #009900"> LIBFOO_CONF_OPT</span> = --enable-shared
<span style="color: #000000">12:</span><span style="color: #009900"> LIBFOO_DEPENDENCIES</span> = libglib2 host-pkg-config
<span style="color: #000000">13:</span>
<span style="color: #000000">14:</span><span style="color: #009900"> $(eval $(call AUTOTARGETS,package,libfoo))</span>
</pre>

    <p>On line 6, we declare the version of the package.</p>

    <p>On line 7 and 8, we declare the name of the tarball and the location
    of the tarball on the Web. Buildroot will automatically download the
    tarball from this location.</p>

    <p>On line 9, we tell Buildroot to install the package to the staging
    directory. The staging directory, located in <code>output/staging/</code>
    is the directory where all the packages are installed, including their
    development files, etc. By default, packages are not installed to the
    staging directory, since usually, only libraries need to be installed in
    the staging directory: their development files are needed to compile
    other libraries or applications depending on them. Also by default, when
    staging installation is enabled, packages are installed in this location
    using the <code>make install</code> command.</p>

    <p>On line 10, we tell Buildroot to also install the package to the
    target directory. This directory contains what will become the root
    filesystem running on the target. Usually, we try not to install header
    files and to install stripped versions of the binary. By default, target
    installation is enabled, so in fact, this line is not strictly
    necessary. Also by default, packages are installed in this location
    using the <code>make install</code> command.</p>

    <p>On line 11, we tell Buildroot to pass a custom configure option, that
    will be passed to the <code>./configure</code> script before configuring
    and building the package.</p>

    <p>On line 12, we declare our dependencies, so that they are built
    before the build process of our package starts.</p>

    <p>Finally, on line line 14, we invoke the <code>AUTOTARGETS</code>
    macro that generates all the Makefile rules that actually allows the
    package to be built.</p>

    <h4 id="autotools-reference">Makefile for autotools packages : reference</h4>

    <p>The main macro of the autotools package infrastructure is
    <code>AUTOTARGETS</code>. It has the same number of arguments and the
    same semantic as the <code>GENTARGETS</code> macro, which is the main
    macro of the generic package infrastructure. For autotools packages, the
    ability to have target and host packages is also available (and is
    actually widely used).</p>

    <p>Just like the generic infrastructure, the autotools infrastructure
    works by defining a number of variables before calling the
    <code>AUTOTARGETS</code> macro.</p>

    <p>First, all the package metadata information variables that exist in the
    generic infrastructure also exist in the autotools infrastructure:
    <code>LIBFOO_VERSION</code>, <code>LIBFOO_SOURCE</code>,
    <code>LIBFOO_PATCH</code>, <code>LIBFOO_SITE</code>,
    <code>LIBFOO_SUBDIR</code>, <code>LIBFOO_DEPENDENCIES</code>,
    <code>LIBFOO_INSTALL_STAGING</code>, <code>LIBFOO_INSTALL_TARGET</code>.</p>

    <p>A few additional variables, specific to the autotools infrastructure,
    can also be defined. Many of them are only useful in very specific
    cases, typical packages will therefore only use a few of them.</p>

    <ul>
      <li><code>LIBFOO_SUBDIR</code> may contain the name of a subdirectory
      inside the package that contains the configure script. This is useful,
      if for example, the main configure script is not at the root of the
      tree extracted by the tarball. If <code>HOST_LIBFOO_SUBDIR</code> is
      not specified, it defaults to <code>LIBFOO_SUBDIR</code>.</li>

      <li><code>LIBFOO_CONF_ENV</code>, to specify additional environment
      variables to pass to the configure script. By default, empty.</li>

      <li><code>LIBFOO_CONF_OPT</code>, to specify additional configure
      options to pass to the configure script. By default, empty.</li>

      <li><code>LIBFOO_MAKE</code>, to specify an alternate <code>make</code>
      command. This is typically useful when parallel make is enabled in
      the configuration (using <code>BR2_JLEVEL</code>) but that this
      feature should be disabled for the given package, for one reason or
      another. By default, set to <code>$(MAKE)</code>. If parallel building
      is not supported by the package, then it should be set to
      <code>LIBFOO_MAKE=$(MAKE1)</code>.</li>

      <li><code>LIBFOO_MAKE_ENV</code>, to specify additional environment
      variables to pass to make in the build step. These are passed before
      the <code>make</code> command. By default, empty.</li>

      <li><code>LIBFOO_MAKE_OPT</code>, to specify additional variables to
      pass to make in the build step. These are passed after the
      <code>make</code> command. By default, empty.</li>

      <li><code>LIBFOO_AUTORECONF</code>, tells whether the package should
      be autoreconfigured or not (i.e, if the configure script and
      Makefile.in files should be re-generated by re-running autoconf,
      automake, libtool, etc.). Valid values are <code>YES</code> and
      <code>NO</code>. By default, the value is <code>NO</code></li>

      <li><code>LIBFOO_AUTORECONF_OPT</code> to specify additional options
      passed to the <i>autoreconf</i> program if
      <code>LIBFOO_AUTORECONF=YES</code>. By default, empty.</li>

      <li><code>LIBFOO_LIBTOOL_PATCH</code> tells whether the Buildroot
      patch to fix libtool cross-compilation issues should be applied or
      not. Valid values are <code>YES</code> and <code>NO</code>. By
      default, the value is <code>YES</code></li>

      <li><code>LIBFOO_INSTALL_STAGING_OPT</code> contains the make options
      used to install the package to the staging directory. By default, the
      value is <code>DESTDIR=$$(STAGING_DIR) install</code>, which is
      correct for most autotools packages. It is still possible to override
      it.</li>

      <li><code>LIBFOO_INSTALL_TARGET_OPT</code> contains the make options
      used to install the package to the target directory. By default, the
      value is <code>DESTDIR=$$(TARGET_DIR) install</code>. The default
      value is correct for most autotools packages, but it is still possible
      to override it if needed.</li>

      <li><code>LIBFOO_CLEAN_OPT</code> contains the make options used to
      clean the package. By default, the value is <code>clean</code>.</li>

      <li><code>LIBFOO_UNINSTALL_STAGING_OPT</code>, contains the make
      options used to uninstall the package from the staging directory. By
      default, the value is <code>DESTDIR=$$(STAGING_DIR) uninstall</code>.</li>

      <li><code>LIBFOO_UNINSTALL_TARGET_OPT</code>, contains the make
      options used to uninstall the package from the target directory. By
      default, the value is <code>DESTDIR=$$(TARGET_DIR) uninstall</code>.</li>
    </ul>

    <p>With the autotools infrastructure, all the steps required to build
    and install the packages are already defined, and they generally work
    well for most autotools-based packages. However, when required, it is
    still possible to customize what is done in any particular step:</p>

    <ul>
      <li>By adding a post-operation hook (after extract, patch, configure,
      build or install). See the reference documentation of the generic
      infrastructure for details.</li>

      <li>By overriding one of the steps. For example, even if the autotools
      infrastructure is used, if the package <code>.mk</code> file defines its
      own <code>LIBFOO_CONFIGURE_CMDS</code> variable, it will be used
      instead of the default autotools one. However, using this method
      should be restricted to very specific cases. Do not use it in the
      general case.</li>
    </ul>

    <h4 id="cmake-tutorial">Makefile for CMake-based packages : tutorial</h4>

    <p>First, let's see how to write a <code>.mk</code> file for a CMake-based
    package, with an example :</p>

<pre>
<span style="color: #000000">01:</span><span style="font-style: italic; color: #9A1900"> #############################################################</span>
<span style="color: #000000">02:</span><span style="font-style: italic; color: #9A1900"> #</span>
<span style="color: #000000">03:</span><span style="font-style: italic; color: #9A1900"> # libfoo</span>
<span style="color: #000000">04:</span><span style="font-style: italic; color: #9A1900"> #</span>
<span style="color: #000000">05:</span><span style="font-style: italic; color: #9A1900"> #############################################################</span>
<span style="color: #000000">06:</span><span style="color: #009900"> LIBFOO_VERSION</span> = 1.0
<span style="color: #000000">07:</span><span style="color: #009900"> LIBFOO_SOURCE</span> = libfoo-<span style="color: #009900">$(LIBFOO_VERSION)</span>.tar.gz
<span style="color: #000000">08:</span><span style="color: #009900"> LIBFOO_SITE</span> = http://www.foosoftware.org/download
<span style="color: #000000">09:</span><span style="color: #009900"> LIBFOO_INSTALL_STAGING</span> = YES
<span style="color: #000000">10:</span><span style="color: #009900"> LIBFOO_INSTALL_TARGET</span> = YES
<span style="color: #000000">11:</span><span style="color: #009900"> LIBFOO_CONF_OPT</span> = -DBUILD_DEMOS=ON
<span style="color: #000000">12:</span><span style="color: #009900"> LIBFOO_DEPENDENCIES</span> = libglib2 host-pkg-config
<span style="color: #000000">13:</span>
<span style="color: #000000">14:</span><span style="color: #009900"> $(eval $(call CMAKETARGETS,package,libfoo))</span>
</pre>

    <p>On line 6, we declare the version of the package.</p>

    <p>On line 7 and 8, we declare the name of the tarball and the location
    of the tarball on the Web. Buildroot will automatically download the
    tarball from this location.</p>

    <p>On line 9, we tell Buildroot to install the package to the staging
    directory. The staging directory, located in <code>output/staging/</code>
    is the directory where all the packages are installed, including their
    development files, etc. By default, packages are not installed to the
    staging directory, since usually, only libraries need to be installed in
    the staging directory: their development files are needed to compile
    other libraries or applications depending on them. Also by default, when
    staging installation is enabled, packages are installed in this location
    using the <code>make install</code> command.</p>

    <p>On line 10, we tell Buildroot to also install the package to the
    target directory. This directory contains what will become the root
    filesystem running on the target. Usually, we try not to install header
    files and to install stripped versions of the binary. By default, target
    installation is enabled, so in fact, this line is not strictly
    necessary. Also by default, packages are installed in this location
    using the <code>make install</code> command.</p>

    <p>On line 11, we tell Buildroot to pass custom options to CMake when it is
    configuring the package.</p>

    <p>On line 12, we declare our dependencies, so that they are built
    before the build process of our package starts.</p>

    <p>Finally, on line line 14, we invoke the <code>CMAKETARGETS</code>
    macro that generates all the Makefile rules that actually allows the
    package to be built.</p>

    <h4 id="cmake-reference">Makefile for CMake packages : reference</h4>

    <p>The main macro of the CMake package infrastructure is
    <code>CMAKETARGETS</code>. It has the same number of arguments and the
    same semantic as the <code>GENTARGETS</code> macro, which is the main
    macro of the generic package infrastructure. For CMake packages, the
    ability to have target and host packages is also available.</p>

    <p>Just like the generic infrastructure, the CMake infrastructure
    works by defining a number of variables before calling the
    <code>CMAKETARGETS</code> macro.</p>

    <p>First, all the package metadata information variables that exist in the
    generic infrastructure also exist in the CMake infrastructure:
    <code>LIBFOO_VERSION</code>, <code>LIBFOO_SOURCE</code>,
    <code>LIBFOO_PATCH</code>, <code>LIBFOO_SITE</code>,
    <code>LIBFOO_SUBDIR</code>, <code>LIBFOO_DEPENDENCIES</code>,
    <code>LIBFOO_INSTALL_STAGING</code>, <code>LIBFOO_INSTALL_TARGET</code>.</p>

    <p>A few additional variables, specific to the CMake infrastructure,
    can also be defined. Many of them are only useful in very specific
    cases, typical packages will therefore only use a few of them.</p>

    <ul>
      <li><code>LIBFOO_SUBDIR</code> may contain the name of a subdirectory
      inside the package that contains the main CMakeLists.txt file. This is
      useful, if for example, the main CMakeLists.txt file is not at the root
      of the tree extracted by the tarball. If <code>HOST_LIBFOO_SUBDIR</code>
      is not specified, it defaults to <code>LIBFOO_SUBDIR</code>.</li>

      <li><code>LIBFOO_CONF_ENV</code>, to specify additional environment
      variables to pass to CMake. By default, empty.</li>

      <li><code>LIBFOO_CONF_OPT</code>, to specify additional configure
      options to pass to CMake. By default, empty.</li>

      <li><code>LIBFOO_MAKE</code>, to specify an alternate <code>make</code>
      command. This is typically useful when parallel make is enabled in
      the configuration (using <code>BR2_JLEVEL</code>) but that this
      feature should be disabled for the given package, for one reason or
      another. By default, set to <code>$(MAKE)</code>. If parallel building
      is not supported by the package, then it should be set to
      <code>LIBFOO_MAKE=$(MAKE1)</code>.</li>

      <li><code>LIBFOO_MAKE_ENV</code>, to specify additional environment
      variables to pass to make in the build step. These are passed before
      the <code>make</code> command. By default, empty.</li>

      <li><code>LIBFOO_MAKE_OPT</code>, to specify additional variables to
      pass to make in the build step. These are passed after the
      <code>make</code> command. By default, empty.</li>

      <li><code>LIBFOO_INSTALL_STAGING_OPT</code> contains the make options
      used to install the package to the staging directory. By default, the
      value is <code>DESTDIR=$$(STAGING_DIR) install</code>, which is
      correct for most CMake packages. It is still possible to override
      it.</li>

      <li><code>LIBFOO_INSTALL_TARGET_OPT</code> contains the make options
      used to install the package to the target directory. By default, the
      value is <code>DESTDIR=$$(TARGET_DIR) install</code>. The default
      value is correct for most CMake packages, but it is still possible
      to override it if needed.</li>

      <li><code>LIBFOO_CLEAN_OPT</code> contains the make options used to
      clean the package. By default, the value is <code>clean</code>.</li>
    </ul>

    <p>With the CMake infrastructure, all the steps required to build
    and install the packages are already defined, and they generally work
    well for most CMake-based packages. However, when required, it is
    still possible to customize what is done in any particular step:</p>

    <ul>
      <li>By adding a post-operation hook (after extract, patch, configure,
      build or install). See the reference documentation of the generic
      infrastructure for details.</li>

      <li>By overriding one of the steps. For example, even if the CMake
      infrastructure is used, if the package <code>.mk</code> file defines its
      own <code>LIBFOO_CONFIGURE_CMDS</code> variable, it will be used
      instead of the default CMake one. However, using this method
      should be restricted to very specific cases. Do not use it in the
      general case.</li>
    </ul>

    <h4 id ="manual-tutorial">Manual Makefile : tutorial</h4>

    <p><b>NOTE: new manual makefiles should not be created, and existing
    manual makefiles should be converted either to the generic, autotools
    or cmake infrastructure. This section is only kept to document the existing
    manual makefiles and to help understand how they work.</b></p>

<pre>
01: #############################################################
02: #
03: # libfoo
04: #
05: #############################################################
<span id="ex2line6">06: LIBFOO_VERSION:=1.0</span>
07: LIBFOO_SOURCE:=libfoo-$(LIBFOO_VERSION).tar.gz
08: LIBFOO_SITE:=http://www.foosoftware.org/downloads
09: LIBFOO_DIR:=$(BUILD_DIR)/foo-$(FOO_VERSION)
10: LIBFOO_BINARY:=foo
11: LIBFOO_TARGET_BINARY:=usr/bin/foo
12:
<span id="ex2line13">13: $(DL_DIR)/$(LIBFOO_SOURCE):</span>
14: 	$(call DOWNLOAD,$(LIBFOO_SITE),$(LIBFOO_SOURCE))
15:
<span id="ex2line16">16: $(LIBFOO_DIR)/.source: $(DL_DIR)/$(LIBFOO_SOURCE)</span>
17: 	$(ZCAT) $(DL_DIR)/$(LIBFOO_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
18: 	touch $@
19:
<span id="ex2line20">20: $(LIBFOO_DIR)/.configured: $(LIBFOO_DIR)/.source</span>
21: 	(cd $(LIBFOO_DIR); rm -rf config.cache; \
22: 		$(TARGET_CONFIGURE_OPTS) \
23: 		$(TARGET_CONFIGURE_ARGS) \
24: 		./configure \
25: 		--target=$(GNU_TARGET_NAME) \
26: 		--host=$(GNU_TARGET_NAME) \
27: 		--build=$(GNU_HOST_NAME) \
28: 		--prefix=/usr \
29: 		--sysconfdir=/etc \
30: 	)
31: 	touch $@
32:
<span id="ex2line33">33: $(LIBFOO_DIR)/$(LIBFOO_BINARY): $(LIBFOO_DIR)/.configured</span>
34: 	$(MAKE) CC=$(TARGET_CC) -C $(LIBFOO_DIR)
35:
<span id="ex2line36">36: $(TARGET_DIR)/$(LIBFOO_TARGET_BINARY): $(LIBFOO_DIR)/$(LIBFOO_BINARY)</span>
37: 	$(MAKE) DESTDIR=$(TARGET_DIR) -C $(LIBFOO_DIR) install-strip
38: 	rm -Rf $(TARGET_DIR)/usr/man
39:
<span id="ex2line40">40: libfoo: uclibc ncurses $(TARGET_DIR)/$(LIBFOO_TARGET_BINARY)</span>
41:
<span id="ex2line42">42: libfoo-source: $(DL_DIR)/$(LIBFOO_SOURCE)</span>
43:
<span id="ex2line44">44: libfoo-clean:</span>
45: 	$(MAKE) prefix=$(TARGET_DIR)/usr -C $(LIBFOO_DIR) uninstall
46: 	-$(MAKE) -C $(LIBFOO_DIR) clean
47:
<span id="ex2line48">48: libfoo-dirclean:</span>
49: 	rm -rf $(LIBFOO_DIR)
50:
<span id="ex2line51">51: #############################################################</span>
52: #
53: # Toplevel Makefile options
54: #
55: #############################################################
56: ifeq ($(BR2_PACKAGE_LIBFOO),y)
57: TARGETS+=libfoo
58: endif
</pre>

    <p>First of all, this Makefile example works for a package which
    comprises a single binary executable. For other software, such as
    libraries or more complex stuff with multiple binaries, it must be
    adapted. For examples look at the other <code>*.mk</code> files in the
    <code>package</code> directory.</p>

    <p>At lines <a href="#ex2line6">6-11</a>, a couple of useful variables are
    defined:</p>

    <ul>
      <li><code>LIBFOO_VERSION</code>: The version of <i>libfoo</i> that
      should be downloaded.</li>

      <li><code>LIBFOO_SOURCE</code>: The name of the tarball of <i>libfoo</i>
      on the download website or FTP site. As you can see
      <code>LIBFOO_VERSION</code> is used.</li>

      <li><code>LIBFOO_SITE</code>: The HTTP or FTP site from which
      <i>libfoo</i> archive is downloaded. It must include the complete path to
      the directory where <code>LIBFOO_SOURCE</code> can be found.</li>

      <li><code>LIBFOO_DIR</code>: The directory into which the software will
      be configured and compiled. Basically, it's a subdirectory of
      <code>BUILD_DIR</code> which is created upon decompression of the tarball.
      </li>

      <li><code>LIBFOO_BINARY</code>: Software binary name. As said previously,
      this is an example for a package with a single binary.</li>

      <li><code>LIBFOO_TARGET_BINARY</code>: The full path of the binary inside
      the target filesystem.</li> </ul>

    <p>Lines <a href="#ex2line13">13-14</a> define a target that downloads
    the tarball from the remote site to the download directory
    (<code>DL_DIR</code>).</p>

    <p>Lines <a href="#ex2line16">16-18</a> define a target and associated
    rules that uncompress the downloaded tarball. As you can see, this
    target depends on the tarball file so that the previous target (lines
    <a href="#ex2line13">13-14</a>) is called before executing the rules of
    the current target. Uncompressing is followed by <i>touching</i> a
    hidden file to mark the software as having been uncompressed. This trick
    is used everywhere in a Buildroot Makefile to split steps (download,
    uncompress, configure, compile, install) while still having correct
    dependencies.</p>

    <p>Lines <a href="#ex2line20">20-31</a> define a target and associated
    rules that configure the software. It depends on the previous target
    (the hidden <code>.source</code> file) so that we are sure the software
    has been uncompressed. In order to configure the package, it basically
    runs the well-known <code>./configure</code> script. As we may be doing
    cross-compilation, <code>target</code>, <code>host</code> and
    <code>build</code> arguments are given. The prefix is also set to
    <code>/usr</code>, not because the software will be installed in
    <code>/usr</code> on your host system, but because the software will be
    installed in <code> /usr</code> on the target filesystem. Finally it
    creates a <code>.configured</code> file to mark the software as
    configured.</p>

    <p>Lines <a href="#ex2line33">33-34</a> define a target and a rule that
    compile the software. This target will create the binary file in the
    compilation directory and depends on the software being already
    configured (hence the reference to the <code>.configured</code> file).
    It basically runs <code>make</code> inside the source directory.</p>

    <p>Lines <a href="#ex2line36">36-38</a> define a target and associated
    rules that install the software inside the target filesystem. They
    depend on the binary file in the source directory to make sure the
    software has been compiled. They use the <code>install-strip</code>
    target of the software <code>Makefile</code> by passing a
    <code>DESTDIR</code> argument so that the <code>Makefile</code> doesn't
    try to install the software in the host <code>/usr</code> but rather in
    the target <code>/usr</code>. After the installation, the
    <code>/usr/man </code> directory inside the target filesystem is removed
    to save space. </p>

    <p>Line <a href="#ex2line40">40</a> defines the main target of the
    software &mdash; the one that will eventually be used by the top level
    <code>Makefile</code> to download, compile, and then install this
    package. This target should first of all depend on all needed
    dependencies of the software (in our example, <i>uclibc</i> and
    <i>ncurses</i>) and also depend on the final binary. This last dependency
    will call all previous dependencies in the correct order.</p>

    <p>Line <a href="#ex2line42">42</a> defines a simple target that only
    downloads the code source. This is not used during normal operation of
    Buildroot, but is needed if you intend to download all required sources
    at once for later offline build. Note that if you add a new package,
    providing a <code>libfoo-source</code> target is <i>mandatory</i> to
    support users that wish to do offline-builds. Furthermore, it eases
    checking if all package-sources are downloadable.</p>

    <p>Lines <a href="#ex2line44">44-46</a> define a simple target to clean
    the software build by calling the Makefile with the appropriate options.
    The <code>-clean</code> target should run <code>make clean</code> on
    $(BUILD_DIR)/package-version and MUST uninstall all files of the package
    from $(STAGING_DIR) and from $(TARGET_DIR).</p>

    <p>Lines <a href="#ex2line48">48-49</a> define a simple target to
    completely remove the directory in which the software was uncompressed,
    configured and compiled. The <code>-dirclean</code> target MUST
    completely rm $(BUILD_DIR)/ package-version.</p>

    <p>Lines <a href="#ex2line51">51-58</a> add the target <code>libfoo</code>
    to the list of targets to be compiled by Buildroot, by first checking if
    the configuration option for this package has been enabled using the
    configuration tool. If so, it then &quot;subscribes&quot; this package
    to be compiled by adding the package to the TARGETS global variable.
    The name added to the TARGETS global variable is the name of this
    package's target, as defined on line <a href="#ex2line40">40</a>, which
    is used by Buildroot to download, compile, and then install this package.
    </p>

    <h3 id="gettext-integration">Gettext integration and interaction with packages</h3>

    <p>Many packages that support internationalization use the gettext
    library. Dependencies for this library are fairly complicated and therefore,
    deserves some explanation.</p>

    <p>The <i>uClibc</i> C library doesn't implement gettext functionality,
    therefore with this C library, a separate gettext must be compiled. On
    the other hand, the <i>glibc</i> C library does integrate its own
    gettext, and in this case, the separate gettext library should not be
    compiled, because it creates various kinds of build failures.</p>

    <p>Additionally, some packages (such as libglib2) do require gettext
    unconditionally, while other packages (those who support
    <code>--disable-nls</code> in general) only require gettext when locale
    support is enabled.</p>

    <p>Therefore, Buildroot defines two configuration options:</p>

    <ul>
      <li><code>BR2_NEEDS_GETTEXT</code>, which is true as soon as the
      toolchain doesn't provide its own gettext implementation</li>

      <li><code>BR2_NEEDS_GETTEXT_IF_LOCALE</code>, which is true if the
      toolchain doesn't provide its own gettext implementation and if locale
      support is enabled</li> </ul>

    <p>Therefore, packages that unconditionally need gettext should:</p>

    <ol>
      <li>Use <code>select BR2_PACKAGE_GETTEXT if BR2_NEEDS_GETTEXT</code>
      and possibly <code>select BR2_PACKAGE_LIBINTL if BR2_NEEDS_GETTEXT</code>,
      if libintl is also needed</li>

      <li>Use <code>$(if $(BR2_NEEDS_GETTEXT),gettext)</code> in the package
      <code>DEPENDENCIES</code> variable</li>
    </ol>

    <p>Packages that need gettext only when locale support is enabled should:
    </p>

    <ol>
      <li>Use
      <code>select BR2_PACKAGE_GETTEXT if BR2_NEEDS_GETTEXT_IF_LOCALE</code>
      and possibly
      <code>select BR2_PACKAGE_LIBINTL if BR2_NEEDS_GETTEXT_IF_LOCALE</code>,
      if libintl is also needed</li>

      <li>Use <code>$(if $(BR2_NEEDS_GETTEXT_IF_LOCALE),gettext)</code> in
      the package <code>DEPENDENCIES</code> variable</li>
    </ol>

    <h3>Conclusion</h3>

    <p>As you can see, adding a software package to Buildroot is simply a
    matter of writing a Makefile using an  existing example and modifying it
    according to the compilation process required by the package.</p>

    <p>If you package software that might be useful for other people, don't
    forget to send a patch to Buildroot developers!</p>

    <h2 id="faq">Frequently asked questions</h2>

    <ul>
      <li><a href="#faq-boot-hangs">The boot hangs
      after <code>Starting network...</code></a></li>
      <li><a href="#module-init-tools-doesnt-build">module-init-tools
      fails to build with <code>cannot find -lc</code></a></li>
    </ul>

    <h3 id="faq-boot-hangs">The boot hangs after <code>Starting
    network...</code></h3>

    <p>If the boot process seems to hang after the following messages
    (messages not necessarly exactly similar, depending on the list of
    packages selected):</p>

    <pre>Freeing init memory: 3972K
Initializing random number generator... done.
Starting network...
Starting dropbear sshd: generating rsa key... generating dsa key... OK</pre>

    <p>then it means that your system is running, but didn't start a
    shell on the serial console. In order to have the system start a
    shell on your serial console, you have to go in the Buildroot
    configuration, <code>System configuration</code>, and modify
    <code>Port to run a getty (login prompt) on</code> and
    <code>Baudrate to use</code> as appropriate. This will automatically tune
    the <code>/etc/inittab</code> file of the generated system so that
    a shell starts on the correct serial port.</p>

    <h3 id="module-init-tools-doesnt-build">module-init-tools
      fails to build with <code>cannot find -lc</code></h3>

    <p>If the build of <i>module-init-tools</i> for the host fails
    with:</p>

    <pre>/usr/bin/ld: cannot find -lc </pre>

    <p>then probably you are running a Fedora (or similar)
    distribution, and you should install the <code>glibc-static</code>
    package. This is because the <i>module-init-tools</i> build
    process wants to link statically against the C library.</p>

    <h2 id="links">Resources</h2>

    <p>To learn more about Buildroot you can visit these websites:</p>

    <ul>
      <li><a href="http://www.uclibc.org/">http://www.uclibc.org/</a></li>
      <li><a href="http://www.busybox.net/">http://www.busybox.net/</a></li>
    </ul>
  </div>
</body>
</html>
