blob: 62eb0a386fc2018a6991373b6acf18528feca668 [file] [log] [blame]
Using an external toolchain
===========================
[[external-toolchain]]
Using an already existing toolchain is useful for different
reasons:
* you already have a toolchain that is known to work for your specific
CPU
* you want to speed up the Buildroot build process by skipping the
long toolchain build part
* the toolchain generation feature of Buildroot is not sufficiently
flexible for you (for example if you need to generate a system with
'glibc' instead of 'uClibc')
Buildroot supports using existing toolchains through a mechanism
called 'external toolchain'. The external toolchain mechanism is
enabled in the +Toolchain+ menu, by selecting +External toolchain+ in
+Toolchain type+.
Then, you have three solutions to use an external toolchain:
* 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 +Toolchain+ through the
available ones. This is definitely the easiest solution.
* 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 +Toolchain+ through the available
ones, unselect +Download toolchain automatically+, and fill the
+Toolchain path+ text entry with the path to your cross-compiling
toolchain.
* Use a completely custom external toolchain. This is particularly
useful for toolchains generated using crosstool-NG. To do this,
select the +Custom toolchain+ solution in the +Toolchain+ list. You
need to fill the +Toolchain path+, +Toolchain prefix+ and +External
toolchain C library+ options. Then, you have to tell Buildroot what
your external toolchain supports. If your external toolchain uses
the 'glibc' library, you only have to tell whether your toolchain
supports C++ or not. If your external toolchain uses the 'uclibc'
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.
Our external toolchain support has been tested with toolchains from
CodeSourcery, toolchains generated by
http://crosstool-ng.org[crosstool-NG], and toolchains generated by
Buildroot itself. In general, all toolchains that support the
'sysroot' feature should work. If not, do not hesitate to contact the
developers.
We do not support toolchains from the
http://www.denx.de/wiki/DULG/ELDK[ELDK] of Denx, for two reasons:
* 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 'sysroot' of the toolchain, as it would
contain hundreds of megabytes of pre-compiled libraries that are
normally built by Buildroot.
* The ELDK toolchains have a completely non-standard custom mechanism
to handle multiple library variants. Instead of using the standard
GCC 'multilib' 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
+CROSS_COMPILE+ environment variable. This non-standard behaviour
makes it difficult to support ELDK in Buildroot.
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.