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

Using the generated toolchain outside Buildroot
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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.

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

It is possible to relocate the toolchain - but then +--sysroot+ must
be passed every time the compiler is called to tell where the
libraries and header files are.

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