summaryrefslogtreecommitdiff
path: root/toolchain
diff options
context:
space:
mode:
Diffstat (limited to 'toolchain')
-rw-r--r--toolchain/helpers.mk55
-rw-r--r--toolchain/toolchain-external/Config.in222
-rw-r--r--toolchain/toolchain-external/ext-tool.mk100
-rw-r--r--toolchain/toolchain-external/ext-toolchain-wrapper.c3
4 files changed, 328 insertions, 52 deletions
diff --git a/toolchain/helpers.mk b/toolchain/helpers.mk
index 65cc9982d..bb1ea9040 100644
--- a/toolchain/helpers.mk
+++ b/toolchain/helpers.mk
@@ -7,22 +7,44 @@
# directory to the target directory. Also optionaly strips the
# library.
#
-# Most toolchains have their libraries either in /lib or /usr/lib
-# relative to their ARCH_SYSROOT_DIR. Buildroot toolchains, however,
-# have basic libraries in /lib, and libstdc++/libgcc_s in
-# /usr/<target-name>/lib(64).
+# Most toolchains (CodeSourcery ones) have their libraries either in
+# /lib or /usr/lib relative to their ARCH_SYSROOT_DIR, so we search
+# libraries in:
+#
+# $${ARCH_LIB_DIR}
+# usr/$${ARCH_LIB_DIR}
+#
+# Buildroot toolchains, however, have basic libraries in /lib, and
+# libstdc++/libgcc_s in /usr/<target-name>/lib(64), so we also need to
+# search libraries in:
+#
+# usr/$(TOOLCHAIN_EXTERNAL_PREFIX)/$${ARCH_LIB_DIR}
+#
+# Finally, Linaro toolchains have the libraries in lib/<target-name>/,
+# so we need to search libraries in:
+#
+# $${ARCH_LIB_DIR}/$(TOOLCHAIN_EXTERNAL_PREFIX)
+#
+# Thanks to ARCH_LIB_DIR we also take into account toolchains that
+# have the libraries in lib64 and usr/lib64.
+#
+# Please be very careful to check the major toolchain sources:
+# Buildroot, Crosstool-NG, CodeSourcery and Linaro before doing any
+# modification on the below logic.
#
# $1: arch specific sysroot directory
-# $2: library name
-# $3: destination directory of the libary, relative to $(TARGET_DIR)
+# $2: library directory ('lib' or 'lib64') from which libraries must be copied
+# $3: library name
+# $4: destination directory of the libary, relative to $(TARGET_DIR)
#
copy_toolchain_lib_root = \
ARCH_SYSROOT_DIR="$(strip $1)"; \
- LIB="$(strip $2)"; \
- DESTDIR="$(strip $3)" ; \
+ ARCH_LIB_DIR="$(strip $2)" ; \
+ LIB="$(strip $3)"; \
+ DESTDIR="$(strip $4)" ; \
\
LIBS=`(cd $${ARCH_SYSROOT_DIR}; \
- find -L lib* usr/lib* usr/$(TOOLCHAIN_EXTERNAL_PREFIX)/lib* \
+ find -L $${ARCH_LIB_DIR} usr/$${ARCH_LIB_DIR} usr/$(TOOLCHAIN_EXTERNAL_PREFIX)/$${ARCH_LIB_DIR} $${ARCH_LIB_DIR}/$(TOOLCHAIN_EXTERNAL_PREFIX) \
-maxdepth 1 -name "$${LIB}.*" 2>/dev/null \
)` ; \
for FILE in $${LIBS} ; do \
@@ -84,12 +106,14 @@ copy_toolchain_lib_root = \
# $1: main sysroot directory of the toolchain
# $2: arch specific sysroot directory of the toolchain
# $3: arch specific subdirectory in the sysroot
+# $4: directory of libraries ('lib' or 'lib64')
#
copy_toolchain_sysroot = \
SYSROOT_DIR="$(strip $1)"; \
ARCH_SYSROOT_DIR="$(strip $2)"; \
ARCH_SUBDIR="$(strip $3)"; \
- for i in etc lib sbin usr ; do \
+ ARCH_LIB_DIR="$(strip $4)" ; \
+ for i in etc $${ARCH_LIB_DIR} sbin usr ; do \
if [ -d $${ARCH_SYSROOT_DIR}/$$i ] ; then \
rsync -au --chmod=Du+w --exclude 'usr/lib/locale' $${ARCH_SYSROOT_DIR}/$$i $(STAGING_DIR)/ ; \
fi ; \
@@ -98,7 +122,14 @@ copy_toolchain_sysroot = \
if [ ! -d $${ARCH_SYSROOT_DIR}/usr/include ] ; then \
cp -a $${SYSROOT_DIR}/usr/include $(STAGING_DIR)/usr ; \
fi ; \
- ln -s . $(STAGING_DIR)/$${ARCH_SUBDIR} ; \
+ mkdir -p `dirname $(STAGING_DIR)/$${ARCH_SUBDIR}` ; \
+ relpath="./" ; \
+ nbslashs=`echo -n $${ARCH_SUBDIR} | sed 's%[^/]%%g' | wc -c` ; \
+ for slash in `seq 1 $${nbslashs}` ; do \
+ relpath=$${relpath}"../" ; \
+ done ; \
+ ln -s $${relpath} $(STAGING_DIR)/$${ARCH_SUBDIR} ; \
+ echo "Symlinking $(STAGING_DIR)/$${ARCH_SUBDIR} -> $${relpath}" ; \
fi ; \
find $(STAGING_DIR) -type d | xargs chmod 755
@@ -184,7 +215,7 @@ check_uclibc_feature = \
#
check_uclibc = \
SYSROOT_DIR="$(strip $1)"; \
- if ! test -f $${SYSROOT_DIR}/lib/ld*-uClibc.so.* ; then \
+ if ! test -f $${SYSROOT_DIR}/usr/include/bits/uClibc_config.h ; then \
echo "Incorrect selection of the C library"; \
exit -1; \
fi; \
diff --git a/toolchain/toolchain-external/Config.in b/toolchain/toolchain-external/Config.in
index eadfe50cf..9db5cb64e 100644
--- a/toolchain/toolchain-external/Config.in
+++ b/toolchain/toolchain-external/Config.in
@@ -3,6 +3,41 @@ if BR2_TOOLCHAIN_EXTERNAL
choice
prompt "Toolchain"
+config BR2_TOOLCHAIN_EXTERNAL_LINARO_2012_01
+ bool "Linaro 2012.01"
+ depends on BR2_arm
+ depends on BR2_cortex_a8 || BR2_cortex_a9
+ select BR2_TOOLCHAIN_EXTERNAL_GLIBC
+ select BR2_INSTALL_LIBSTDCPP
+ help
+ Linaro toolchain for the ARM architecture. It uses Linaro
+ GCC 2012.01 (based on gcc 4.6), Linaro GDB 2011.12, eglibc
+ 2.13. It generates code that runs on all Cortex-A profile
+ devices, but tuned for the Cortex-A9. The code generated is
+ Thumb 2, with the softfp calling convention, and uses the
+ VFPv3-D16 FPU instructions.
+
+config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201109
+ bool "Sourcery CodeBench ARM 2011.09"
+ depends on BR2_arm
+ select BR2_TOOLCHAIN_EXTERNAL_GLIBC
+ select BR2_INSTALL_LIBSTDCPP
+ help
+ Sourcery CodeBench toolchain for the ARM architecture, from
+ Mentor Graphics. It uses gcc 4.6.1, binutils 2.21.53, glibc
+ 2.13 and gdb 7.2.50, kernel headers 3.0.1. It has support
+ for the following variants:
+ - ARMv5TE, little endian, soft-float, glibc
+ Select ARM926T, ARM10T, XScale or another ARMv5 core
+ Select BR2_SOFT_FLOAT
+ - ARMv4T, little endian, soft-float, glibc
+ Select ARM720T, ARM920T, ARM922T or another ARMv4 core
+ Select BR2_SOFT_FLOAT
+ - ARMv7-A, Thumb 2, little endian, soft-float, glibc
+ Select Cortex-A8, Cortex-A9 or another ARMv7-A core
+ Select BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -mthumb
+
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201103
bool "Sourcery CodeBench ARM 2011.03"
depends on BR2_arm
@@ -14,8 +49,15 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201103
2.13 and gdb 7.2.50, kernel headers 2.6.38. It has support
for the following variants:
- ARMv5TE, little endian, soft-float, glibc
+ Select ARM926T, ARM10T, XScale or another ARMv5 core
+ Select BR2_SOFT_FLOAT
- ARMv4T, little endian, soft-float, glibc
+ Select ARM720T, ARM920T, ARM922T or another ARMv4 core
+ Select BR2_SOFT_FLOAT
- ARMv7-A, Thumb 2, little endian, soft-float, glibc
+ Select Cortex-A8, Cortex-A9 or another ARMv7-A core
+ Select BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -mthumb
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201009
bool "Sourcery CodeBench ARM 2010.09"
@@ -28,8 +70,15 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201009
2.11 and gdb 7.2.50, kernel headers 2.6.35.2. It has support
for the following variants:
- ARMv5TE, little endian, soft-float, glibc
+ Select ARM926T, ARM10T, XScale or another ARMv5 core
+ Select BR2_SOFT_FLOAT
- ARMv4T, little endian, soft-float, glibc
+ Select ARM720T, ARM920T, ARM922T or another ARMv4 core
+ Select BR2_SOFT_FLOAT
- ARMv7-A, Thumb 2, little endian, soft-float, glibc
+ Select Cortex-A8, Cortex-A9 or another ARMv7-A core
+ Select BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -mthumb
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2010Q1
bool "Sourcery CodeBench ARM 2010q1"
@@ -42,8 +91,15 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2010Q1
2.11, gdb 7.0.50 and kernel headers 2.6.32. It has support
for the following variants:
- ARMv5T, little endian, soft-float, glibc
+ Select ARM926T, ARM10T, XScale or another ARMv5 core
+ Select BR2_SOFT_FLOAT
- ARMv4T, little endian, soft-float, glibc
+ Select ARM720T, ARM920T, ARM922T or another ARMv4 core
+ Select BR2_SOFT_FLOAT
- ARMv7-A, Thumb 2, little endian, soft-float, glibc
+ Select Cortex-A8, Cortex-A9 or another ARMv7-A core
+ Select BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -mthumb
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2009Q3
bool "Sourcery CodeBench ARM 2009q3"
@@ -56,22 +112,15 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2009Q3
2.10 and gdb 6.8 and kernel headers 2.6.30. It has support
for the following variants:
- ARMv5T, little endian, soft-float, glibc
+ Select ARM926T, ARM10T, XScale or another ARMv5 core
+ Select BR2_SOFT_FLOAT
- ARMv4T, little endian, soft-float, glibc
+ Select ARM720T, ARM920T, ARM922T or another ARMv4 core
+ Select BR2_SOFT_FLOAT
- ARMv7-A, Thumb 2, little endian, soft-float, glibc
-
-config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2009Q1
- bool "Sourcery CodeBench ARM 2009q1"
- depends on BR2_arm
- select BR2_TOOLCHAIN_EXTERNAL_GLIBC
- select BR2_INSTALL_LIBSTDCPP
- help
- Sourcery CodeBench toolchain for the ARM architecture, from
- Mentor Graphics. It uses gcc 4.3.3, binutils 2.19, glibc 2.8
- and gdb 6.8 and kernel headers 2.6.30. It has support for
- the following variants:
- - ARMv5T, little endian, soft-float, glibc
- - ARMv4T, little endian, soft-float, glibc
- - ARMv7-A, Thumb 2, little endian, soft-float, glibc
+ Select Cortex-A8, Cortex-A9 or another ARMv7-A core
+ Select BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -mthumb
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS201103
bool "Sourcery CodeBench MIPS 2011.03"
@@ -84,17 +133,43 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS201103
2.13, uClibc 0.9.30 and gdb 7.2.50, kernel headers
2.6.38. It has support for the following variants:
- MIPS32 O32 big endian glibc
+ Select a MIPS generic core
+ Disable BR2_SOFT_FLOAT
- MIPS32 O32 little endian glibc
+ Select a MIPS generic core
+ Disable BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -EL
- MIPS32 big endian soft float glibc
+ Select a MIPS generic core
+ Select BR2_SOFT_FLOAT
- MIPS32 little endian soft float glibc
+ Select a MIPS generic core
+ Select BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -EL
- MIPS32 big endian microMIPS glibc
+ Select a MIPS generic core
+ Disable BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -mips16
- MIPS32 little endian microMIPS glibc
+ Select a MIPS generic core
+ Disable BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -EL -mips16
- MIPS32 big endian soft float microMIPS glibc
+ Select a MIPS generic core
+ Select BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -mips16
- MIPS32 little endian soft float microMIPS glibc
+ Select a MIPS generic core
+ Select BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -EL -mips16
- MIPS32 big endian uclibc
+ Not usable in Buildroot yet.
- MIPS32 little endian uclibc
+ Not usable in Buildroot yet.
- MIPS32 big endian soft float uclibc
+ Not usable in Buildroot yet.
- MIPS32 little endian soft float uclibc
+ Not usable in Buildroot yet.
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS44
bool "Sourcery CodeBench MIPS 4.4"
@@ -107,17 +182,70 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS44
2.11, uClibc 0.9.30 and gdb 7.0, kernel headers 2.6.32. It
has support for the following variants:
- MIPS32 O32 big endian glibc
+ Select a MIPS generic core
+ Disable BR2_SOFT_FLOAT
- MIPS32 O32 little endian glibc
+ Select a MIPS generic core
+ Disable BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -EL
- MIPS32 big endian soft float glibc
+ Select a MIPS generic core
+ Select BR2_SOFT_FLOAT
- MIPS32 little endian soft float glibc
+ Select a MIPS generic core
+ Select BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -EL
- MIPS32 big endian microMIPS glibc
+ Select a MIPS generic core
+ Disable BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -mips16
- MIPS32 little endian microMIPS glibc
+ Select a MIPS generic core
+ Disable BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -EL -mips16
- MIPS32 big endian soft float microMIPS glibc
+ Select a MIPS generic core
+ Select BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -mips16
- MIPS32 little endian soft float microMIPS glibc
+ Select a MIPS generic core
+ Select BR2_SOFT_FLOAT
+ Set BR2_TARGET_OPTIMIZATION to -EL -mips16
- MIPS32 big endian uclibc
+ Not usable in Buildroot yet.
- MIPS32 little endian uclibc
+ Not usable in Buildroot yet.
- MIPS32 big endian soft float uclibc
+ Not usable in Buildroot yet.
- MIPS32 little endian soft float uclibc
+ Not usable in Buildroot yet.
+
+config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC201103
+ bool "Sourcery CodeBench PowerPC 2011.03"
+ depends on BR2_powerpc
+ select BR2_TOOLCHAIN_EXTERNAL_GLIBC
+ select BR2_INSTALL_LIBSTDCPP
+ help
+ Sourcery CodeBench toolchain for the PowerPC architecture,
+ from Mentor Graphics. It uses gcc 4.5.2, binutils 2.20.51,
+ glibc 2.13, gdb 7.2.50 and kernel headers 2.6.38. It has
+ support for the following variants:
+ - 603 glibc, 32 bits
+ Select a generic PowerPC core
+ Disable BR2_SOFT_FLOAT
+ - 603 soft float glibc, 32 bits
+ Select a generic PowerPC core
+ Enable BR2_SOFT_FLOAT
+ - e600 altivec glibc, 32 bits
+ Set BR2_TARGET_OPTIMIZATION to -te600
+ - e500v1 glibc, 32 bits
+ Set BR2_TARGET_OPTIMIZATION to -te500v1
+ - e500v2 glibc, 32 bits
+ Set BR2_TARGET_OPTIMIZATION to -te500v2
+ - e500mc glibc, 32 bits
+ Set BR2_TARGET_OPTIMIZATION to -te500mc
+ - 970 glibc hard-float, 64 bits
+ Set BR2_TARGET_OPTIMIZATION to -m64
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC201009
bool "Sourcery CodeBench PowerPC 2010.09"
@@ -126,16 +254,25 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC201009
select BR2_INSTALL_LIBSTDCPP
help
Sourcery CodeBench toolchain for the PowerPC architecture,
- from Sourcery CodeBench. It uses gcc 4.5.1, binutils 2.20,
+ from Mentor Graphics. It uses gcc 4.5.1, binutils 2.20,
glibc 2.11, gdb 7.2.50 and kernel headers 2.6.35.2. It has
support for the following variants:
- 603 glibc, 32 bits
+ Select a generic PowerPC core
+ Disable BR2_SOFT_FLOAT
- 603 soft float glibc, 32 bits
+ Select a generic PowerPC core
+ Enable BR2_SOFT_FLOAT
- e600 altivec glibc, 32 bits
+ Set BR2_TARGET_OPTIMIZATION to -te600
- e500v1 glibc, 32 bits
+ Set BR2_TARGET_OPTIMIZATION to -te500v1
- e500v2 glibc, 32 bits
+ Set BR2_TARGET_OPTIMIZATION to -te500v2
- e500mc glibc, 32 bits
+ Set BR2_TARGET_OPTIMIZATION to -te500mc
- 970 glibc hard-float, 64 bits
+ Set BR2_TARGET_OPTIMIZATION to -m64
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH201103
bool "Sourcery CodeBench SH 2011.03"
@@ -148,9 +285,13 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH201103
glibc 2.13, uClibc 0.9.30, gdb 7.2.50 and kernel headers
2.6.38. It has support for the following variants:
- SH4A, glibc, little endian
+ Default.
- SH4A, glibc, big endian
+ Add -mb to BR2_TARGET_OPTIMIZATION
- SH4A, uClibc, little endian
+ Not usable in Buildroot yet.
- SH4A, uClibc, big endian
+ Not usable in Buildroot yet.
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH201009
bool "Sourcery CodeBench SH 2010.09"
@@ -163,9 +304,13 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH201009
glibc 2.11, uClibc 0.9.30, gdb 7.2.50 and kernel headers
2.6.35.2. It has support for the following variants:
- SH4A, glibc, little endian
+ Default.
- SH4A, glibc, big endian
+ Add -mb to BR2_TARGET_OPTIMIZATION
- SH4A, uClibc, little endian
+ Not usable in Buildroot yet.
- SH4A, uClibc, big endian
+ Not usable in Buildroot yet.
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH2A_201103
bool "Sourcery CodeBench SH 2011.03"
@@ -201,6 +346,26 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH2A_201009
has support for the following variants:
- SH2A, uClibc, big endian
+config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86_201109
+ bool "Sourcery CodeBench x86/x86_64 2011.09"
+ depends on BR2_i386 || BR2_x86_64
+ select BR2_TOOLCHAIN_EXTERNAL_GLIBC
+ select BR2_INSTALL_LIBSTDCPP
+ help
+ Sourcery CodeBench toolchain for the x86/x86_64
+ architectures, from Mentor Graphics. It uses gcc 4.6.1,
+ binutils 2.21.53, glibc 2.13, gdb 7.2.50 and kernel headers
+ 3.0.1. It has support for the following variants:
+ - Intel Pentium 4, glibc, 32 bits
+ Default, nothing special to do.
+ - Intel Atom, glibc, 32 bits
+ Select an Atom core
+ - Intel Xeon, glibc, 64 bits
+ Set BR2_TARGET_OPTIMIZATION to -m64
+ - Intel Core 2, glibc, 64 bits
+ Select a Core 2 core
+ Set BR2_TARGET_OPTIMIZATION to -m64
+
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86_201009
bool "Sourcery CodeBench x86/x86_64 2010.09"
depends on BR2_i386 || BR2_x86_64
@@ -212,9 +377,29 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86_201009
binutils 2.20, glibc 2.11, gdb 7.2.50 and kernel headers
2.6.35.2. It has support for the following variants:
- Intel Pentium 4, glibc, 32 bits
+ Default, nothing special to do.
- Intel Atom, glibc, 32 bits
+ Select an Atom core
- Intel Xeon, glibc, 64 bits
+ Set BR2_TARGET_OPTIMIZATION to -m64
- Intel Core 2, glibc, 64 bits
+ Select a Core 2 core
+ Set BR2_TARGET_OPTIMIZATION to -m64
+
+config BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2011R1
+ bool "Blackfin.uclinux.org 2011R1-RC4"
+ depends on BR2_bfin
+ select BR2_TOOLCHAIN_EXTERNAL_UCLIBC
+ select BR2_INSTALL_LIBSTDCPP
+ select BR2_LARGEFILE
+ select BR2_INET_IPV6
+ select BR2_INET_RPC
+ select BR2_USE_WCHAR
+ select BR2_TOOLCHAIN_HAS_THREADS
+ select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
+ help
+ Toolchain for the Blackfin architecture, from
+ http://blackfin.uclinux.org.
config BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2010RC1
bool "Blackfin.uclinux.org 2010RC1"
@@ -262,21 +447,26 @@ config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
string
- default "arm-none-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2009Q1
+ default "arm-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_LINARO_2012_01
default "arm-none-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2009Q3
default "arm-none-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2010Q1
default "arm-none-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201009
default "arm-none-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201103
+ default "arm-none-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201109
default "mips-linux-gnu" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS44
default "mips-linux-gnu" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS201103
default "powerpc-linux-gnu" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC201009
+ default "powerpc-linux-gnu" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC201103
default "sh-linux-gnu" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH201009
default "sh-linux-gnu" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH201103
default "sh-uclinux" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH2A_201009
default "sh-uclinux" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH2A_201103
default "i686-pc-linux-gnu" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86_201009
+ default "i686-pc-linux-gnu" if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86_201109
default "bfin-uclinux" if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2010RC1 && !BR2_BFIN_FDPIC
default "bfin-linux-uclibc" if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2010RC1 && BR2_BFIN_FDPIC
+ default "bfin-uclinux" if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2011R1 && !BR2_BFIN_FDPIC
+ default "bfin-linux-uclibc" if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2011R1 && BR2_BFIN_FDPIC
default $(BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX) \
if BR2_TOOLCHAIN_EXTERNAL_CUSTOM
diff --git a/toolchain/toolchain-external/ext-tool.mk b/toolchain/toolchain-external/ext-tool.mk
index 2ac497378..a638381d1 100644
--- a/toolchain/toolchain-external/ext-tool.mk
+++ b/toolchain/toolchain-external/ext-tool.mk
@@ -150,6 +150,14 @@ TOOLCHAIN_EXTERNAL_CFLAGS += -mabi=$(CC_TARGET_ABI_)
TOOLCHAIN_EXTERNAL_WRAPPER_ARGS += -DBR_ABI='"$(CC_TARGET_ABI_)"'
endif
+ifneq ($(BR2_TARGET_OPTIMIZATION),)
+TOOLCHAIN_EXTERNAL_CFLAGS += $(call qstrip,$(BR2_TARGET_OPTIMIZATION))
+# We create a list like '"-mfoo", "-mbar", "-mbarfoo"' so that each
+# flag is a separate argument when used in execv() by the external
+# toolchain wrapper.
+TOOLCHAIN_EXTERNAL_WRAPPER_ARGS += -DBR_ADDITIONAL_CFLAGS='$(foreach f,$(call qstrip,$(BR2_TARGET_OPTIMIZATION)),"$(f)",)'
+endif
+
ifeq ($(BR2_SOFT_FLOAT),y)
TOOLCHAIN_EXTERNAL_CFLAGS += -msoft-float
TOOLCHAIN_EXTERNAL_WRAPPER_ARGS += -DBR_SOFTFLOAT=1
@@ -162,14 +170,9 @@ endif
ifeq ($(BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD),y)
TOOLCHAIN_EXTERNAL_DEPENDENCIES = $(TOOLCHAIN_EXTERNAL_DIR)/.extracted
-else
-TOOLCHAIN_EXTERNAL_DEPENDENCIES = $(STAMP_DIR)/ext-toolchain-checked
endif
-ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2009Q1),y)
-TOOLCHAIN_EXTERNAL_SITE=http://sourcery.mentor.com/sgpp/lite/arm/portal/package4571/public/arm-none-linux-gnueabi/
-TOOLCHAIN_EXTERNAL_SOURCE=arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
-else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2009Q3),y)
+ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2009Q3),y)
TOOLCHAIN_EXTERNAL_SITE=http://sourcery.mentor.com/sgpp/lite/arm/portal/package5383/public/arm-none-linux-gnueabi/
TOOLCHAIN_EXTERNAL_SOURCE=arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM2010Q1),y)
@@ -181,15 +184,24 @@ TOOLCHAIN_EXTERNAL_SOURCE=arm-2010.09-50-arm-none-linux-gnueabi-i686-pc-linux-gn
else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201103),y)
TOOLCHAIN_EXTERNAL_SITE=http://sourcery.mentor.com/sgpp/lite/arm/portal/package8739/public/arm-none-linux-gnueabi/
TOOLCHAIN_EXTERNAL_SOURCE=arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
+else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201109),y)
+TOOLCHAIN_EXTERNAL_SITE=http://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/
+TOOLCHAIN_EXTERNAL_SOURCE=arm-2011.09-70-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
+else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_LINARO_2012_01),y)
+TOOLCHAIN_EXTERNAL_SITE=http://launchpad.net/linaro-toolchain-binaries/trunk/2012.01/+download/
+TOOLCHAIN_EXTERNAL_SOURCE=gcc-linaro-arm-linux-gnueabi-2012.01-20120125_linux.tar.bz2
else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS44),y)
TOOLCHAIN_EXTERNAL_SITE=http://sourcery.mentor.com/sgpp/lite/mips/portal/package7401/public/mips-linux-gnu/
TOOLCHAIN_EXTERNAL_SOURCE=mips-4.4-303-mips-linux-gnu-i686-pc-linux-gnu.tar.bz2
else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS201103),y)
-TOOLCHAIN_EXTERNAL_SITE=http://sourcery.mentor.com/sgpp/lite/mips/portal/package9055/public/mips-linux-gnu/
-TOOLCHAIN_EXTERNAL_SOURCE=mips-2011.03-93-mips-linux-gnu-i686-pc-linux-gnu.tar.bz2
+TOOLCHAIN_EXTERNAL_SITE=http://sourcery.mentor.com/sgpp/lite/mips/portal/package9469/public/mips-linux-gnu/
+TOOLCHAIN_EXTERNAL_SOURCE=mips-2011.03-110-mips-linux-gnu-i686-pc-linux-gnu.tar.bz2
else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC201009),y)
TOOLCHAIN_EXTERNAL_SITE=http://sourcery.mentor.com/sgpp/lite/power/portal/package7703/public/powerpc-linux-gnu/
TOOLCHAIN_EXTERNAL_SOURCE=freescale-2010.09-55-powerpc-linux-gnu-i686-pc-linux-gnu.tar.bz2
+else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC201103),y)
+TOOLCHAIN_EXTERNAL_SITE=http://sourcery.mentor.com/public/gnu_toolchain/powerpc-linux-gnu/
+TOOLCHAIN_EXTERNAL_SOURCE=freescale-2011.03-38-powerpc-linux-gnu-i686-pc-linux-gnu.tar.bz2
else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH201009),y)
TOOLCHAIN_EXTERNAL_SITE=http://sourcery.mentor.com/sgpp/lite/superh/portal/package7783/public/sh-linux-gnu/
TOOLCHAIN_EXTERNAL_SOURCE=renesas-2010.09-45-sh-linux-gnu-i686-pc-linux-gnu.tar.bz2
@@ -205,12 +217,21 @@ TOOLCHAIN_EXTERNAL_SOURCE=renesas-2011.03-36-sh-uclinux-i686-pc-linux-gnu.tar.bz
else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86_201009),y)
TOOLCHAIN_EXTERNAL_SITE=https://sourcery.mentor.com/sgpp/lite/ia32/portal/package7682/public/i686-pc-linux-gnu/
TOOLCHAIN_EXTERNAL_SOURCE=ia32-2010.09-44-i686-pc-linux-gnu-i386-linux.tar.bz2
+else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86_201109),y)
+TOOLCHAIN_EXTERNAL_SITE=https://sourcery.mentor.com/public/gnu_toolchain/i686-pc-linux-gnu/
+TOOLCHAIN_EXTERNAL_SOURCE=ia32-2011.09-24-i686-pc-linux-gnu-i386-linux.tar.bz2
else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2010RC1),y)
TOOLCHAIN_EXTERNAL_SITE_1 = http://blackfin.uclinux.org/gf/download/frsrelease/501/8378/
TOOLCHAIN_EXTERNAL_SOURCE_1 = blackfin-toolchain-2010R1-RC4.i386.tar.bz2
TOOLCHAIN_EXTERNAL_SITE_2 = http://blackfin.uclinux.org/gf/download/frsrelease/501/8386/
TOOLCHAIN_EXTERNAL_SOURCE_2 = blackfin-toolchain-uclibc-full-2010R1-RC4.i386.tar.bz2
TOOLCHAIN_EXTERNAL_SOURCE = $(TOOLCHAIN_EXTERNAL_SOURCE_1) $(TOOLCHAIN_EXTERNAL_SOURCE_2)
+else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2011R1),y)
+TOOLCHAIN_EXTERNAL_SITE_1 = http://blackfin.uclinux.org/gf/download/frsrelease/531/9509/
+TOOLCHAIN_EXTERNAL_SOURCE_1 = blackfin-toolchain-2011R1-RC4.i386.tar.bz2
+TOOLCHAIN_EXTERNAL_SITE_2 = http://blackfin.uclinux.org/gf/download/frsrelease/531/9517/
+TOOLCHAIN_EXTERNAL_SOURCE_2 = blackfin-toolchain-uclibc-full-2011R1-RC4.i386.tar.bz2
+TOOLCHAIN_EXTERNAL_SOURCE = $(TOOLCHAIN_EXTERNAL_SOURCE_1) $(TOOLCHAIN_EXTERNAL_SOURCE_2)
else
# A value must be set (even if unused), otherwise the
# $(DL_DIR)/$(TOOLCHAIN_EXTERNAL_SOURCE) rule would override the main
@@ -223,7 +244,7 @@ endif
# contain ./opt/uClinux/{bfin-uclinux,bfin-linux-uclibc} directories,
# which themselves contain the toolchain. This is why we strip more
# components than usual.
-ifeq ($(BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2010RC1),y)
+ifeq ($(BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2010RC1)$(BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2011R1),y)
$(DL_DIR)/$(TOOLCHAIN_EXTERNAL_SOURCE_1):
$(call DOWNLOAD,$(TOOLCHAIN_EXTERNAL_SITE_1),$(TOOLCHAIN_EXTERNAL_SOURCE_1))
@@ -264,13 +285,11 @@ endif
# location, check that it supports sysroot, and then verify that it
# matches the configuration provided in Buildroot: ABI, C++ support,
# type of C library and all C library features.
-$(STAMP_DIR)/ext-toolchain-checked:
+$(STAMP_DIR)/ext-toolchain-checked: $(TOOLCHAIN_EXTERNAL_DEPENDENCIES)
@echo "Checking external toolchain settings"
$(Q)$(call check_cross_compiler_exists,$(TOOLCHAIN_EXTERNAL_CC))
- $(Q)SYSROOT_DIR=`$(TOOLCHAIN_EXTERNAL_CC) -print-sysroot 2>/dev/null` ; \
- if test -z "$${SYSROOT_DIR}" ; then \
- SYSROOT_DIR=`readlink -f $$(LANG=C $(TOOLCHAIN_EXTERNAL_CC) -print-file-name=libc.a) |sed -r -e 's:usr/lib/libc\.a::;'` ; \
- fi ; \
+ $(Q)LIBC_A_LOCATION=`readlink -f $$(LANG=C $(TOOLCHAIN_EXTERNAL_CC) -print-file-name=libc.a)` ; \
+ SYSROOT_DIR=`echo $${LIBC_A_LOCATION} | sed -r -e 's:usr/lib(64)?/(.*/)?libc\.a::'` ; \
if test -z "$${SYSROOT_DIR}" ; then \
@echo "External toolchain doesn't support --sysroot. Cannot use." ; \
exit 1 ; \
@@ -292,27 +311,60 @@ $(STAMP_DIR)/ext-toolchain-checked:
# and the variant-specific sysroot, then copy the needed libraries to
# the $(TARGET_DIR) and copy the whole sysroot (libraries and headers)
# to $(STAGING_DIR).
-$(STAMP_DIR)/ext-toolchain-installed: $(TOOLCHAIN_EXTERNAL_DEPENDENCIES)
- $(Q)SYSROOT_DIR=`$(TOOLCHAIN_EXTERNAL_CC) -print-sysroot 2>/dev/null` ; \
- if test -z "$${SYSROOT_DIR}" ; then \
- SYSROOT_DIR=`readlink -f $$(LANG=C $(TOOLCHAIN_EXTERNAL_CC) -print-file-name=libc.a) |sed -r -e 's:usr/lib/libc\.a::;'` ; \
- fi ; \
+#
+# Variables are defined as follows:
+#
+# LIBC_A_LOCATION: location of the libc.a file in the default
+# multilib variant (allows to find the main
+# sysroot directory)
+# Ex: /x-tools/mips-2011.03/mips-linux-gnu/libc/usr/lib/libc.a
+#
+# SYSROOT_DIR: the main sysroot directory, deduced from
+# LIBC_A_LOCATION by removing the
+# usr/lib[64]/libc.a part of the path.
+# Ex: /x-tools/mips-2011.03/mips-linux-gnu/libc/
+#
+# ARCH_LIBC_A_LOCATION: location of the libc.a file in the selected
+# multilib variant (taking into account the
+# CFLAGS). Allows to find the sysroot of the
+# selected multilib variant.
+# Ex: /x-tools/mips-2011.03/mips-linux-gnu/libc/mips16/soft-float/el/usr/lib/libc.a
+#
+# ARCH_SYSROOT_DIR: the sysroot of the selected multilib variant,
+# deduced from ARCH_LIBC_A_LOCATION by removing
+# usr/lib[64]/libc.a at the end of the path.
+# Ex: /x-tools/mips-2011.03/mips-linux-gnu/libc/mips16/soft-float/el/
+#
+# ARCH_LIB_DIR: 'lib' or 'lib64' depending on where libraries are
+# stored. Deduced from ARCH_LIBC_A_LOCATION by
+# looking at usr/lib??/libc.a.
+# Ex: lib
+#
+# ARCH_SUBDIR: the relative location of the sysroot of the selected
+# multilib variant compared to the main sysroot.
+# Ex: mips16/soft-float/el
+
+$(STAMP_DIR)/ext-toolchain-installed: $(STAMP_DIR)/ext-toolchain-checked
+ $(Q)LIBC_A_LOCATION=`readlink -f $$(LANG=C $(TOOLCHAIN_EXTERNAL_CC) -print-file-name=libc.a)` ; \
+ SYSROOT_DIR=`echo $${LIBC_A_LOCATION} | sed -r -e 's:usr/lib(64)?/(.*/)?libc\.a::'` ; \
if test -z "$${SYSROOT_DIR}" ; then \
@echo "External toolchain doesn't support --sysroot. Cannot use." ; \
exit 1 ; \
fi ; \
- ARCH_SUBDIR=`$(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS) -print-multi-directory` ; \
- ARCH_SYSROOT_DIR=$${SYSROOT_DIR}/$${ARCH_SUBDIR} ; \
+ ARCH_LIBC_A_LOCATION=`readlink -f $$(LANG=C $(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS) -print-file-name=libc.a)` ; \
+ ARCH_SYSROOT_DIR=`echo $${ARCH_LIBC_A_LOCATION} | sed -r -e 's:usr/lib(64)?/(.*/)?libc\.a::'` ; \
+ ARCH_LIB_DIR=`echo $${ARCH_LIBC_A_LOCATION} | sed -r -e 's:.*/usr/(lib(64)?)/(.*/)?libc.a:\1:'` ; \
+ ARCH_SUBDIR=`echo $${ARCH_SYSROOT_DIR} | sed -r -e "s:^$${SYSROOT_DIR}(.*)/$$:\1:"` ; \
mkdir -p $(TARGET_DIR)/lib ; \
echo "Copy external toolchain libraries to target..." ; \
for libs in $(LIB_EXTERNAL_LIBS); do \
- $(call copy_toolchain_lib_root,$${ARCH_SYSROOT_DIR},$$libs,/lib); \
+ $(call copy_toolchain_lib_root,$${ARCH_SYSROOT_DIR},$${ARCH_LIB_DIR},$$libs,/lib); \
done ; \
for libs in $(USR_LIB_EXTERNAL_LIBS); do \
- $(call copy_toolchain_lib_root,$${ARCH_SYSROOT_DIR},$$libs,/usr/lib); \
+ $(call copy_toolchain_lib_root,$${ARCH_SYSROOT_DIR},$${ARCH_LIB_DIR},$$libs,/usr/lib); \
done ; \
echo "Copy external toolchain sysroot to staging..." ; \
- $(call copy_toolchain_sysroot,$${SYSROOT_DIR},$${ARCH_SYSROOT_DIR},$${ARCH_SUBDIR}) ; \
+ $(call copy_toolchain_sysroot,$${SYSROOT_DIR},$${ARCH_SYSROOT_DIR},$${ARCH_SUBDIR},$${ARCH_LIB_DIR}) ; \
if [ -L $${ARCH_SYSROOT_DIR}/lib64 ] ; then \
$(call create_lib64_symlinks) ; \
fi ; \
diff --git a/toolchain/toolchain-external/ext-toolchain-wrapper.c b/toolchain/toolchain-external/ext-toolchain-wrapper.c
index cc404f3e9..719f13bd1 100644
--- a/toolchain/toolchain-external/ext-toolchain-wrapper.c
+++ b/toolchain/toolchain-external/ext-toolchain-wrapper.c
@@ -40,6 +40,9 @@ static char *predef_args[] = {
#ifdef BR_VFPFLOAT
"-mfpu=vfp",
#endif /* BR_VFPFLOAT */
+#ifdef BR_ADDITIONAL_CFLAGS
+ BR_ADDITIONAL_CFLAGS
+#endif
};
static const char *get_basename(const char *name)