diff options
author | Peter Korsgaard <jacmet@sunsite.dk> | 2012-03-06 23:09:56 +0100 |
---|---|---|
committer | Peter Korsgaard <jacmet@sunsite.dk> | 2012-03-06 23:09:56 +0100 |
commit | 21561bd27cfeae38433f271cc09cb94030276a9b (patch) | |
tree | 6f5f77913aa0b274ae8c3c9497118e023b51f979 /toolchain | |
parent | b5410b6a19db7ef75af8df2fa5659c539ad37c47 (diff) | |
parent | e6e60becb008dd389c51d2d75cbfd63551300dae (diff) |
Merge branch 'for-2012.05/ext-toolchain-updates' of git://git.free-electrons.com/users/thomas-petazzoni/buildroot
Diffstat (limited to 'toolchain')
-rw-r--r-- | toolchain/helpers.mk | 55 | ||||
-rw-r--r-- | toolchain/toolchain-external/Config.in | 222 | ||||
-rw-r--r-- | toolchain/toolchain-external/ext-tool.mk | 100 | ||||
-rw-r--r-- | toolchain/toolchain-external/ext-toolchain-wrapper.c | 3 |
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) |