diff options
58 files changed, 1499 insertions, 2311 deletions
@@ -1 +1 @@ -1.20.0 +1.21.0 diff --git a/config/arch/microblaze.in b/config/arch/microblaze.in index fb38e1f..c664498 100644 --- a/config/arch/microblaze.in +++ b/config/arch/microblaze.in @@ -19,4 +19,4 @@ ## help ## help Support is being added for a modern gcc, ## help binutils and gdb along with nptl threading -## help in eglibc for microblaze. +## help in glibc for microblaze. diff --git a/config/binutils/binutils.in b/config/binutils/binutils.in index 9800004..5ef69b5 100644 --- a/config/binutils/binutils.in +++ b/config/binutils/binutils.in @@ -2,6 +2,23 @@ comment "GNU binutils" +config CC_BINUTILS_SHOW_LINARO + bool + prompt "Show Linaro versions" + help + Linaro is maintaining some advanced/more stable/experimental versions + of binutils, especially for the ARM architecture. + + Those versions have not been blessed by the binutils comunity (nor have they + been cursed either!), but they look to be pretty much stable, and even + more stable than the upstream versions. YMMV... + + If you do not know what this Linaro stuff is, then simply say 'n' here, + and rest in peace. OTOH, if you know what you are doing, you will be + able to use and enjoy :-) the Linaro versions by saying 'y' here. + + Linaro: http://www.linaro.org/ + choice bool prompt "binutils version" @@ -12,6 +29,7 @@ config BINUTILS_LINARO_V_2_25 bool prompt "linaro-2.25.0-2015.01-2" select BINUTILS_2_25_or_later + depends on CC_BINUTILS_SHOW_LINARO config BINUTILS_V_2_25 bool @@ -22,6 +40,7 @@ config BINUTILS_LINARO_V_2_24 bool prompt "linaro-2.24.0-2014.11-2" select BINUTILS_2_24_or_later + depends on CC_BINUTILS_SHOW_LINARO config BINUTILS_V_2_24 bool @@ -160,8 +179,8 @@ config BINUTILS_HAS_PKGVERSION_BUGURL bool # Force using the BFD linker if needed -# This is the case for some C libraries (eg. glibc and -# eglibc at least) and affected components can select this +# This is the case for some C libraries (eg. glibc at least) and affected +# components can select this config BINUTILS_FORCE_LD_BFD bool @@ -219,7 +238,7 @@ endchoice # Enable linkers if BINUTILS_LINKER_GOLD comment "WARNING! gold is not capable of" -comment "| building glibc/eglibc!" +comment "| building glibc!" endif # BINUTILS_LINKER_GOLD config BINUTILS_GOLD_INSTALLED diff --git a/config/cc.in b/config/cc.in index 0c07f46..5603738 100644 --- a/config/cc.in +++ b/config/cc.in @@ -4,6 +4,7 @@ menu "C compiler" config CC string + default "gcc" config CC_VERSION string @@ -120,6 +121,8 @@ config CC_LANG_GOLANG Only select this if you know that your specific version of the compiler supports this language. +endif # ! BARE_METAL + config CC_LANG_OTHERS string prompt "Other languages (EXPERIMENTAL)" @@ -132,8 +135,4 @@ config CC_LANG_OTHERS Eg. gcc-4.1+ has a toy programming language, treelang. As it is not useful in real life, it is not available in the selection above. -endif # ! BARE_METAL - -source "config.gen/cc.in.2" - endmenu diff --git a/config/cc/gcc.in b/config/cc/gcc.in index d639cdd..4781060 100644 --- a/config/cc/gcc.in +++ b/config/cc/gcc.in @@ -1,5 +1,6 @@ # Compiler options # +## default y ## select CC_SUPPORT_CXX ## select CC_SUPPORT_FORTRAN ## select CC_SUPPORT_JAVA @@ -36,251 +37,255 @@ choice # Don't remove next line # CT_INSERT_VERSION_BELOW -config CC_V_linaro_4_9 +config CC_GCC_V_5_1_0 bool - prompt "linaro-4.9-2015.02" + prompt "5.1.0" + select CC_GCC_5_1 + +config CC_GCC_V_linaro_4_9 + bool + prompt "linaro-4.9-2015.03" depends on CC_GCC_SHOW_LINARO select CC_GCC_4_9 -config CC_V_4_9_2 +config CC_GCC_V_4_9_2 bool prompt "4.9.2" select CC_GCC_4_9 -config CC_V_4_9_1 +config CC_GCC_V_4_9_1 bool prompt "4.9.1" select CC_GCC_4_9 -config CC_V_4_9_0 +config CC_GCC_V_4_9_0 bool prompt "4.9.0" select CC_GCC_4_9 -config CC_V_linaro_4_8 +config CC_GCC_V_linaro_4_8 bool prompt "linaro-4.8-2015.02" depends on CC_GCC_SHOW_LINARO select CC_GCC_4_8 -config CC_V_4_8_4 +config CC_GCC_V_4_8_4 bool prompt "4.8.4" select CC_GCC_4_8 -config CC_V_4_8_3 +config CC_GCC_V_4_8_3 bool prompt "4.8.3" select CC_GCC_4_8 -config CC_V_4_8_2 +config CC_GCC_V_4_8_2 bool prompt "4.8.2" select CC_GCC_4_8 -config CC_V_4_8_1 +config CC_GCC_V_4_8_1 bool prompt "4.8.1" select CC_GCC_4_8 -config CC_V_4_8_0 +config CC_GCC_V_4_8_0 bool prompt "4.8.0" select CC_GCC_4_8 -config CC_V_linaro_4_7 +config CC_GCC_V_linaro_4_7 bool prompt "linaro-4.7-2014.06" depends on CC_GCC_SHOW_LINARO select CC_GCC_4_7 -config CC_V_4_7_4 +config CC_GCC_V_4_7_4 bool prompt "4.7.4" select CC_GCC_4_7 -config CC_V_4_7_3 +config CC_GCC_V_4_7_3 bool prompt "4.7.3" select CC_GCC_4_7 -config CC_V_4_7_2 +config CC_GCC_V_4_7_2 bool prompt "4.7.2" select CC_GCC_4_7 -config CC_V_4_7_1 +config CC_GCC_V_4_7_1 bool prompt "4.7.1" select CC_GCC_4_7 -config CC_V_4_7_0 +config CC_GCC_V_4_7_0 bool prompt "4.7.0" select CC_GCC_4_7 -config CC_V_linaro_4_6 +config CC_GCC_V_linaro_4_6 bool prompt "linaro-4.6-2013.05" depends on CC_GCC_SHOW_LINARO select CC_GCC_4_6 -config CC_V_4_6_4 +config CC_GCC_V_4_6_4 bool prompt "4.6.4" select CC_GCC_4_6 -config CC_V_4_6_3 +config CC_GCC_V_4_6_3 bool prompt "4.6.3" select CC_GCC_4_6 -config CC_V_4_6_2 +config CC_GCC_V_4_6_2 bool prompt "4.6.2" select CC_GCC_4_6 -config CC_V_4_6_1 +config CC_GCC_V_4_6_1 bool prompt "4.6.1" select CC_GCC_4_6 -config CC_V_4_6_0 +config CC_GCC_V_4_6_0 bool prompt "4.6.0" select CC_GCC_4_6 -config CC_V_linaro_4_5 +config CC_GCC_V_linaro_4_5 bool prompt "linaro-4.5-2012.03" depends on CC_GCC_SHOW_LINARO select CC_GCC_4_5 -config CC_V_4_5_3 +config CC_GCC_V_4_5_3 bool prompt "4.5.3" select CC_GCC_4_5 -config CC_V_4_5_2 +config CC_GCC_V_4_5_2 bool prompt "4.5.2" select CC_GCC_4_5 -config CC_V_4_5_1 +config CC_GCC_V_4_5_1 bool prompt "4.5.1" select CC_GCC_4_5 -config CC_V_4_5_0 +config CC_GCC_V_4_5_0 bool prompt "4.5.0" select CC_GCC_4_5 - -config CC_V_linaro_4_4 +config CC_GCC_V_linaro_4_4 bool prompt "linaro-4.4-2011.02-0" depends on CC_GCC_SHOW_LINARO select CC_GCC_4_4 -config CC_V_4_4_7 +config CC_GCC_V_4_4_7 bool prompt "4.4.7" select CC_GCC_4_4 -config CC_V_4_4_6 +config CC_GCC_V_4_4_6 bool prompt "4.4.6" select CC_GCC_4_4 -config CC_V_4_4_5 +config CC_GCC_V_4_4_5 bool prompt "4.4.5" select CC_GCC_4_4 -config CC_V_4_4_4 +config CC_GCC_V_4_4_4 bool prompt "4.4.4" select CC_GCC_4_4 -config CC_V_4_4_3 +config CC_GCC_V_4_4_3 bool prompt "4.4.3" select CC_GCC_4_4 -config CC_V_4_4_2 +config CC_GCC_V_4_4_2 bool prompt "4.4.2" select CC_GCC_4_4 -config CC_V_4_4_1 +config CC_GCC_V_4_4_1 bool prompt "4.4.1" select CC_GCC_4_4 -config CC_V_4_4_0 +config CC_GCC_V_4_4_0 bool prompt "4.4.0" select CC_GCC_4_4 -config CC_V_4_3_6 +config CC_GCC_V_4_3_6 bool prompt "4.3.6" select CC_GCC_4_3 -config CC_V_4_3_5 +config CC_GCC_V_4_3_5 bool prompt "4.3.5" select CC_GCC_4_3 -config CC_V_4_3_4 +config CC_GCC_V_4_3_4 bool prompt "4.3.4" select CC_GCC_4_3 -config CC_V_4_3_3 +config CC_GCC_V_4_3_3 bool prompt "4.3.3" select CC_GCC_4_3 -config CC_V_4_3_2 +config CC_GCC_V_4_3_2 bool prompt "4.3.2" select CC_GCC_4_3 -config CC_V_4_3_1 +config CC_GCC_V_4_3_1 bool prompt "4.3.1" select CC_GCC_4_3 -config CC_V_4_2_4 +config CC_GCC_V_4_2_4 bool prompt "4.2.4" select CC_GCC_4_2 # We need that one, it's the only version with avr32 support # because we have a patch for it -config CC_V_4_2_2 +config CC_GCC_V_4_2_2 bool prompt "4.2.2" select CC_GCC_4_2 -config CC_V_4_1_2 +config CC_GCC_V_4_1_2 bool prompt "4.1.2 (OBSOLETE)" depends on OBSOLETE -config CC_V_4_0_4 +config CC_GCC_V_4_0_4 bool prompt "4.0.4 (OBSOLETE)" depends on OBSOLETE -config CC_V_3_4_6 +config CC_GCC_V_3_4_6 bool prompt "3.4.6 (OBSOLETE)" depends on OBSOLETE -config CC_CUSTOM +config CC_GCC_CUSTOM bool prompt "Custom gcc" depends on EXPERIMENTAL @@ -288,9 +293,9 @@ config CC_CUSTOM endchoice -if CC_CUSTOM +if CC_GCC_CUSTOM -config CC_CUSTOM_LOCATION +config CC_GCC_CUSTOM_LOCATION string prompt "Full path to custom gcc source" default "" @@ -298,7 +303,7 @@ config CC_CUSTOM_LOCATION Enter the path to the directory (or tarball) of your source for gcc, or leave blank to use default CT_CUSTOM_LOCATION_ROOT_DIR/gcc -endif #CC_CUSTOM +endif #CC_GCC_CUSTOM config CC_GCC_4_2 bool @@ -409,9 +414,27 @@ config CC_GCC_4_9_or_later bool select CC_GCC_4_8_or_later -config CC_GCC_latest +config CC_GCC_5_1 + bool + select CC_GCC_5_1_or_later + select CC_GCC_USE_GMP_MPFR + select CC_GCC_USE_MPC + select CC_GCC_HAS_GRAPHITE + select CC_GCC_HAS_LTO + select CC_GCC_HAS_PKGVERSION_BUGURL + select CC_GCC_HAS_BUILD_ID + select CC_GCC_HAS_LNK_HASH_STYLE + select CC_GCC_HAS_LIBQUADMATH + select CC_GCC_HAS_LIBSANITIZER + select CC_SUPPORT_GOLANG + +config CC_GCC_5_1_or_later bool select CC_GCC_4_9_or_later + +config CC_GCC_latest + bool + select CC_GCC_5_1_or_later select CC_GCC_USE_GMP_MPFR select CC_GCC_USE_MPC select CC_GCC_HAS_GRAPHITE @@ -431,7 +454,7 @@ config CC_GCC_USE_GRAPHITE bool default y depends on CC_GCC_HAS_GRAPHITE - select CLOOG_NEEDED + select CLOOG_NEEDED if !CC_GCC_5_1_or_later select PPL_NEEDED if !CC_GCC_4_8_or_later select ISL_NEEDED if CC_GCC_4_8_or_later help @@ -504,59 +527,60 @@ config CC_GCC_HAS_LIBQUADMATH config CC_GCC_HAS_LIBSANITIZER bool -config CC_VERSION +config CC_GCC_VERSION string # Don't remove next line # CT_INSERT_VERSION_STRING_BELOW - default "linaro-4.9-2015.02" if CC_V_linaro_4_9 - default "4.9.2" if CC_V_4_9_2 - default "4.9.1" if CC_V_4_9_1 - default "4.9.0" if CC_V_4_9_0 - default "linaro-4.8-2015.02" if CC_V_linaro_4_8 - default "4.8.4" if CC_V_4_8_4 - default "4.8.3" if CC_V_4_8_3 - default "4.8.2" if CC_V_4_8_2 - default "4.8.1" if CC_V_4_8_1 - default "4.8.0" if CC_V_4_8_0 - default "linaro-4.7-2014.06" if CC_V_linaro_4_7 - default "4.7.4" if CC_V_4_7_4 - default "4.7.3" if CC_V_4_7_3 - default "4.7.2" if CC_V_4_7_2 - default "4.7.1" if CC_V_4_7_1 - default "4.7.0" if CC_V_4_7_0 - default "linaro-4.6-2013.05" if CC_V_linaro_4_6 - default "4.6.4" if CC_V_4_6_4 - default "4.6.3" if CC_V_4_6_3 - default "4.6.2" if CC_V_4_6_2 - default "4.6.1" if CC_V_4_6_1 - default "4.6.0" if CC_V_4_6_0 - default "linaro-4.5-2012.03" if CC_V_linaro_4_5 - default "4.5.3" if CC_V_4_5_3 - default "4.5.2" if CC_V_4_5_2 - default "4.5.1" if CC_V_4_5_1 - default "4.5.0" if CC_V_4_5_0 - default "linaro-4.4-2011.02-0" if CC_V_linaro_4_4 - default "4.4.7" if CC_V_4_4_7 - default "4.4.6" if CC_V_4_4_6 - default "4.4.5" if CC_V_4_4_5 - default "4.4.4" if CC_V_4_4_4 - default "4.4.3" if CC_V_4_4_3 - default "4.4.2" if CC_V_4_4_2 - default "4.4.1" if CC_V_4_4_1 - default "4.4.0" if CC_V_4_4_0 - default "4.3.6" if CC_V_4_3_6 - default "4.3.5" if CC_V_4_3_5 - default "4.3.4" if CC_V_4_3_4 - default "4.3.3" if CC_V_4_3_3 - default "4.3.2" if CC_V_4_3_2 - default "4.3.1" if CC_V_4_3_1 - default "4.3.0" if CC_V_4_3_0 - default "4.2.4" if CC_V_4_2_4 - default "4.2.2" if CC_V_4_2_2 - default "4.1.2" if CC_V_4_1_2 - default "4.0.4" if CC_V_4_0_4 - default "3.4.6" if CC_V_3_4_6 - default "custom" if CC_CUSTOM + default "5.1.0" if CC_GCC_V_5_1_0 + default "linaro-4.9-2015.03" if CC_GCC_V_linaro_4_9 + default "4.9.2" if CC_GCC_V_4_9_2 + default "4.9.1" if CC_GCC_V_4_9_1 + default "4.9.0" if CC_GCC_V_4_9_0 + default "linaro-4.8-2015.02" if CC_GCC_V_linaro_4_8 + default "4.8.4" if CC_GCC_V_4_8_4 + default "4.8.3" if CC_GCC_V_4_8_3 + default "4.8.2" if CC_GCC_V_4_8_2 + default "4.8.1" if CC_GCC_V_4_8_1 + default "4.8.0" if CC_GCC_V_4_8_0 + default "linaro-4.7-2014.06" if CC_GCC_V_linaro_4_7 + default "4.7.4" if CC_GCC_V_4_7_4 + default "4.7.3" if CC_GCC_V_4_7_3 + default "4.7.2" if CC_GCC_V_4_7_2 + default "4.7.1" if CC_GCC_V_4_7_1 + default "4.7.0" if CC_GCC_V_4_7_0 + default "linaro-4.6-2013.05" if CC_GCC_V_linaro_4_6 + default "4.6.4" if CC_GCC_V_4_6_4 + default "4.6.3" if CC_GCC_V_4_6_3 + default "4.6.2" if CC_GCC_V_4_6_2 + default "4.6.1" if CC_GCC_V_4_6_1 + default "4.6.0" if CC_GCC_V_4_6_0 + default "linaro-4.5-2012.03" if CC_GCC_V_linaro_4_5 + default "4.5.3" if CC_GCC_V_4_5_3 + default "4.5.2" if CC_GCC_V_4_5_2 + default "4.5.1" if CC_GCC_V_4_5_1 + default "4.5.0" if CC_GCC_V_4_5_0 + default "linaro-4.4-2011.02-0" if CC_GCC_V_linaro_4_4 + default "4.4.7" if CC_GCC_V_4_4_7 + default "4.4.6" if CC_GCC_V_4_4_6 + default "4.4.5" if CC_GCC_V_4_4_5 + default "4.4.4" if CC_GCC_V_4_4_4 + default "4.4.3" if CC_GCC_V_4_4_3 + default "4.4.2" if CC_GCC_V_4_4_2 + default "4.4.1" if CC_GCC_V_4_4_1 + default "4.4.0" if CC_GCC_V_4_4_0 + default "4.3.6" if CC_GCC_V_4_3_6 + default "4.3.5" if CC_GCC_V_4_3_5 + default "4.3.4" if CC_GCC_V_4_3_4 + default "4.3.3" if CC_GCC_V_4_3_3 + default "4.3.2" if CC_GCC_V_4_3_2 + default "4.3.1" if CC_GCC_V_4_3_1 + default "4.3.0" if CC_GCC_V_4_3_0 + default "4.2.4" if CC_GCC_V_4_2_4 + default "4.2.2" if CC_GCC_V_4_2_2 + default "4.1.2" if CC_GCC_V_4_1_2 + default "4.0.4" if CC_GCC_V_4_0_4 + default "3.4.6" if CC_GCC_V_3_4_6 + default "custom" if CC_GCC_CUSTOM config CC_LANG_JAVA_USE_ECJ bool @@ -567,3 +591,5 @@ config CC_LANG_JAVA_USE_ECJ # Fortran always requires GMP+MPFR, whatever the gcc version config CC_LANG_FORTRAN select CC_GCC_USE_GMP_MPFR + +source "config/cc/gcc.in.2" diff --git a/config/cc/gcc.in.2 b/config/cc/gcc.in.2 index b088515..fb19938 100644 --- a/config/cc/gcc.in.2 +++ b/config/cc/gcc.in.2 @@ -1,6 +1,6 @@ # gcc configuration options -config CC_ENABLE_CXX_FLAGS +config CC_GCC_ENABLE_CXX_FLAGS string prompt "Flags to pass to --enable-cxx-flags" default "" @@ -11,7 +11,7 @@ config CC_ENABLE_CXX_FLAGS Note: just pass in the option _value_, that is only the part that goes after the '=' sign. -config CC_CORE_EXTRA_CONFIG_ARRAY +config CC_GCC_CORE_EXTRA_CONFIG_ARRAY string prompt "Core gcc extra config" default "" @@ -26,7 +26,7 @@ config CC_CORE_EXTRA_CONFIG_ARRAY if they are properly quoted (or escaped, but prefer quotes). Eg.: --with-foo="1st arg with 4 spaces" --with-bar=2nd-arg-without-space -config CC_EXTRA_CONFIG_ARRAY +config CC_GCC_EXTRA_CONFIG_ARRAY string prompt "gcc extra config" default "" @@ -38,9 +38,9 @@ config CC_EXTRA_CONFIG_ARRAY --with-foo="1st arg with 4 spaces" --with-bar=2nd-arg-without-space config STATIC_TOOLCHAIN - select CC_STATIC_LIBSTDCXX if CC_GCC_4_4_or_later + select CC_GCC_STATIC_LIBSTDCXX if CC_GCC_4_4_or_later -config CC_STATIC_LIBSTDCXX +config CC_GCC_STATIC_LIBSTDCXX bool prompt "Link libstdc++ statically into the gcc binary" default y diff --git a/config/companion_libs/isl.in b/config/companion_libs/isl.in index a6b53fb..93babe7 100644 --- a/config/companion_libs/isl.in +++ b/config/companion_libs/isl.in @@ -6,6 +6,10 @@ choice # Don't remove next line # CT_INSERT_VERSION_BELOW +config ISL_V_0_14 + bool + prompt "0.14" + config ISL_V_0_12_2 bool prompt "0.12.2" @@ -13,6 +17,7 @@ config ISL_V_0_12_2 config ISL_V_0_11_1 bool prompt "0.11.1" + depends on ! CC_GCC_5_1_or_later endchoice @@ -20,5 +25,6 @@ config ISL_VERSION string # Don't remove next line # CT_INSERT_VERSION_STRING_BELOW + default "0.14" if ISL_V_0_14 default "0.12.2" if ISL_V_0_12_2 default "0.11.1" if ISL_V_0_11_1 diff --git a/config/debug/gdb.in b/config/debug/gdb.in index 9ca84f5..2d92251 100644 --- a/config/debug/gdb.in +++ b/config/debug/gdb.in @@ -33,12 +33,28 @@ choice # Don't remove next line # CT_INSERT_VERSION_BELOW +config GDB_V_7_9_1 + bool + prompt "7.9.1" + select GDB_7_2_or_later + +config GDB_V_7_9 + bool + prompt "7.9" + select GDB_7_2_or_later + config GDB_V_linaro_7_8 bool prompt "linaro-7.8-2014.09" depends on DEBUG_GDB_SHOW_LINARO select GDB_7_2_or_later +config GDB_V_7_8_2 + bool + prompt "7.8.2" + select GDB_7_2_or_later + + config GDB_V_7_8_1 bool prompt "7.8.1" @@ -174,6 +190,9 @@ config GDB_VERSION string # Don't remove next line # CT_INSERT_VERSION_STRING_BELOW + default "7.9.1" if GDB_V_7_9_1 + default "7.9" if GDB_V_7_9 + default "7.8.2" if GDB_V_7_8_2 default "linaro-7.8-2014.09" if GDB_V_linaro_7_8 default "7.8.1" if GDB_V_7_8_1 default "7.8" if GDB_V_7_8 diff --git a/config/debug/strace.in b/config/debug/strace.in index 19563a9..5566129 100644 --- a/config/debug/strace.in +++ b/config/debug/strace.in @@ -8,6 +8,16 @@ choice # Don't remove next line # CT_INSERT_VERSION_BELOW +config STRACE_V_4_10 + bool + prompt "4.10" + depends on CONFIGURE_has_xz + +config STRACE_V_4_9 + bool + prompt "4.9" + depends on CONFIGURE_has_xz + config STRACE_V_4_8 bool prompt "4.8" @@ -41,6 +51,8 @@ config STRACE_VERSION string # Don't remove next line # CT_INSERT_VERSION_STRING_BELOW + default "4.10" if STRACE_V_4_10 + default "4.9" if STRACE_V_4_9 default "4.8" if STRACE_V_4_8 default "4.7" if STRACE_V_4_7 default "4.6" if STRACE_V_4_6 diff --git a/config/kernel/linux.in b/config/kernel/linux.in index 96d02d1..75918b4 100644 --- a/config/kernel/linux.in +++ b/config/kernel/linux.in @@ -26,151 +26,43 @@ choice # Don't remove next line # CT_INSERT_VERSION_BELOW -config KERNEL_V_3_18 - bool - prompt "3.18.7" - -config KERNEL_V_3_17 +config KERNEL_V_4_0 bool - prompt "3.17.8" + prompt "4.0.4 (stable)" -config KERNEL_V_3_16 +config KERNEL_V_3_19 bool - prompt "3.16.7" + prompt "3.19.8 (EOL)" -config KERNEL_V_3_15 +config KERNEL_V_3_18 bool - prompt "3.15.10" + prompt "3.18.14" config KERNEL_V_3_14 bool - prompt "3.14.33 (longterm)" - -config KERNEL_V_3_13 - bool - prompt "3.13.11" + prompt "3.14.43" config KERNEL_V_3_12 bool - prompt "3.12.37 (longterm)" - -config KERNEL_V_3_11 - bool - prompt "3.11.10" + prompt "3.12.43" config KERNEL_V_3_10 bool - prompt "3.10.69 (longterm)" - -config KERNEL_V_3_9 - bool - prompt "3.9.11" - -config KERNEL_V_3_8 - bool - prompt "3.8.13" - -config KERNEL_V_3_7 - bool - prompt "3.7.10" - -config KERNEL_V_3_6 - bool - prompt "3.6.11" - -config KERNEL_V_3_5 - bool - prompt "3.5.7" + prompt "3.10.79" config KERNEL_V_3_4 bool - prompt "3.4.106 (longterm)" - -config KERNEL_V_3_3 - bool - prompt "3.3.8" + prompt "3.4.107" config KERNEL_V_3_2 bool - prompt "3.2.66 (longterm)" - -config KERNEL_V_3_1 - bool - prompt "3.1.10" - -config KERNEL_V_3_0 - bool - prompt "3.0.101" - -config KERNEL_V_2_6_39 - bool - prompt "2.6.39.4" - -config KERNEL_V_2_6_38 - bool - prompt "2.6.38.8" - -config KERNEL_V_2_6_37 - bool - prompt "2.6.37.6" - -config KERNEL_V_2_6_36 - bool - prompt "2.6.36.4" - -config KERNEL_V_2_6_33 - bool - prompt "2.6.33.20" - help - This is primarily for the use of those people who are stuck using the - .33-rt kernel. Anyone else who really wants to use the .33 kernel tree - is welcome to use this one as well. + prompt "3.2.69" config KERNEL_V_2_6_32 bool - prompt "2.6.32.65 (longterm)" + prompt "2.6.32.66" help - The Linux 2.6.32 tree is a "longterm" maintenance branch. - - It is intended to fill the niche for users who are not using distribution - kernels but want to use a regression-free kernel for a longer time. - - Critical bug fixes to later 2.6 releases are often ported to this branch - which makes 2.6.32 a very useful base for many embedded developers seeking - stable APIs or those who do not need the latest bleeding edge features. - - ... and no, this kernel has not undergone any specific QA testing. - - See the original announcement by Greg Kroah-Hartman in the following - mailing list entry: - http://marc.info/?l=linux-kernel&m=126384198403392&w=4 - -config KERNEL_V_2_6_31 - bool - prompt "2.6.31.14" - -config KERNEL_V_2_6_27 - bool - prompt "2.6.27.62 (longterm)" - help - The Linux 2.6.27 tree is a "longterm" maintenance branch. - - It is intended to fill the niche for users who are not using distribution - kernels but want to use a regression-free kernel for a longer time. - - Critical bug fixes to later 2.6 releases are often ported to this branch - which makes 2.6.27 a very useful base for many embedded developers seeking - stable APIs or those who do not need the latest bleeding edge features. - - ... and no, this kernel has not undergone any specific QA testing. - - See the original announcement by Adrian Bunk in the following mailing list - entry: - http://marc.info/?l=linux-kernel&m=122375909403298&w=4 - - It is now maintained by Greg Kroah-Hartman, see this mailing list entry: - http://marc.info/?l=linux-kernel&m=129133701916793&w=4 - + config KERNEL_LINUX_CUSTOM bool prompt "custom tarball or directory" @@ -191,33 +83,15 @@ config KERNEL_VERSION string # Don't remove next line # CT_INSERT_VERSION_STRING_BELOW - default "3.18.7" if KERNEL_V_3_18 - default "3.17.8" if KERNEL_V_3_17 - default "3.16.7" if KERNEL_V_3_16 - default "3.15.10" if KERNEL_V_3_15 - default "3.14.33" if KERNEL_V_3_14 - default "3.13.11" if KERNEL_V_3_13 - default "3.12.37" if KERNEL_V_3_12 - default "3.11.10" if KERNEL_V_3_11 - default "3.10.69" if KERNEL_V_3_10 - default "3.9.11" if KERNEL_V_3_9 - default "3.8.13" if KERNEL_V_3_8 - default "3.7.10" if KERNEL_V_3_7 - default "3.6.11" if KERNEL_V_3_6 - default "3.5.7" if KERNEL_V_3_5 - default "3.4.106" if KERNEL_V_3_4 - default "3.3.8" if KERNEL_V_3_3 - default "3.2.66" if KERNEL_V_3_2 - default "3.1.10" if KERNEL_V_3_1 - default "3.0.101" if KERNEL_V_3_0 - default "2.6.39.4" if KERNEL_V_2_6_39 - default "2.6.38.8" if KERNEL_V_2_6_38 - default "2.6.37.6" if KERNEL_V_2_6_37 - default "2.6.36.4" if KERNEL_V_2_6_36 - default "2.6.33.20" if KERNEL_V_2_6_33 - default "2.6.32.65" if KERNEL_V_2_6_32 - default "2.6.31.14" if KERNEL_V_2_6_31 - default "2.6.27.62" if KERNEL_V_2_6_27 + default "4.0.4" if KERNEL_V_4_0 + default "3.19.8" if KERNEL_V_3_19 + default "3.18.14" if KERNEL_V_3_18 + default "3.14.43" if KERNEL_V_3_14 + default "3.12.43" if KERNEL_V_3_12 + default "3.10.79" if KERNEL_V_3_10 + default "3.4.107" if KERNEL_V_3_4 + default "3.2.69" if KERNEL_V_3_2 + default "2.6.32.66" if KERNEL_V_2_6_32 default "custom" if KERNEL_LINUX_CUSTOM endif # ! KERNEL_LINUX_USE_CUSTOM_HEADERS diff --git a/config/libc/eglibc.in b/config/libc/eglibc.in deleted file mode 100644 index d1ecd0f..0000000 --- a/config/libc/eglibc.in +++ /dev/null @@ -1,240 +0,0 @@ -# eglibc options - -## depends on ! WINDOWS && ! BARE_METAL && ARCH_USE_MMU -## -## select LIBC_SUPPORT_THREADS_NATIVE -## select CC_CORE_PASSES_NEEDED -## -## help EGLIBC (Embedded GLIBC) is a variant of the standard GNU GLIBC -## help that is designed to work well on embedded systems. EGLIBC strives -## help to be source and binary compatible with GLIBC. Its goals include -## help a reduced footprint, configurable components, and improved -## help cross-compilation support. EGLIBC also includes some embedded ports -## help (such as e500/spe) that are normally separate add-ons of GLIBC. - -config THREADS - default "nptl" - -choice - bool - prompt "eglibc version" -# Don't remove next line -# CT_INSERT_VERSION_BELOW - -config LIBC_EGLIBC_LINARO_V_2_19 - bool - prompt "Linaro 2.19-2014.08" - select LIBC_EGLIBC_2_16_or_later - -config LIBC_EGLIBC_V_2_18 - bool - prompt "2_18" - select LIBC_EGLIBC_2_16_or_later - -config LIBC_EGLIBC_V_2_17 - bool - prompt "2_17" - select LIBC_EGLIBC_2_16_or_later - -config LIBC_EGLIBC_V_2_16 - bool - prompt "2_16" - select LIBC_GLIBC_PORTS_EXTERNAL - select LIBC_EGLIBC_2_16_or_later - -config LIBC_EGLIBC_V_2_15 - bool - prompt "2_15" - select LIBC_GLIBC_PORTS_EXTERNAL - -config LIBC_EGLIBC_V_2_14 - bool - prompt "2_14" - select LIBC_GLIBC_PORTS_EXTERNAL - -config LIBC_EGLIBC_V_2_13 - bool - prompt "2_13" - select LIBC_GLIBC_PORTS_EXTERNAL - -config LIBC_EGLIBC_V_2_12 - bool - prompt "2_12" - select LIBC_GLIBC_PORTS_EXTERNAL - -config LIBC_EGLIBC_V_2_11 - bool - prompt "2_11" - select LIBC_GLIBC_PORTS_EXTERNAL - -config LIBC_EGLIBC_V_2_10 - bool - prompt "2_10" - select LIBC_GLIBC_PORTS_EXTERNAL - -config LIBC_EGLIBC_V_2_9 - bool - prompt "2_9" - select LIBC_GLIBC_PORTS_EXTERNAL - -config LIBC_EGLIBC_V_TRUNK - bool - prompt "'trunk'" - select LIBC_EGLIBC_2_16_or_later - help - Selecting this will export the trunk of the eglibc subversion repository. - -config LIBC_EGLIBC_CUSTOM - bool - prompt "Custom eglibc" - depends on EXPERIMENTAL - select LIBC_EGLIBC_2_16_or_later - select LIBC_CUSTOM - -endchoice - -config LIBC_VERSION - string -# Don't remove next line -# CT_INSERT_VERSION_STRING_BELOW - default "linaro-2.19-2014.08" if LIBC_EGLIBC_LINARO_V_2_19 - default "2_18" if LIBC_EGLIBC_V_2_18 - default "2_17" if LIBC_EGLIBC_V_2_17 - default "2_16" if LIBC_EGLIBC_V_2_16 - default "2_15" if LIBC_EGLIBC_V_2_15 - default "2_14" if LIBC_EGLIBC_V_2_14 - default "2_13" if LIBC_EGLIBC_V_2_13 - default "2_12" if LIBC_EGLIBC_V_2_12 - default "2_11" if LIBC_EGLIBC_V_2_11 - default "2_10" if LIBC_EGLIBC_V_2_10 - default "2_9" if LIBC_EGLIBC_V_2_9 - default "trunk" if LIBC_EGLIBC_V_TRUNK - default "custom" if LIBC_EGLIBC_CUSTOM - -config LIBC_EGLIBC_2_16_or_later - bool - -config LIBC_CUSTOM - bool - -if LIBC_EGLIBC_CUSTOM - -config LIBC_EGLIBC_CUSTOM_LOCATION - string - prompt "Full path to custom eglibc source" - default "" - help - Enter the path to the directory (or tarball) of your source for eglibc, - or leave blank to use default CT_CUSTOM_LOCATION_ROOT_DIR/eglibc - -endif # LIBC_EGLIBC_CUSTOM -if ! LIBC_EGLIBC_CUSTOM - -if CONFIGURE_has_svn - -config EGLIBC_REVISION - string - prompt "Revision to use" - default "HEAD" - help - Enter the revision of trunk you want to use. - Default is HEAD. - - A revision argument can be one of: - NUMBER revision number - '{' DATE '}' revision at start of the date (*) - 'HEAD' latest in repository - - (*) If you want to use a date, please use ISO-8601 formats if - at all possible. - -config EGLIBC_HTTP - bool - prompt "use http:// instead of svn://" - help - By default, when eglibc is downloaded it is checked out using - svn://svn.eglibc.org. This option allows you to download eglibc - from http://www.eglibc.org, if you are behind a proxy or firewall. - If you are behind a proxy, don't forget to update your - .subversion/servers file with your proxy info in [global]. - -config EGLIBC_CHECKOUT - bool - prompt "checkout instead of export" - default y if LIBC_EGLIBC_V_TRUNK - help - By default, the eglibc download will be an export of the subversion - repository. If you say 'y' here, then the repository will instead be - checked-out, so that you can update it later. - - Note that crosstool-NG will *not* update your working copy, you will - have to do that yourself. - -endif # ! CONFIGURE_has_svn -if ! CONFIGURE_has_svn - -comment "svn is missing. You'll have to either:" -comment "| - have a pre-downloaded local tarball" -comment "| - or have a LAN mirror with a pre-downloaded tarball" -comment "otherwise you won't be able to download eglibc" - -endif # ! CONFIGURE_has_svn -endif # ! LIBC_EGLIBC_CUSTOM - -config EGLIBC_OPT_SIZE - bool - prompt "optimize eglibc for size (-Os)" - help - Optimize eglibc for size using -Os instead of -O2. This will make eglibc - smaller but may make it slower. - -config EGLIBC_CUSTOM_CONFIG - bool - prompt "Use custom configuration file" - help - Use a custom configuration file to disable some features in the eglibc - library. The configuration file options are described in detail in the - option-groups.def file in the eglibc source directory. - -if EGLIBC_CUSTOM_CONFIG - config EGLIBC_OPTION_GROUPS_FILE - string - prompt "Path to the option-groups configuration file" - default "" - help - Path to the option groups configuration file. - - config EGLIBC_BUNDLED_NSS_CONFIG - bool - prompt "Use bundled NSS config file" - default y - help - Use minimal nsswitch configuration file bundled in eglibc. - This option is only meaningful when runtime nss configuration - is disabled in the option groups file. - - config EGLIBC_NSS_CONFIG_FILE - string - prompt "Path to the NSS config file" - default "" - depends on !EGLIBC_BUNDLED_NSS_CONFIG - help - Path to the nsswitch configuration file - - config EGLIBC_BUNDLED_NSS_FUNCTIONS - bool - prompt "Use bundled NSS functions file" - default y - help - Use minimal nsswitch functions file bundled in eglibc. - This option is only meaningful when runtime nss configuration - is disabled in the option groups file. - - config EGLIBC_NSS_FUNCTIONS_FILE - string - prompt "Path to the NSS functions file" - default "" - depends on !EGLIBC_BUNDLED_NSS_FUNCTIONS - help - Path to the nsswitch functions file -endif diff --git a/config/libc/eglibc.in.2 b/config/libc/eglibc.in.2 deleted file mode 100644 index 84553f3..0000000 --- a/config/libc/eglibc.in.2 +++ /dev/null @@ -1 +0,0 @@ -source "config/libc/glibc-eglibc.in-common" diff --git a/config/libc/glibc-eglibc.in-common b/config/libc/glibc-eglibc.in-common deleted file mode 100644 index f199e3a..0000000 --- a/config/libc/glibc-eglibc.in-common +++ /dev/null @@ -1,268 +0,0 @@ -# This file contains the common configuration options -# that apply to both glibc and eglibc. - -# Some architectures require the ports addon. List them one by one here: -# This list must be carefully in sync with the architectures names -# we can find in config/arch/* - -config LIBC_GLIBC_PORTS_EXTERNAL - bool - default n - -config LIBC_GLIBC_MAY_FORCE_PORTS - bool - default y if ARCH_arm - default y if ARCH_mips - select LIBC_GLIBC_USE_PORTS - depends on !LIBC_GLIBC_2_20_or_later - -# Force using the BFD linker during the toolchain build -config LIBC_glibc_familly - bool - default y - select BINUTILS_FORCE_LD_BFD - -config LIBC_GLIBC_EXTRA_CONFIG_ARRAY - string - prompt "extra config" - default "" - help - Extra flags to pass onto ./configure when configuring. - - You can enter multiple arguments here, and arguments can contain spaces - if they are properly quoted (or escaped, but prefer quotes). Eg.: - --with-foo="1st arg with 4 spaces" --with-bar=2nd-arg-without-space - -config LIBC_GLIBC_CONFIGPARMS - string - prompt "Extra config params (READ HELP)" - default "" if ! ARCH_sh - default "no-z-defs=yes" if ARCH_sh - help - Some architectures need to set options in the file configparms. - This is the case for sh3/4, which really need to set configparms - to "no-z-defs=yes" as of gcc-3.4/glibc-2.3.2. - - Unless you are building a toolchain for sh3/4, you should leave that empty. - - Note: If you need to pass more than one value, separate them with - '\n'. Eg.: var1=val1\nvar2=val2 - -config LIBC_GLIBC_EXTRA_CFLAGS - string - prompt "extra target CFLAGS" - default "" - help - Extra target CFLAGS to use when building. - -config LIBC_EXTRA_CC_ARGS - string - prompt "gcc extra flags" - default "" - help - Extra flags to pass gcc when building. - - Seldom used, except for sparc64 which seems to need the flag -64 - to be passed onto gcc. - -config LIBC_ENABLE_FORTIFIED_BUILD - bool - prompt "Enable fortified build (EXPERIMENTAL)" - depends on EXPERIMENTAL - help - If you say 'y' here, then glibc will be using fortified versions - of functions with format arguments (eg. vsyslog, printf...), and - do a sanity check on the format at runtime, to avoid some of the - common format string attacks. - - This is currently not supported, and will most probably result in - a broken build, with an error message like: - ../misc/syslog.c: In function '__vsyslog_chk': - ../misc/syslog.c:123: sorry, unimplemented: inlining failed in - call to 'syslog': function body not available - - If you are brave enough and want to debug the issue, then say 'y' - here. Otherwise, be still and say 'n' (the default). ;-) - - -config LIBC_DISABLE_VERSIONING - bool - prompt "Disable symbols versioning" - help - Do not include versioning information in the library objects. - -config LIBC_OLDEST_ABI - string - prompt "Oldest supported ABI" - default "" - help - Set the oldest ABI supported by the C library. - - Setting this option, for example, to 2.2 will provide ABI support - back to (e)glibc-2.2. - - If this option is not set, (e)glibc will choose for you. - -config LIBC_GLIBC_FORCE_UNWIND - bool - prompt "Force unwind support (READ HELP!)" - default y - help - If your toolchain fails building while building the C library - start files, or the complete C library, with a message like: - configure: error: forced unwind support is required - - then you may try changing this option. Otherwise, leave it to - the default 'y'. - - The issue seems to be related to building NPTL on old versions - of glibc (and possibly eglibc as well) on some architectures - (seen on s390, s390x and x86_64). - -config LIBC_GLIBC_USE_PORTS - bool - prompt "Use the ports addon" - depends on !LIBC_GLIBC_2_20_or_later - help - The ports addon contains some architecture ports that are not available - in the official distribution. - - For example, this is the case for ARM with glibc-2.4 and above. - - Say n only if you're sure that your architecture is in the official - distribution for your chosen version. - -config LIBC_ADDONS_LIST - string - prompt "Extra addons" - default "" - help - Extra addons to include. Space separated list. - - You need to specify neither linuxthreads nor nptl, as they are added - automagically for you depending on the threading model you chose - earlier. - - Eg.: crypt (for very old libces) - -if LIBC_GLIBC_USE_PORTS || ( LIBC_ADDONS_LIST != "" ) -comment "WARNING !!! " -comment "| For glibc >= 2.8, it can happen that the tarballs " -comment "| for the addons are not available for download. " -comment "| If that happens, bad luck... Try a previous version " -comment "| or try again later... :-( " -endif - -config LIBC_LOCALES - bool - prompt "Build and install locales" - help - Whether to build and install the libc locale files for the target, - which is required in order to support internationalization. - -if LIBC_glibc && LIBC_LOCALES -comment "WARNING! " -comment "| The built locales will be usable if and only if the build " -comment "| machine and the target: " -comment "| - have the same endianness, " -comment "| - and have the same alignment requirements for uint32_t. " -comment "| You will have to check by yourself (for now). " -endif # LIBC_glibc && LIBC_LOCALES - -if KERNEL_linux - -choice LIBC_GLIBC_SUPPORTED_KERNEL - bool - prompt "Minimum supported kernel version" - default LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS - -config LIBC_GLIBC_KERNEL_VERSION_NONE - bool - prompt "Let ./configure decide" - help - Let ./configure decide what minimum kernel version glibc/eglibc - will be able to run against. - - This will include legacy compatibility code for older kernels in - the C library, thus ensuring that it will run on a large number - of old kernels. - - The minimum kernel version supported will be dependent upon the - target you build for. For example: - alpha*-*-linux-gnu Requires Linux 2.6.9 for NPTL - sh[34]-*-linux-gnu Requires Linux 2.6.11 - powerpc* Requires Linux 2.4.19 - arm*-*-linux-*gnueabi Requires Linux 2.6.16 - -config LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS - bool - prompt "Same as kernel headers (default)" - help - Normally, you'll want glibc/eglibc to run against the same kernel - version as the one used for the headers. - - This is the default. - - If enabled, crosstool-ng will use the chosen version of kernel - headers for the glibc minimum kernel version supported, which is - what gets passed to "--enable-kernel=" when configuring glibc. - - Enabling this will ensure that no legacy compatibility code for - older kernels is built into your C libraries, but it will - be unable to run on kernel versions older than whichever kernel - headers version you've built the toolchain for. - - If you know for sure that your toolchain will never need to build - applications that will run under a kernel version older than your - chosen kernel headers version (CT_KERNEL_VERSION), you can choose - "y" here. - -config LIBC_GLIBC_KERNEL_VERSION_CHOSEN - bool - prompt "Specific kernel version" - help - Specify the earliest Linux kernel version you want glibc to - include support for. This does not have to match the kernel - headers version used for your toolchain. This controls what is - passed to the "--enable-kernel=" option to the glibc configure - script. - - If you want to be able to statically link programs with your - toolchain's C library, make sure this kernel version is lower than - all kernels you wish to support to avoid "FATAL: kernel too old" - errors. The higher the version you specify, the less legacy code - will be built into libc. - - Most people can leave this at the default value of "2.6.9". - -if LIBC_GLIBC_KERNEL_VERSION_CHOSEN - -config LIBC_GLIBC_MIN_KERNEL_VERSION - string - prompt "Minimum kernel version to support" - default "2.6.9" - help - Enter here the lowest kernel version glibc/eglibc will be able to - run against. - - The minimum kernel version supported will be dependent upon the - target you build for. For example: - alpha*-*-linux-gnu Requires Linux 2.6.9 for NPTL - sh[34]-*-linux-gnu Requires Linux 2.6.11 - powerpc* Requires Linux 2.4.19 - arm*-*-linux-*gnueabi Requires Linux 2.6.16 - - Note that no sanity check is performed by crosstool-NG to ensure - that the value you enter here is appropriate for your target. - -endif # LIBC_GLIBC_KERNEL_VERSION_CHOSEN - -endchoice - -config LIBC_GLIBC_MIN_KERNEL - string - default "" if LIBC_GLIBC_KERNEL_VERSION_NONE - default KERNEL_VERSION if LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS - default LIBC_GLIBC_MIN_KERNEL_VERSION if LIBC_GLIBC_KERNEL_VERSION_CHOSEN - -endif # KERNEL_linux diff --git a/config/libc/glibc.in b/config/libc/glibc.in index 42575f7..fbc82d5 100644 --- a/config/libc/glibc.in +++ b/config/libc/glibc.in @@ -6,21 +6,44 @@ ## select CC_CORE_PASSES_NEEDED ## ## help The de-facto standard for Linux distributions. -## help Feature-rich, but large... Most usefull for desktop-like systems. +## help Feature-rich, but large... Most useful for desktop-like systems. config THREADS default "nptl" +config CC_GLIBC_SHOW_LINARO + bool + prompt "Show Linaro versions" + help + Linaro is maintaining some advanced/more stable/experimental versions + of glibc, especially for the ARM architecture. + + Those versions have not been blessed by the glibc comunity (nor have they + been cursed either!), but they look to be pretty much stable, and even + more stable than the upstream versions. YMMV... + + If you do not know what this Linaro stuff is, then simply say 'n' here, + and rest in peace. OTOH, if you know what you are doing, you will be + able to use and enjoy :-) the Linaro versions by saying 'y' here. + + Linaro: http://www.linaro.org/ + choice bool prompt "glibc version" # Don't remove next line # CT_INSERT_VERSION_BELOW +config LIBC_GLIBC_V_2_21 + bool + prompt "2.21" + select LIBC_GLIBC_2_20_or_later + config LIBC_GLIBC_LINARO_V_2_20 bool prompt "Linaro 2.20-2014.11" select LIBC_GLIBC_2_20_or_later + depends on CC_GLIBC_SHOW_LINARO config LIBC_GLIBC_V_2_20 bool @@ -131,6 +154,7 @@ config LIBC_VERSION string # Don't remove next line # CT_INSERT_VERSION_STRING_BELOW + default "2.21" if LIBC_GLIBC_V_2_21 default "linaro-2.20-2014.11" if LIBC_GLIBC_LINARO_V_2_20 default "2.20" if LIBC_GLIBC_V_2_20 default "2.19" if LIBC_GLIBC_V_2_19 diff --git a/config/libc/glibc.in.2 b/config/libc/glibc.in.2 index 84553f3..346f9b7 100644 --- a/config/libc/glibc.in.2 +++ b/config/libc/glibc.in.2 @@ -1 +1,267 @@ -source "config/libc/glibc-eglibc.in-common" +# This file contains the common configuration options +# that apply to both glibc. + +# Some architectures require the ports addon. List them one by one here: +# This list must be carefully in sync with the architectures names +# we can find in config/arch/* + +config LIBC_GLIBC_PORTS_EXTERNAL + bool + default n + +config LIBC_GLIBC_MAY_FORCE_PORTS + bool + default y if ARCH_arm + default y if ARCH_mips + select LIBC_GLIBC_USE_PORTS + depends on !LIBC_GLIBC_2_20_or_later + +# Force using the BFD linker during the toolchain build +config LIBC_glibc_familly + bool + default y + select BINUTILS_FORCE_LD_BFD + +config LIBC_GLIBC_EXTRA_CONFIG_ARRAY + string + prompt "extra config" + default "" + help + Extra flags to pass onto ./configure when configuring. + + You can enter multiple arguments here, and arguments can contain spaces + if they are properly quoted (or escaped, but prefer quotes). Eg.: + --with-foo="1st arg with 4 spaces" --with-bar=2nd-arg-without-space + +config LIBC_GLIBC_CONFIGPARMS + string + prompt "Extra config params (READ HELP)" + default "" if ! ARCH_sh + default "no-z-defs=yes" if ARCH_sh + help + Some architectures need to set options in the file configparms. + This is the case for sh3/4, which really need to set configparms + to "no-z-defs=yes" as of gcc-3.4/glibc-2.3.2. + + Unless you are building a toolchain for sh3/4, you should leave that empty. + + Note: If you need to pass more than one value, separate them with + '\n'. Eg.: var1=val1\nvar2=val2 + +config LIBC_GLIBC_EXTRA_CFLAGS + string + prompt "extra target CFLAGS" + default "" + help + Extra target CFLAGS to use when building. + +config LIBC_EXTRA_CC_ARGS + string + prompt "gcc extra flags" + default "" + help + Extra flags to pass gcc when building. + + Seldom used, except for sparc64 which seems to need the flag -64 + to be passed onto gcc. + +config LIBC_ENABLE_FORTIFIED_BUILD + bool + prompt "Enable fortified build (EXPERIMENTAL)" + depends on EXPERIMENTAL + help + If you say 'y' here, then glibc will be using fortified versions + of functions with format arguments (eg. vsyslog, printf...), and + do a sanity check on the format at runtime, to avoid some of the + common format string attacks. + + This is currently not supported, and will most probably result in + a broken build, with an error message like: + ../misc/syslog.c: In function '__vsyslog_chk': + ../misc/syslog.c:123: sorry, unimplemented: inlining failed in + call to 'syslog': function body not available + + If you are brave enough and want to debug the issue, then say 'y' + here. Otherwise, be still and say 'n' (the default). ;-) + + +config LIBC_DISABLE_VERSIONING + bool + prompt "Disable symbols versioning" + help + Do not include versioning information in the library objects. + +config LIBC_OLDEST_ABI + string + prompt "Oldest supported ABI" + default "" + help + Set the oldest ABI supported by the C library. + + Setting this option, for example, to 2.2 will provide ABI support + back to (e)glibc-2.2. + + If this option is not set, (e)glibc will choose for you. + +config LIBC_GLIBC_FORCE_UNWIND + bool + prompt "Force unwind support (READ HELP!)" + default y + help + If your toolchain fails building while building the C library + start files, or the complete C library, with a message like: + configure: error: forced unwind support is required + + then you may try changing this option. Otherwise, leave it to + the default 'y'. + + The issue seems to be related to building NPTL on old versions + of glibc on some architectures + (seen on s390, s390x and x86_64). + +config LIBC_GLIBC_USE_PORTS + bool + prompt "Use the ports addon" + depends on !LIBC_GLIBC_2_20_or_later + help + The ports addon contains some architecture ports that are not available + in the official distribution. + + For example, this is the case for ARM with glibc-2.4 and above. + + Say n only if you're sure that your architecture is in the official + distribution for your chosen version. + +config LIBC_ADDONS_LIST + string + prompt "Extra addons" + default "" + help + Extra addons to include. Space separated list. + + You need to specify neither linuxthreads nor nptl, as they are added + automagically for you depending on the threading model you chose + earlier. + + Eg.: crypt (for very old libces) + +if LIBC_GLIBC_USE_PORTS || ( LIBC_ADDONS_LIST != "" ) +comment "WARNING !!! " +comment "| For glibc >= 2.8, it can happen that the tarballs " +comment "| for the addons are not available for download. " +comment "| If that happens, bad luck... Try a previous version " +comment "| or try again later... :-( " +endif + +config LIBC_LOCALES + bool + prompt "Build and install locales" + help + Whether to build and install the libc locale files for the target, + which is required in order to support internationalization. + +if LIBC_glibc && LIBC_LOCALES +comment "WARNING! " +comment "| The built locales will be usable if and only if the build " +comment "| machine and the target: " +comment "| - have the same endianness, " +comment "| - and have the same alignment requirements for uint32_t. " +comment "| You will have to check by yourself (for now). " +endif # LIBC_glibc && LIBC_LOCALES + +if KERNEL_linux + +choice LIBC_GLIBC_SUPPORTED_KERNEL + bool + prompt "Minimum supported kernel version" + default LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS + +config LIBC_GLIBC_KERNEL_VERSION_NONE + bool + prompt "Let ./configure decide" + help + Let ./configure decide what minimum kernel version glibc will be + able to run against. + + This will include legacy compatibility code for older kernels in + the C library, thus ensuring that it will run on a large number + of old kernels. + + The minimum kernel version supported will be dependent upon the + target you build for. For example: + alpha*-*-linux-gnu Requires Linux 2.6.9 for NPTL + sh[34]-*-linux-gnu Requires Linux 2.6.11 + powerpc* Requires Linux 2.4.19 + arm*-*-linux-*gnueabi Requires Linux 2.6.16 + +config LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS + bool + prompt "Same as kernel headers (default)" + help + Normally, you'll want glibc to run against the same kernel + version as the one used for the headers. + + This is the default. + + If enabled, crosstool-ng will use the chosen version of kernel + headers for the glibc minimum kernel version supported, which is + what gets passed to "--enable-kernel=" when configuring glibc. + + Enabling this will ensure that no legacy compatibility code for + older kernels is built into your C libraries, but it will + be unable to run on kernel versions older than whichever kernel + headers version you've built the toolchain for. + + If you know for sure that your toolchain will never need to build + applications that will run under a kernel version older than your + chosen kernel headers version (CT_KERNEL_VERSION), you can choose + "y" here. + +config LIBC_GLIBC_KERNEL_VERSION_CHOSEN + bool + prompt "Specific kernel version" + help + Specify the earliest Linux kernel version you want glibc to + include support for. This does not have to match the kernel + headers version used for your toolchain. This controls what is + passed to the "--enable-kernel=" option to the glibc configure + script. + + If you want to be able to statically link programs with your + toolchain's C library, make sure this kernel version is lower than + all kernels you wish to support to avoid "FATAL: kernel too old" + errors. The higher the version you specify, the less legacy code + will be built into libc. + + Most people can leave this at the default value of "2.6.9". + +if LIBC_GLIBC_KERNEL_VERSION_CHOSEN + +config LIBC_GLIBC_MIN_KERNEL_VERSION + string + prompt "Minimum kernel version to support" + default "2.6.9" + help + Enter here the lowest kernel version glibc will be able to run against. + + The minimum kernel version supported will be dependent upon the + target you build for. For example: + alpha*-*-linux-gnu Requires Linux 2.6.9 for NPTL + sh[34]-*-linux-gnu Requires Linux 2.6.11 + powerpc* Requires Linux 2.4.19 + arm*-*-linux-*gnueabi Requires Linux 2.6.16 + + Note that no sanity check is performed by crosstool-NG to ensure + that the value you enter here is appropriate for your target. + +endif # LIBC_GLIBC_KERNEL_VERSION_CHOSEN + +endchoice + +config LIBC_GLIBC_MIN_KERNEL + string + default "" if LIBC_GLIBC_KERNEL_VERSION_NONE + default KERNEL_VERSION if LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS + default LIBC_GLIBC_MIN_KERNEL_VERSION if LIBC_GLIBC_KERNEL_VERSION_CHOSEN + +endif # KERNEL_linux diff --git a/config/libc/mingw.in b/config/libc/mingw.in index 6997600..895bc81 100644 --- a/config/libc/mingw.in +++ b/config/libc/mingw.in @@ -16,6 +16,36 @@ choice # Don't remove next line # CT_INSERT_VERSION_BELOW + +config WINAPI_V_DEVEL + bool + prompt "devel" + depends on EXPERIMENTAL + +config WINAPI_V_4_0_2 + bool + prompt "4.0.2" + +config WINAPI_V_4_0_1 + bool + prompt "4.0.1" + +config WINAPI_V_4_0_0 + bool + prompt "4.0.0" + +config WINAPI_V_3_1_0 + bool + prompt "3.1.0" + +config WINAPI_V_3_0_0 + bool + prompt "3.0.0" + +config WINAPI_V_2_0_8 + bool + prompt "2.0.8" + config WINAPI_V_2_0_7 bool prompt "2.0.7" @@ -31,6 +61,13 @@ config WINAPI_VERSION prompt "Windows API version" if WINAPI_V_select # Don't remove next line # CT_INSERT_VERSION_STRING_BELOW + default "devel" if WINAPI_V_DEVEL + default "4.0.2" if WINAPI_V_4_0_2 + default "4.0.1" if WINAPI_V_4_0_1 + default "4.0.0" if WINAPI_V_4_0_0 + default "3.1.0" if WINAPI_V_3_1_0 + default "3.0.0" if WINAPI_V_3_0_0 + default "2.0.8" if WINAPI_V_2_0_8 default "2.0.7" if WINAPI_V_2_0_7 help Enter the version number of the Windows API files to use diff --git a/config/libc/musl.in b/config/libc/musl.in index 0ab7229..9ecae01 100644 --- a/config/libc/musl.in +++ b/config/libc/musl.in @@ -18,14 +18,14 @@ choice # Don't remove next line # CT_INSERT_VERSION_BELOW -config LIBC_MUSL_V_1_1_5 +config LIBC_MUSL_V_1_1 bool - prompt "1.1.5 (Mainline)" + prompt "1.1.9 (Mainline)" depends on EXPERIMENTAL -config LIBC_MUSL_V_1_0_4 +config LIBC_MUSL_V_1_0 bool - prompt "1.0.4 (Stable)" + prompt "1.0.5 (Stable)" config LIBC_MUSL_V_CUSTOM bool @@ -38,6 +38,6 @@ config LIBC_VERSION string # Don't remove next line # CT_INSERT_VERSION_STRING_BELOW - default "1.1.5" if LIBC_MUSL_V_1_1_5 - default "1.0.4" if LIBC_MUSL_V_1_0_4 + default "1.1.9" if LIBC_MUSL_V_1_1 + default "1.0.5" if LIBC_MUSL_V_1_0 default "custom" if LIBC_MUSL_V_CUSTOM diff --git a/config/libc/newlib.in b/config/libc/newlib.in index 8109354..67ecf54 100644 --- a/config/libc/newlib.in +++ b/config/libc/newlib.in @@ -13,6 +13,23 @@ ## help array of processors, and will usually work on any architecture with ## help the addition of a few low-level routines. +config CC_NEWLIB_SHOW_LINARO + bool + prompt "Show Linaro versions" + help + Linaro is maintaining some advanced/more stable/experimental versions + of newlib, especially for the ARM architecture. + + Those versions have not been blessed by the newlib comunity (nor have they + been cursed either!), but they look to be pretty much stable, and even + more stable than the upstream versions. YMMV... + + If you do not know what this Linaro stuff is, then simply say 'n' here, + and rest in peace. OTOH, if you know what you are doing, you will be + able to use and enjoy :-) the Linaro versions by saying 'y' here. + + Linaro: http://www.linaro.org/ + choice bool prompt "newlib version" @@ -22,6 +39,7 @@ choice config LIBC_NEWLIB_LINARO_V_2_2_0 bool prompt "Linaro 2.2.0-2015.01" + depends on CC_NEWLIB_SHOW_LINARO config LIBC_NEWLIB_V_2_2_0 bool @@ -30,6 +48,7 @@ config LIBC_NEWLIB_V_2_2_0 config LIBC_NEWLIB_LINARO_V_2_1_0 bool prompt "Linaro 2.1.0-2014.09" + depends on CC_NEWLIB_SHOW_LINARO config LIBC_NEWLIB_V_2_1_0 bool diff --git a/config/toolchain.in b/config/toolchain.in index b242444..5048e91 100644 --- a/config/toolchain.in +++ b/config/toolchain.in @@ -77,7 +77,7 @@ config TOOLCHAIN_PKGVERSION help Specify a string that identifies your package. You may wish to include a build number or build date. This version string will be included in - the output of gcc --version, and also in binutils, eglibc, gdb and + the output of gcc --version, and also in binutils, glibc, gdb and gdbserver. If this string is left empty, the actual package version will be: diff --git a/docs/0 - Table of content.txt b/docs/0 - Table of content.txt index ebac851..13e298b 100644 --- a/docs/0 - Table of content.txt +++ b/docs/0 - Table of content.txt @@ -59,7 +59,7 @@ B- Known issues - gcc is not found, although I *do* have gcc installed - The extract and/or path steps fail under Cygwin - uClibc fails to build under Cygwin - - On 64-bit build systems, the glibc (possibly eglibc too) build + - On 64-bit build systems, the glibc build fails for 64-bit targets, because it can not find libgcc - libtool.m4: error: problem compiling FC test program - unable to detect the exception model diff --git a/docs/7 - Contributing to crosstool-NG.txt b/docs/7 - Contributing to crosstool-NG.txt index a1c0121..a103554 100644 --- a/docs/7 - Contributing to crosstool-NG.txt +++ b/docs/7 - Contributing to crosstool-NG.txt @@ -32,7 +32,7 @@ Here is the (mostly-complete) list of categories and components: arch | alpha, arm, mips, powerpc... cc | gcc binutils | binutils, elf2flt, sstrip - libc | eglibc, uClibc, glibc, newlib, mingw, none + libc | uClibc, glibc, newlib, mingw, none kernel | linux, mingw32, bare-metal debug | dmalloc, duma, gdb, ltrace, strace complibs | gmp, mpfr, ppl, cloog, mpc, libelf diff --git a/docs/8 - Internals.txt b/docs/8 - Internals.txt index d919a77..0eefd1b 100644 --- a/docs/8 - Internals.txt +++ b/docs/8 - Internals.txt @@ -247,8 +247,7 @@ The kernel's ".sh" file API: - CT_DoGet <tarball_base_name> <URL1 [URL...]> Eg.: CT_DoGet linux-2.6.26.5 ftp://ftp.kernel.org/pub/linux/kernel/v2.6 Note: retrieving sources from svn, cvs, git and the likes is not supported - by CT_DoGet. You'll have to do this by hand, as it is done for eglibc in - "scripts/build/libc/eglibc.sh" + by CT_DoGet. For now, you'll have to do this by hand. > defines the function "do_kernel_extract": + parameters: none diff --git a/docs/9 - How is a toolchain constructed.txt b/docs/9 - How is a toolchain constructed.txt index 353c0a2..a358b9e 100644 --- a/docs/9 - How is a toolchain constructed.txt +++ b/docs/9 - How is a toolchain constructed.txt @@ -51,8 +51,8 @@ thereof, running on the target, we also need the C library. The C library provides a standard abstraction layer that performs basic tasks (such as allocating memory, printing output on a terminal, managing file access...). There are many C libraries, each targeted to different systems. For the -Linux /desktop/, there is glibc or eglibc or even uClibc, for embedded Linux, -you have a choice of eglibc or uClibc, while for system without an Operating +Linux /desktop/, there is glibc or even uClibc, for embedded Linux, +you have a choice of uClibc, while for system without an Operating System, you may use newlib, dietlibc, or even none at all. There a few other C libraries, but they are not as widely used, and/or are targeted to very specific needs (eg. klibc is a very small subset of the C library aimed at diff --git a/docs/B - Known issues.txt b/docs/B - Known issues.txt index 271ce09..1d2db19 100644 --- a/docs/B - Known issues.txt +++ b/docs/B - Known issues.txt @@ -79,15 +79,15 @@ Symptoms: Explanations: This is not related to crosstool-NG. Mounts under Cygwin are by default not - case-sensitive. You have to use so-called "managed" mounts. See: - http://cygwin.com/faq.html section 4, question 32. + case-sensitive. You have to change a registry setting to disable + case-insensitivity. See: + http://cygwin.com/faq.html section 4, question 30. Status: DEPRECATED Fix: - Use "managed" mounts for the directories where you build *and* install your - toolchains. + Change the registry value as per the instructions on the Cygwin website. Workaround: None. @@ -111,7 +111,7 @@ Workaround: -------------------------------- Symptoms: - On 64-bit build systems, the glibc (possibly eglibc too) build fails for + On 64-bit build systems, the glibc build fails for 64-bit targets, because it can not find libgcc. Explanations: @@ -180,8 +180,7 @@ Symptoms: Explanations: The issue seems to be related to building NPTL on old versions - of glibc (and possibly eglibc as well) on some architectures - (seen on powerpc, s390, s390x and x86_64). + of glibc on some architectures (seen on powerpc, s390, s390x and x86_64). Status: CURRENT @@ -197,13 +196,13 @@ Symptoms: glibc start files and headers fail with: [/usr/include/limits.h] Error 1 Explanations: - Old glibc (and eglibc) Makefiles break with make-3.82. + Old glibc Makefiles break with make-3.82. Status: CURRENT Fix: - None so far. It would require some glibc/eglibc hacking. + None so far. It would require some glibc hacking. Workaround: There two possible workarounds: @@ -221,7 +220,7 @@ Symptoms: The build fails with "mixed implicit and normal rules. Stop." Explanations: - Old glibc (and eglibc) Makefiles break with make-3.82. + Old glibc Makefiles break with make-3.82. Status: CURRENT diff --git a/docs/ct-ng.1.in b/docs/ct-ng.1.in index 044000f..65a0b0e 100644 --- a/docs/ct-ng.1.in +++ b/docs/ct-ng.1.in @@ -138,7 +138,7 @@ to canonicalise the machines' name (host, build and target machines). ." .SH ENVIRONMENT .TP -.B STOP, START +.B STOP, RESTART Respectively stops and restarts the build just before this step. To restart a step, a previous build should have run at least to that step, or further. diff --git a/kconfig/zconf.gperf b/kconfig/zconf.gperf index c9e690e..d758a2a 100644 --- a/kconfig/zconf.gperf +++ b/kconfig/zconf.gperf @@ -7,6 +7,15 @@ %pic %struct-type +%{ +# ifndef offsetof +# include <stddef.h> +# ifndef offsetof +# define offsetof(st, m) ((size_t)(&((st *)0)->m)) +# endif +# endif +%} + struct kconf_id; static struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len); diff --git a/patches/binutils/2.25/300-012_check_ldrunpath_length.patch b/patches/binutils/2.25/300-012_check_ldrunpath_length.patch index 16365b9..f1f31af 100644 --- a/patches/binutils/2.25/300-012_check_ldrunpath_length.patch +++ b/patches/binutils/2.25/300-012_check_ldrunpath_length.patch @@ -15,7 +15,7 @@ index 137446f..bb8391a 100644 rpath = command_line.rpath; if (rpath == NULL) rpath = (const char *) getenv ("LD_RUN_PATH"); -+ if ((rpath) && (strlen (rpath) == 0)) ++ if ((rpath) && (*rpath == '\0')) + rpath = NULL; for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next) diff --git a/patches/eglibc/2_10/100-powerpc-8xx-CPU15-errata.patch b/patches/eglibc/2_10/100-powerpc-8xx-CPU15-errata.patch deleted file mode 100644 index 4fe1bb2..0000000 --- a/patches/eglibc/2_10/100-powerpc-8xx-CPU15-errata.patch +++ /dev/null @@ -1,49 +0,0 @@ -diff -ru eglibc-2_9_orig/sysdeps/powerpc/powerpc32/memset.S eglibc-2_9/sysdeps/powerpc/powerpc32/memset.S ---- eglibc-2_9_orig/sysdeps/powerpc/powerpc32/memset.S 2007-04-13 08:35:45.000000000 -0700 -+++ eglibc-2_9/sysdeps/powerpc/powerpc32/memset.S 2009-05-06 16:52:04.000000000 -0700 -@@ -112,11 +112,13 @@ - clrrwi. rALIGN, rLEN, 5 - mtcrf 0x01, rLEN /* 40th instruction from .align */ - -+#ifndef BROKEN_PPC_8xx_CPU15 - /* Check if we can use the special case for clearing memory using dcbz. - This requires that we know the correct cache line size for this - processor. Getting the __cache_line_size may require establishing GOT - addressability, so branch out of line to set this up. */ - beq cr1, L(checklinesize) -+#endif - - /* Store blocks of 32-bytes (256-bits) starting on a 32-byte boundary. - Can't assume that rCHR is zero or that the cache line size is either -@@ -158,6 +160,7 @@ - add rMEMP, rMEMP, rALIGN - b L(medium_tail2) /* 72nd instruction from .align */ - -+#ifndef BROKEN_PPC_8xx_CPU15 - .align 5 - nop - /* Clear cache lines of memory in 128-byte chunks. -@@ -191,6 +194,7 @@ - bdnz L(zloop) - beqlr cr5 - b L(medium_tail2) -+#endif /* ! BROKEN_PPC_8xx_CPU15 */ - - .align 5 - L(small): -@@ -248,6 +252,7 @@ - stw rCHR, -8(rMEMP) - blr - -+#ifndef BROKEN_PPC_8xx_CPU15 - L(checklinesize): - #ifdef SHARED - mflr rTMP -@@ -329,6 +334,7 @@ - L(handletail32): - clrrwi. rALIGN, rLEN, 5 - b L(nondcbz) -+#endif /* ! BROKEN_PPC_8xx_CPU15 */ - - END (BP_SYM (memset)) - libc_hidden_builtin_def (memset) diff --git a/patches/eglibc/2_15/100-Remove-test-for-__builtin_expect.patch b/patches/eglibc/2_15/100-Remove-test-for-__builtin_expect.patch deleted file mode 100644 index ed2d1ce..0000000 --- a/patches/eglibc/2_15/100-Remove-test-for-__builtin_expect.patch +++ /dev/null @@ -1,78 +0,0 @@ -diff --git a/configure b/configure -index e5e0184..85da2bc 100755 ---- a/configure -+++ b/configure -@@ -7567,40 +7567,6 @@ _ACEOF - fi - fi - --{ $as_echo "$as_me:$LINENO: checking for __builtin_expect" >&5 --$as_echo_n "checking for __builtin_expect... " >&6; } --if test "${libc_cv_gcc_builtin_expect+set}" = set; then -- $as_echo_n "(cached) " >&6 --else -- cat > conftest.c <<EOF --#line $LINENO "configure" --int foo (int a) --{ -- a = __builtin_expect (a, 10); -- return a == 10 ? 0 : 1; --} --EOF --if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -nostdlib -nostartfiles -- -o conftest conftest.c -lgcc >&5' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- libc_cv_gcc_builtin_expect=yes --else -- libc_cv_gcc_builtin_expect=no --fi --rm -f conftest* --fi --{ $as_echo "$as_me:$LINENO: result: $libc_cv_gcc_builtin_expect" >&5 --$as_echo "$libc_cv_gcc_builtin_expect" >&6; } --if test "$libc_cv_gcc_builtin_expect" = no; then -- { { $as_echo "$as_me:$LINENO: error: support for __builtin_expect needed" >&5 --$as_echo "$as_me: error: support for __builtin_expect needed" >&2;} -- { (exit 1); exit 1; }; } --fi -- - { $as_echo "$as_me:$LINENO: checking for __builtin_memset" >&5 - $as_echo_n "checking for __builtin_memset... " >&6; } - if test "${libc_cv_gcc_builtin_memset+set}" = set; then -diff --git a/configure.in b/configure.in -index 4655c8a..596443d 100644 ---- a/configure.in -+++ b/configure.in -@@ -2134,28 +2134,6 @@ if test "$libc_cv_c_asmcr0_bug" != 'no'; then - fi - fi - --dnl Check whether compiler understands __builtin_expect. --AC_CACHE_CHECK(for __builtin_expect, libc_cv_gcc_builtin_expect, --[cat > conftest.c <<EOF --#line $LINENO "configure" --int foo (int a) --{ -- a = __builtin_expect (a, 10); -- return a == 10 ? 0 : 1; --} --EOF --dnl No \ in command here because it ends up inside ''. --if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -nostdlib -nostartfiles -- -o conftest conftest.c -lgcc >&AS_MESSAGE_LOG_FD]); then -- libc_cv_gcc_builtin_expect=yes --else -- libc_cv_gcc_builtin_expect=no --fi --rm -f conftest*]) --if test "$libc_cv_gcc_builtin_expect" = no; then -- AC_MSG_ERROR([support for __builtin_expect needed]) --fi -- - AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl - cat > conftest.c <<\EOF - void zero (void *x) diff --git a/patches/eglibc/2_16/001-Avoid-use-of-libgcc_s-and-libgcc_eh-when-building-gl.patch b/patches/eglibc/2_16/001-Avoid-use-of-libgcc_s-and-libgcc_eh-when-building-gl.patch deleted file mode 100644 index 5dd6941..0000000 --- a/patches/eglibc/2_16/001-Avoid-use-of-libgcc_s-and-libgcc_eh-when-building-gl.patch +++ /dev/null @@ -1,322 +0,0 @@ -Upstream-Status: Backport -Signed-off-by: Khem Raj <raj.khem@gmail.com> - -From 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7 Mon Sep 17 00:00:00 2001 -From: Joseph Myers <joseph@codesourcery.com> -Date: Tue, 3 Jul 2012 19:14:59 +0000 -Subject: [PATCH] Avoid use of libgcc_s and libgcc_eh when building glibc. - ---- - ChangeLog | 47 ++++++++++++++++++++++++++++++ - Makeconfig | 68 ++++++++++++++++++++++++++++++++++++++------ - Rules | 45 ++++++++++++++++++++++------- - elf/Makefile | 6 +++- - elf/static-stubs.c | 46 ++++++++++++++++++++++++++++++ - ports/ChangeLog.arm | 7 +++++ - ports/sysdeps/arm/Makefile | 8 ++++++ - 7 files changed, 206 insertions(+), 21 deletions(-) - create mode 100644 elf/static-stubs.c - -Index: a/Makeconfig -=================================================================== ---- a/Makeconfig 2012-07-04 18:26:22.000000000 -0700 -+++ b/Makeconfig 2012-08-14 20:16:10.197093639 -0700 -@@ -415,9 +415,9 @@ - LDFLAGS-rtld += $(hashstyle-LDFLAGS) - endif - --# Command for linking programs with the C library. -+# Commands for linking programs with the C library. - ifndef +link --+link = $(CC) -nostdlib -nostartfiles -o $@ \ -++link-before-libc = $(CC) -nostdlib -nostartfiles -o $@ \ - $(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \ - $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \ - $(addprefix $(csu-objpfx),$(start-installed-name)) \ -@@ -426,7 +426,10 @@ - $(start-installed-name))\ - $(+preinit) $(link-extra-libs) \ - $(common-objpfx)libc% $(+postinit),$^) \ -- $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit) -+ $(link-extra-libs) -++link-after-libc = $(+postctor) $(+postinit) -++link = $(+link-before-libc) $(link-libc) $(+link-after-libc) -++link-tests = $(+link-before-libc) $(link-libc-tests) $(+link-after-libc) - endif - # Command for linking PIE programs with the C library. - ifndef +link-pie -@@ -443,7 +446,7 @@ - endif - # Command for statically linking programs with the C library. - ifndef +link-static --+link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \ -++link-static-before-libc = $(CC) -nostdlib -nostartfiles -static -o $@ \ - $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \ - $(addprefix $(csu-objpfx),$(static-start-installed-name)) \ - $(+preinit) $(+prector) \ -@@ -451,7 +454,12 @@ - $(start-installed-name))\ - $(+preinit) $(link-extra-libs-static) \ - $(common-objpfx)libc% $(+postinit),$^) \ -- $(link-extra-libs-static) $(link-libc-static) $(+postctor) $(+postinit) -+ $(link-extra-libs-static) $(link-libc-static) -++link-static-after-libc = $(+postctor) $(+postinit) -++link-static = $(+link-static-before-libc) $(link-libc-static) \ -+ $(+link-static-after-libc) -++link-static-tests = $(+link-static-before-libc) $(link-libc-static-tests) \ -+ $(+link-static-after-libc) - endif - # Command for statically linking bounded-pointer programs with the C library. - ifndef +link-bounded -@@ -475,10 +483,12 @@ - # We need the versioned name of libc.so in the deps of $(others) et al - # so that the symlink to libc.so is created before anything tries to - # run the linked programs. --link-libc = -Wl,-rpath-link=$(rpath-link) \ -+link-libc-before-gnulib = -Wl,-rpath-link=$(rpath-link) \ - $(common-objpfx)libc.so$(libc.so-version) \ - $(common-objpfx)$(patsubst %,$(libtype.oS),c) \ -- $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed) $(gnulib) -+ $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed) -+link-libc = $(link-libc-before-gnulib) $(gnulib) -+link-libc-tests = $(link-libc-before-gnulib) $(gnulib-tests) - # This is how to find at build-time things that will be installed there. - rpath-dirs = math elf dlfcn nss nis rt resolv crypt - rpath-link = \ -@@ -488,6 +498,7 @@ - nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss) - resolvobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)resolv) - link-libc = $(common-objpfx)libc.a $(otherlibs) $(gnulib) $(common-objpfx)libc.a $(gnulib) -+link-libc-tests = $(common-objpfx)libc.a $(otherlibs) $(gnulib-tests) $(common-objpfx)libc.a $(gnulib-tests) - endif - endif - -@@ -513,8 +524,43 @@ - - # The static libraries. - link-libc-static = -Wl,--start-group $(common-objpfx)libc.a $(static-gnulib) -Wl,--end-group -+link-libc-static-tests = -Wl,--start-group $(common-objpfx)libc.a $(static-gnulib-tests) -Wl,--end-group - link-libc-bounded = $(common-objpfx)libc_b.a $(gnulib) $(common-objpfx)libc_b.a - -+# How to link against libgcc. Some libgcc functions, such as those -+# for "long long" arithmetic or software floating point, can always be -+# built without use of C library headers and do not have any global -+# state so can safely be linked statically into any executable or -+# shared library requiring them; these functions are in libgcc.a. -+# Other functions, relating to exception handling, may require C -+# library headers to build and it may not be safe to have more than -+# one copy of them in a process; these functions are only in -+# libgcc_s.so and libgcc_eh.a. -+# -+# To avoid circular dependencies when bootstrapping, it is desirable -+# to avoid use of libgcc_s and libgcc_eh in building glibc. Where any -+# glibc functionality (in particular, thread cancellation) requires -+# exception handling, this is implemented through dlopen of libgcc_s -+# to avoid unnecessary dependencies on libgcc_s by programs not using -+# that functionality; executables built with glibc do not use -+# exception handling other than through thread cancellation. -+# -+# Undefined references to functions from libgcc_eh or libgcc_s may -+# arise for code built with -fexceptions. In the case of statically -+# linked programs installed by glibc, unwinding will never actually -+# occur at runtime and the use of elf/static-stubs.c to resolve these -+# references is safe. In the case of statically linked test programs -+# and test programs built with -fexceptions, unwinding may occur in -+# some cases and it is preferable to link with libgcc_eh or libgcc_s -+# so that the testing is as similar as possible to how programs will -+# be built with the installed glibc. -+# -+# Some architectures have architecture-specific systems for exception -+# handling that may involve undefined references to -+# architecture-specific functions. On those architectures, -+# gnulib-arch and static-gnulib-arch may be defined in sysdeps -+# makefiles to use additional libraries for linking executables and -+# shared libraries built by glibc. - ifndef gnulib - ifneq ($(have-cc-with-libunwind),yes) - libunwind = -@@ -522,8 +568,12 @@ - libunwind = -lunwind - endif - libgcc_eh := -Wl,--as-needed -lgcc_s $(libunwind) -Wl,--no-as-needed --gnulib := -lgcc $(libgcc_eh) --static-gnulib := -lgcc -lgcc_eh $(libunwind) -+gnulib-arch = -+gnulib = -lgcc $(gnulib-arch) -+gnulib-tests := -lgcc $(libgcc_eh) -+static-gnulib-arch = -+static-gnulib = -lgcc $(static-gnulib-arch) -+static-gnulib-tests := -lgcc -lgcc_eh $(libunwind) - libc.so-gnulib := -lgcc - endif - +preinit = $(addprefix $(csu-objpfx),crti.o) -Index: a/Rules -=================================================================== ---- a/Rules 2012-07-04 18:25:47.000000000 -0700 -+++ b/Rules 2012-08-14 20:16:10.197093639 -0700 -@@ -1,5 +1,4 @@ --# Copyright (C) 1991-2000,2002,2003,2004,2005,2006,2011 --# Free Software Foundation, Inc. -+# Copyright (C) 1991-2012 Free Software Foundation, Inc. - # This file is part of the GNU C Library. - - # The GNU C Library is free software; you can redistribute it and/or -@@ -103,29 +102,46 @@ - # eglibc: endif - - ifeq ($(build-programs),yes) --binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs) --binaries-static = $(others-static) $(tests-static) $(xtests-static) -+binaries-all-notests = $(others) $(sysdep-others) -+binaries-all-tests = $(tests) $(xtests) $(test-srcs) -+binaries-all = $(binaries-all-notests) $(binaries-all-tests) -+binaries-static-notests = $(others-static) -+binaries-static-tests = $(tests-static) $(xtests-static) -+binaries-static = $(binaries-static-notests) $(binaries-static-tests) - ifeq (yesyes,$(have-fpie)$(build-shared)) - binaries-pie = $(others-pie) $(tests-pie) $(xtests-pie) - else - binaries-pie = - endif - else --binaries-all = $(tests) $(xtests) $(test-srcs) -+binaries-all-notests = -+binaries-all-tests = $(tests) $(xtests) $(test-srcs) -+binaries-all = $(binaries-all-tests) -+binaries-static-notests = -+binaries-static-tests = - binaries-static = - binaries-pie = - endif - --binaries-shared = $(filter-out $(binaries-pie) $(binaries-static), \ -- $(binaries-all)) -+binaries-shared-tests = $(filter-out $(binaries-pie) $(binaries-static), \ -+ $(binaries-all-tests)) -+binaries-shared-notests = $(filter-out $(binaries-pie) $(binaries-static), \ -+ $(binaries-all-notests)) - --ifneq "$(strip $(binaries-shared))" "" --$(addprefix $(objpfx),$(binaries-shared)): %: %.o \ -+ifneq "$(strip $(binaries-shared-notests))" "" -+$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \ - $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ - $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) - $(+link) - endif - -+ifneq "$(strip $(binaries-shared-tests))" "" -+$(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \ -+ $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ -+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) -+ $(+link-tests) -+endif -+ - ifneq "$(strip $(binaries-pie))" "" - $(addprefix $(objpfx),$(binaries-pie)): %: %.o \ - $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ -@@ -133,13 +149,20 @@ - $(+link-pie) - endif - --ifneq "$(strip $(binaries-static))" "" --$(addprefix $(objpfx),$(binaries-static)): %: %.o \ -+ifneq "$(strip $(binaries-static-notests))" "" -+$(addprefix $(objpfx),$(binaries-static-notests)): %: %.o \ - $(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \ - $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) - $(+link-static) - endif - -+ifneq "$(strip $(binaries-static-tests))" "" -+$(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \ -+ $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \ -+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) -+ $(+link-static-tests) -+endif -+ - ifeq ($(build-bounded),yes) - binaries-bounded = $(addsuffix -bp,$(tests) $(xtests) $(test-srcs)) - $(addprefix $(objpfx),$(binaries-bounded)): %-bp: %.ob \ -Index: a/elf/Makefile -=================================================================== ---- a/elf/Makefile 2012-07-04 18:26:34.000000000 -0700 -+++ b/elf/Makefile 2012-08-14 20:16:10.197093639 -0700 -@@ -71,6 +71,8 @@ - install-bin = sprof pldd - others-static = sln - install-rootsbin = sln -+sln-modules := static-stubs -+extra-objs += $(sln-modules:=.o) - - ifeq (yes,$(use-ldconfig)) - ifeq (yes,$(build-shared)) -@@ -78,7 +80,7 @@ - others += ldconfig - install-rootsbin += ldconfig - --ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon -+ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon static-stubs - extra-objs += $(ldconfig-modules:=.o) - endif - endif -@@ -417,6 +419,8 @@ - - $(objpfx)sprof: $(libdl) - -+$(objpfx)sln: $(sln-modules:%=$(objpfx)%.o) -+ - $(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o) - - $(objpfx)pldd: $(pldd-modules:%=$(objpfx)%.o) -Index: a/elf/static-stubs.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ a/elf/static-stubs.c 2012-08-14 20:16:10.197093639 -0700 -@@ -0,0 +1,46 @@ -+/* Stub implementations of functions to link into statically linked -+ programs without needing libgcc_eh. -+ Copyright (C) 2012 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ <http://www.gnu.org/licenses/>. */ -+ -+/* Avoid backtrace (and so _Unwind_Backtrace) dependencies from -+ sysdeps/unix/sysv/linux/libc_fatal.c. */ -+#include <sysdeps/posix/libc_fatal.c> -+ -+#include <stdlib.h> -+#include <unwind.h> -+ -+/* These programs do not use thread cancellation, so _Unwind_Resume -+ and the personality routine are never actually called. */ -+ -+void -+_Unwind_Resume (struct _Unwind_Exception *exc __attribute__ ((unused))) -+{ -+ abort (); -+} -+ -+_Unwind_Reason_Code -+__gcc_personality_v0 (int version __attribute__ ((unused)), -+ _Unwind_Action actions __attribute__ ((unused)), -+ _Unwind_Exception_Class exception_class -+ __attribute__ ((unused)), -+ struct _Unwind_Exception *ue_header -+ __attribute__ ((unused)), -+ struct _Unwind_Context *context __attribute__ ((unused))) -+{ -+ abort (); -+} diff --git a/patches/eglibc/2_8/100-powerpc-private_futex.patch b/patches/eglibc/2_8/100-powerpc-private_futex.patch deleted file mode 100644 index 3016529..0000000 --- a/patches/eglibc/2_8/100-powerpc-private_futex.patch +++ /dev/null @@ -1,15 +0,0 @@ -2008-04-28 Hiroki Kaminaga <kaminaga@sm.sony.co.jp> - - [BZ 6740] - nptl/sysdeps/powerpc/tcb-offsets.sym (PRIVATE_FUTEX_OFFSET): - Guard sym definition with #ifndef __ASSUME_PRIVATE_FUTEX. - ---- a/nptl/sysdeps/powerpc/tcb-offsets.sym -+++ b/nptl/sysdeps/powerpc/tcb-offsets.sym -@@ -15,4 +15,6 @@ - PID thread_offsetof (pid) - TID thread_offsetof (tid) - POINTER_GUARD (offsetof (tcbhead_t, pointer_guard) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) -+#ifndef __ASSUME_PRIVATE_FUTEX - PRIVATE_FUTEX_OFFSET thread_offsetof (header.private_futex) -+#endif diff --git a/patches/eglibc/2_9/100-powerpc-8xx-CPU15-errata.patch b/patches/eglibc/2_9/100-powerpc-8xx-CPU15-errata.patch deleted file mode 100644 index 4fe1bb2..0000000 --- a/patches/eglibc/2_9/100-powerpc-8xx-CPU15-errata.patch +++ /dev/null @@ -1,49 +0,0 @@ -diff -ru eglibc-2_9_orig/sysdeps/powerpc/powerpc32/memset.S eglibc-2_9/sysdeps/powerpc/powerpc32/memset.S ---- eglibc-2_9_orig/sysdeps/powerpc/powerpc32/memset.S 2007-04-13 08:35:45.000000000 -0700 -+++ eglibc-2_9/sysdeps/powerpc/powerpc32/memset.S 2009-05-06 16:52:04.000000000 -0700 -@@ -112,11 +112,13 @@ - clrrwi. rALIGN, rLEN, 5 - mtcrf 0x01, rLEN /* 40th instruction from .align */ - -+#ifndef BROKEN_PPC_8xx_CPU15 - /* Check if we can use the special case for clearing memory using dcbz. - This requires that we know the correct cache line size for this - processor. Getting the __cache_line_size may require establishing GOT - addressability, so branch out of line to set this up. */ - beq cr1, L(checklinesize) -+#endif - - /* Store blocks of 32-bytes (256-bits) starting on a 32-byte boundary. - Can't assume that rCHR is zero or that the cache line size is either -@@ -158,6 +160,7 @@ - add rMEMP, rMEMP, rALIGN - b L(medium_tail2) /* 72nd instruction from .align */ - -+#ifndef BROKEN_PPC_8xx_CPU15 - .align 5 - nop - /* Clear cache lines of memory in 128-byte chunks. -@@ -191,6 +194,7 @@ - bdnz L(zloop) - beqlr cr5 - b L(medium_tail2) -+#endif /* ! BROKEN_PPC_8xx_CPU15 */ - - .align 5 - L(small): -@@ -248,6 +252,7 @@ - stw rCHR, -8(rMEMP) - blr - -+#ifndef BROKEN_PPC_8xx_CPU15 - L(checklinesize): - #ifdef SHARED - mflr rTMP -@@ -329,6 +334,7 @@ - L(handletail32): - clrrwi. rALIGN, rLEN, 5 - b L(nondcbz) -+#endif /* ! BROKEN_PPC_8xx_CPU15 */ - - END (BP_SYM (memset)) - libc_hidden_builtin_def (memset) diff --git a/patches/eglibc/ports-2_16/001-Avoid-use-of-libgcc_s-and-libgcc_eh-when-building-gl.patch b/patches/eglibc/ports-2_16/001-Avoid-use-of-libgcc_s-and-libgcc_eh-when-building-gl.patch deleted file mode 100644 index 0e58a76..0000000 --- a/patches/eglibc/ports-2_16/001-Avoid-use-of-libgcc_s-and-libgcc_eh-when-building-gl.patch +++ /dev/null @@ -1,40 +0,0 @@ -Upstream-Status: Backport -Signed-off-by: Khem Raj <raj.khem@gmail.com> - -From 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7 Mon Sep 17 00:00:00 2001 -From: Joseph Myers <joseph@codesourcery.com> -Date: Tue, 3 Jul 2012 19:14:59 +0000 -Subject: [PATCH] Avoid use of libgcc_s and libgcc_eh when building glibc. - ---- - ChangeLog | 47 ++++++++++++++++++++++++++++++ - Makeconfig | 68 ++++++++++++++++++++++++++++++++++++++------ - Rules | 45 ++++++++++++++++++++++------- - elf/Makefile | 6 +++- - elf/static-stubs.c | 46 ++++++++++++++++++++++++++++++ - ports/ChangeLog.arm | 7 +++++ - ports/sysdeps/arm/Makefile | 8 ++++++ - 7 files changed, 206 insertions(+), 21 deletions(-) - create mode 100644 elf/static-stubs.c - --Index: a/ports/sysdeps/arm/Makefile -=================================================================== ---- a/ports/sysdeps/arm/Makefile 2012-07-04 18:25:41.000000000 -0700 -+++ b/ports/sysdeps/arm/Makefile 2012-08-14 20:16:10.201093638 -0700 -@@ -1,8 +1,16 @@ -+gnulib-arch = $(elfobjdir)/libgcc-stubs.a -+static-gnulib-arch = $(elfobjdir)/libgcc-stubs.a -+ - ifeq ($(subdir),elf) - sysdep-dl-routines += tlsdesc dl-tlsdesc - sysdep_routines += aeabi_unwind_cpp_pr1 find_exidx tlsdesc dl-tlsdesc - sysdep-rtld-routines += aeabi_unwind_cpp_pr1 tlsdesc dl-tlsdesc - shared-only-routines += aeabi_unwind_cpp_pr1 -+ -+$(objpfx)libgcc-stubs.a: $(objpfx)aeabi_unwind_cpp_pr1.os -+ $(build-extra-lib) -+ -+lib-noranlib: $(objpfx)libgcc-stubs.a - endif - - ifeq ($(subdir),csu) diff --git a/patches/eglibc/ports-2_16/002-Add-ARM-specific-static-stubs.c.patch b/patches/eglibc/ports-2_16/002-Add-ARM-specific-static-stubs.c.patch deleted file mode 100644 index 3a30621..0000000 --- a/patches/eglibc/ports-2_16/002-Add-ARM-specific-static-stubs.c.patch +++ /dev/null @@ -1,27 +0,0 @@ -Upstream-Status: Backport - -Signed-off-by: Khem Raj <raj.khem@gmail.com> - -From c57a67e03368687fc0d2ae8354cd1b347a61ea44 Mon Sep 17 00:00:00 2001 -From: Joseph Myers <joseph@codesourcery.com> -Date: Thu, 5 Jul 2012 22:16:03 +0000 -Subject: [PATCH] Add ARM-specific static-stubs.c. - ---- - ports/ChangeLog.arm | 4 ++++ - ports/sysdeps/arm/static-stubs.c | 7 +++++++ - 2 files changed, 11 insertions(+) - create mode 100644 ports/sysdeps/arm/static-stubs.c - -Index: a/ports/sysdeps/arm/static-stubs.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ b/ports/sysdeps/arm/static-stubs.c 2012-08-15 15:04:59.687669241 -0700 -@@ -0,0 +1,7 @@ -+/* When building with GCC with static-only libgcc, the dummy -+ _Unwind_Resume from static-stubs.c needs to be used together with -+ the dummy __aeabi_unwind_cpp_pr* from aeabi_unwind_cpp_pr1.c -+ instead of the copies from libgcc. */ -+ -+#include <elf/static-stubs.c> -+#include <aeabi_unwind_cpp_pr1.c> diff --git a/patches/eglibc/ports-2_16/003-mips-rld-map-check.patch b/patches/eglibc/ports-2_16/003-mips-rld-map-check.patch deleted file mode 100644 index 19cb838..0000000 --- a/patches/eglibc/ports-2_16/003-mips-rld-map-check.patch +++ /dev/null @@ -1,26 +0,0 @@ - -On mips target, binutils currently sets DT_MIPS_RLD_MAP to 0 in dynamic -section if a --version-script sets _RLD_MAP to local. This is apparently -a binutils bug, but libc shouldn't segfault in this case. - -see also: http://sourceware.org/bugilla/show_bug.cgi?id=11615 - -Upstream-Status: Pending - -9/19/2010 - added by Qing He <qing.he@intel.com> - - ---- -diff -ru glibc-2.10.1.orig/ports/sysdeps/mips/dl-machine.h glibc-2.10.1/sysdeps/mips/dl-machine.h ---- glibc-2.10.1.orig/ports/sysdeps/mips/dl-machine.h 2009-05-16 16:36:20.000000000 +0800 -+++ glibc-2.10.1/ports/sysdeps/mips/dl-machine.h 2010-09-19 09:11:53.000000000 +0800 -@@ -70,7 +70,8 @@ - /* If there is a DT_MIPS_RLD_MAP entry in the dynamic section, fill it in - with the run-time address of the r_debug structure */ - #define ELF_MACHINE_DEBUG_SETUP(l,r) \ --do { if ((l)->l_info[DT_MIPS (RLD_MAP)]) \ -+do { if ((l)->l_info[DT_MIPS (RLD_MAP)] && \ -+ (l)->l_info[DT_MIPS (RLD_MAP)]->d_un.d_ptr) \ - *(ElfW(Addr) *)((l)->l_info[DT_MIPS (RLD_MAP)]->d_un.d_ptr) = \ - (ElfW(Addr)) (r); \ - } while (0) diff --git a/patches/ltrace/0.7.3/110-ltrace.git-8c3674c86688a79a8689772c3d0c84d6e7aaa118.patch b/patches/ltrace/0.7.3/110-ltrace.git-8c3674c86688a79a8689772c3d0c84d6e7aaa118.patch new file mode 100644 index 0000000..4c62f85 --- /dev/null +++ b/patches/ltrace/0.7.3/110-ltrace.git-8c3674c86688a79a8689772c3d0c84d6e7aaa118.patch @@ -0,0 +1,25 @@ +From 8c3674c86688a79a8689772c3d0c84d6e7aaa118 Mon Sep 17 00:00:00 2001 +From: Petr Machata <pmachata@redhat.com> +Date: Tue, 8 Jan 2013 23:22:49 +0100 +Subject: Fix conditions in elf_read_u{16,32,64} + +- The calling convention of need_data is 0 on success, <0 on failure. + The condition seems to have it all mixed, using both a ! and a + comparison. + +diff --git a/ltrace-elf.c b/ltrace-elf.c +index 29c204f..0ecdc38 100644 +--- a/ltrace-elf.c ++++ b/ltrace-elf.c +@@ -219,7 +219,7 @@ need_data(Elf_Data *data, GElf_Xword offset, GElf_Xword size) + int \ + NAME(Elf_Data *data, GElf_Xword offset, uint##SIZE##_t *retp) \ + { \ +- if (!need_data(data, offset, SIZE / 8) < 0) \ ++ if (need_data(data, offset, SIZE / 8) < 0) \ + return -1; \ + \ + if (data->d_buf == NULL) /* NODATA section */ { \ +-- +cgit v0.10.2 + diff --git a/patches/ncurses/5.9/100-ncurses-5.9-gcc5-buildfixes-1.patch b/patches/ncurses/5.9/100-ncurses-5.9-gcc5-buildfixes-1.patch new file mode 100644 index 0000000..be64931 --- /dev/null +++ b/patches/ncurses/5.9/100-ncurses-5.9-gcc5-buildfixes-1.patch @@ -0,0 +1,39 @@ +Submitted By: Douglas R. Reno <renodr2002@gmail.com> +Date: 2015-04-15 +Initial Package Version: 5.9 +Upstream Status: Unknown +Origin: ftp://invisible-island.net/ncurses/5.9/ncurses-5.9-20141206.patch.gz +Description: Fixes a compilation issue with GCC 5.1. Note that this patch was trimmed from the above patch. + +Index: ncurses-5.9/ncurses/base/MKlib_gen.sh +=========================================================================================== + +--- ncurses-5.9-20141129+/ncurses/base/MKlib_gen.sh 2011-06-04 19:14:08.000000000 +0000 ++++ ncurses-5.9-20141206/ncurses/base/MKlib_gen.sh 2014-12-06 18:56:25.000000000 +0000 +@@ -474,11 +474,22 @@ + -e 's/gen_$//' \ + -e 's/ / /g' >>$TMP + ++cat >$ED1 <<EOF ++s/ / /g ++s/^ // ++s/ $// ++s/P_NCURSES_BOOL/NCURSES_BOOL/g ++EOF ++ ++# A patch discussed here: ++# https://gcc.gnu.org/ml/gcc-patches/2014-06/msg02185.html ++# introduces spurious #line markers. Work around that by ignoring the system's ++# attempt to define "bool" and using our own symbol here. ++sed -e 's/bool/P_NCURSES_BOOL/g' $TMP > $ED2 ++cat $ED2 >$TMP ++ + $preprocessor $TMP 2>/dev/null \ +-| sed \ +- -e 's/ / /g' \ +- -e 's/^ //' \ +- -e 's/_Bool/NCURSES_BOOL/g' \ ++| sed -f $ED1 \ + | $AWK -f $AW2 \ + | sed -f $ED3 \ + | sed \ diff --git a/samples/nios2-elf-mingw32/crosstool.config b/samples/nios2-elf-mingw32/crosstool.config index 107cf58..2eabf0d 100644 --- a/samples/nios2-elf-mingw32/crosstool.config +++ b/samples/nios2-elf-mingw32/crosstool.config @@ -263,7 +263,6 @@ CT_LIBC="newlib" CT_LIBC_VERSION="2.2.0" CT_LIBC_newlib=y # CT_LIBC_none is not set -CT_LIBC_eglibc_AVAILABLE=y CT_THREADS="none" CT_LIBC_glibc_AVAILABLE=y CT_LIBC_mingw_AVAILABLE=y diff --git a/samples/powerpc-e500v2-linux-gnuspe/reported.by b/samples/powerpc-e500v2-linux-gnuspe/reported.by index 9022019..1a507dc 100644 --- a/samples/powerpc-e500v2-linux-gnuspe/reported.by +++ b/samples/powerpc-e500v2-linux-gnuspe/reported.by @@ -1,7 +1,7 @@ reporter_name="Anthony Foiani <anthony.foiani@gmail.com>" reporter_url="http://sourceware.org/ml/crossgcc/2010-09/msg00100.html" reporter_comment="This is a sample config file for Freescale e500v2 processors (e.g., MPC8548, -MPC8572). It uses eglibc (for e500/SPE patches) and a recent gcc (4.6.0, +MPC8572). It uses glibc (for e500/SPE support) and a recent gcc (4.6.0, for e500v2 DPFP support) and will generate appropriate dual-precision floating point instructions by default. diff --git a/scripts/addToolVersion.sh b/scripts/addToolVersion.sh index 34f42eb..1ae47e8 100755 --- a/scripts/addToolVersion.sh +++ b/scripts/addToolVersion.sh @@ -16,7 +16,7 @@ doHelp() { cat <<-EOF Usage: ${myname} <--tool> <[options] version [...]> ... 'tool' in one of: - gcc, binutils, glibc, eglibc, uClibc, newlib, linux, gdb, dmalloc, + gcc, binutils, glibc, uClibc, newlib, linux, gdb, dmalloc, duma, strace, ltrace, libelf, gmp, mpfr, ppl, cloog, mpc Valid options for all tools: @@ -80,9 +80,9 @@ addToolVersion() { # to try adding a new version if the one he/she wants is not listed. # But it can be the case where the version is hidden behind either one # of EXPERIMENTAL or OBSOLETE, so warn if the version is already listed. - if grep -E "^config ${config_ver_option}$" "${file}" >/dev/null 2>&1; then + if ${grep} -E "^config ${config_ver_option}$" "${file}" >/dev/null 2>&1; then echo "'${tool}': version '${version}' already present:" - grep -A1 -B0 -n \ + ${grep} -A1 -B0 -n \ -E "^(config ${config_ver_option}| {4}prompt \"${version}\")$" \ "${file}" /dev/null return 0 @@ -131,14 +131,6 @@ addToolVersion() { SedExpr1="${SedExpr1}\n select BINUTILS_2_18_or_later" fi ;; - eglibc) - # Extract 'M'ajor and 'm'inor from version string - ver_M=$(getVersionField "${version}" _ 1) - ver_m=$(getVersionField "${version}" _ 2) - if [ \( ${ver_M} -eq 2 -a ${ver_m} -ge 16 \) ]; then - SedExpr1="${SedExpr1}\n select LIBC_EGLIBC_2_16_or_later" - fi - ;; uClibc) # uClibc-0.9.30 and above need some love ver_M=$(getVersionField "${version}" . 1) @@ -183,10 +175,9 @@ fi while [ $# -gt 0 ]; do case "$1" in # Tools: - --gcc) EXP=; OBS=; cat=CC; tool=gcc; tool_prefix=cc; dot2suffix=;; + --gcc) EXP=; OBS=; cat=CC_GCC; tool=gcc; tool_prefix=cc; dot2suffix=;; --binutils) EXP=; OBS=; cat=BINUTILS; tool=binutils; tool_prefix=binutils; dot2suffix=;; --glibc) EXP=; OBS=; cat=LIBC_GLIBC; tool=glibc; tool_prefix=libc; dot2suffix=;; - --eglibc) EXP=; OBS=; cat=LIBC_EGLIBC; tool=eglibc; tool_prefix=libc; dot2suffix=;; --uClibc) EXP=; OBS=; cat=LIBC_UCLIBC; tool=uClibc; tool_prefix=libc; dot2suffix=;; --newlib) EXP=; OBS=; cat=LIBC_NEWLIB; tool=newlib; tool_prefix=libc; dot2suffix=;; --linux) EXP=; OBS=; cat=KERNEL; tool=linux; tool_prefix=kernel; dot2suffix=;; diff --git a/scripts/build/cc.sh b/scripts/build/cc.sh new file mode 100644 index 0000000..3c8aaef --- /dev/null +++ b/scripts/build/cc.sh @@ -0,0 +1,58 @@ +# Wrapper to build the companion tools facilities + +# List all companion tools facilities, and parse their scripts +CT_CC_FACILITY_LIST= +for f in "${CT_LIB_DIR}/scripts/build/cc/"*.sh; do + _f="$(basename "${f}" .sh)" + _f="${_f#???-}" + __f="CT_CC_${_f}" + if [ "${!__f}" = "y" ]; then + CT_DoLog DEBUG "Enabling cc '${_f}'" + . "${f}" + CT_CC_FACILITY_LIST="${CT_CC_FACILITY_LIST} ${_f}" + else + CT_DoLog DEBUG "Disabling cc '${_f}'" + fi +done + +# Download the cc facilities +do_cc_get() { + for f in ${CT_CC_FACILITY_LIST}; do + do_${f}_get + done +} + +# Extract and patch the cc facilities +do_cc_extract() { + for f in ${CT_CC_FACILITY_LIST}; do + do_${f}_extract + done +} + +# Core pass 1 the cc facilities +do_cc_core_pass_1() { + for f in ${CT_CC_FACILITY_LIST}; do + do_${f}_core_pass_1 + done +} + +# Core pass 2 the cc facilities +do_cc_core_pass_2() { + for f in ${CT_CC_FACILITY_LIST}; do + do_${f}_core_pass_2 + done +} + +# Build for build the cc facilities +do_cc_for_build() { + for f in ${CT_CC_FACILITY_LIST}; do + do_${f}_for_build + done +} + +# Build for host the cc facilities +do_cc_for_host() { + for f in ${CT_CC_FACILITY_LIST}; do + do_${f}_for_host + done +} diff --git a/scripts/build/cc/gcc.sh b/scripts/build/cc/100-gcc.sh index 500c9e7..f6ea34e 100644 --- a/scripts/build/cc/gcc.sh +++ b/scripts/build/cc/100-gcc.sh @@ -3,15 +3,15 @@ # Licensed under the GPL v2. See COPYING in the root of this package # Download gcc -do_cc_get() { +do_gcc_get() { local linaro_version="" local linaro_series="" - if [ "${CT_CC_CUSTOM}" = "y" ]; then - CT_GetCustom "gcc" "${CT_CC_VERSION}" "${CT_CC_CUSTOM_LOCATION}" + if [ "${CT_CC_GCC_CUSTOM}" = "y" ]; then + CT_GetCustom "gcc" "${CT_CC_GCC_VERSION}" "${CT_CC_GCC_CUSTOM_LOCATION}" else # Account for the Linaro versioning - linaro_version="$( echo "${CT_CC_VERSION}" \ + linaro_version="$( echo "${CT_CC_GCC_VERSION}" \ |${sed} -r -e 's/^linaro-//;' \ )" linaro_series="$( echo "${linaro_version}" \ @@ -21,13 +21,13 @@ do_cc_get() { # The official gcc hosts put gcc under a gcc/release/ directory, # whereas the mirrors put it in the gcc/ directory. # Also, Split out linaro mirrors, so that downloads happen faster. - if [ x"${linaro_version}" = x"${CT_CC_VERSION}" ]; then - CT_GetFile "gcc-${CT_CC_VERSION}" \ - {http,ftp,https}://ftp.gnu.org/gnu/gcc/gcc-${CT_CC_VERSION} \ - ftp://{gcc.gnu.org,sourceware.org}/pub/gcc/releases/gcc-${CT_CC_VERSION} + if [ x"${linaro_version}" = x"${CT_CC_GCC_VERSION}" ]; then + CT_GetFile "gcc-${CT_CC_GCC_VERSION}" \ + {http,ftp,https}://ftp.gnu.org/gnu/gcc/gcc-${CT_CC_GCC_VERSION} \ + ftp://{gcc.gnu.org,sourceware.org}/pub/gcc/releases/gcc-${CT_CC_GCC_VERSION} else - YYMM=`echo ${CT_CC_VERSION} |cut -d- -f3 |${sed} -e 's,^..,,'` - CT_GetFile "gcc-${CT_CC_VERSION}" \ + YYMM=`echo ${CT_CC_GCC_VERSION} |cut -d- -f3 |${sed} -e 's,^..,,'` + CT_GetFile "gcc-${CT_CC_GCC_VERSION}" \ "http://launchpad.net/gcc-linaro/${linaro_series}/${linaro_version}/+download" \ https://releases.linaro.org/${YYMM}/components/toolchain/gcc-linaro/${linaro_series} \ http://cbuild.validation.linaro.org/snapshots @@ -47,21 +47,21 @@ do_cc_get() { } # Extract gcc -do_cc_extract() { +do_gcc_extract() { # If using custom directory location, nothing to do - if [ "${CT_CC_CUSTOM}" = "y" \ - -a -d "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}" ]; then + if [ "${CT_CC_GCC_CUSTOM}" = "y" \ + -a -d "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}" ]; then return 0 fi - CT_Extract "gcc-${CT_CC_VERSION}" - CT_Patch "gcc" "${CT_CC_VERSION}" + CT_Extract "gcc-${CT_CC_GCC_VERSION}" + CT_Patch "gcc" "${CT_CC_GCC_VERSION}" # Copy ecj-latest.jar to ecj.jar at the top of the GCC source tree if [ "${CT_CC_LANG_JAVA_USE_ECJ}" = "y" \ - -a ! -f "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/ecj.jar" \ + -a ! -f "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/ecj.jar" \ ]; then - CT_DoExecLog ALL cp -v "${CT_TARBALLS_DIR}/ecj-latest.jar" "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/ecj.jar" + CT_DoExecLog ALL cp -v "${CT_TARBALLS_DIR}/ecj-latest.jar" "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/ecj.jar" fi } @@ -86,7 +86,7 @@ cc_gcc_lang_list() { #------------------------------------------------------------------------------ # Core gcc pass 1 -do_cc_core_pass_1() { +do_gcc_core_pass_1() { local -a core_opts if [ "${CT_CC_CORE_PASS_1_NEEDED}" != "y" ]; then @@ -101,17 +101,17 @@ do_cc_core_pass_1() { core_opts+=( "ldflags=${CT_LDFLAGS_FOR_HOST}" ) core_opts+=( "lang_list=c" ) - CT_DoStep INFO "Installing pass-1 core C compiler" - CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-core-pass-1" + CT_DoStep INFO "Installing pass-1 core C gcc compiler" + CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-gcc-core-pass-1" - do_cc_core_backend "${core_opts[@]}" + do_gcc_core_backend "${core_opts[@]}" CT_Popd CT_EndStep } # Core gcc pass 2 -do_cc_core_pass_2() { +do_gcc_core_pass_2() { local -a core_opts if [ "${CT_CC_CORE_PASS_2_NEEDED}" != "y" ]; then @@ -148,10 +148,10 @@ do_cc_core_pass_2() { ;; esac - CT_DoStep INFO "Installing pass-2 core C compiler" - CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-core-pass-2" + CT_DoStep INFO "Installing pass-2 core C gcc compiler" + CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-gcc-core-pass-2" - do_cc_core_backend "${core_opts[@]}" + do_gcc_core_backend "${core_opts[@]}" CT_Popd CT_EndStep @@ -160,7 +160,7 @@ do_cc_core_pass_2() { #------------------------------------------------------------------------------ # Build core gcc # This function is used to build the core C compiler. -# Usage: do_cc_core_backend param=value [...] +# Usage: do_gcc_core_backend param=value [...] # Parameter : Definition : Type : Default # mode : build a 'static', 'shared' or 'baremetal' : string : (none) # host : the machine the core will run on : tuple : (none) @@ -174,8 +174,8 @@ do_cc_core_pass_2() { # build_manuals : whether to build manuals or not : bool : no # cflags : cflags to use : string : (empty) # ldflags : ldflags to use : string : (empty) -# Usage: do_cc_core_backend mode=[static|shared|baremetal] build_libgcc=[yes|no] build_staticlinked=[yes|no] -do_cc_core_backend() { +# Usage: do_gcc_core_backend mode=[static|shared|baremetal] build_libgcc=[yes|no] build_staticlinked=[yes|no] +do_gcc_core_backend() { local mode local build_libgcc=no local build_libstdcxx=no @@ -200,7 +200,7 @@ do_cc_core_backend() { eval "${arg// /\\ }" done - CT_DoLog EXTRA "Configuring gcc" + CT_DoLog EXTRA "Configuring core C gcc compiler" case "${mode}" in static) @@ -249,7 +249,7 @@ do_cc_core_backend() { # *** WARNING ! *** # Keep this full if-else-if-elif-fi-fi block in sync - # with the same block in do_cc, below. + # with the same block in do_gcc, below. if [ "${build_staticlinked}" = "yes" ]; then core_LDFLAGS+=("-static") host_libstdcxx_flags+=("-static-libgcc") @@ -262,7 +262,7 @@ do_cc_core_backend() { core_LDFLAGS+=("-lstdc++") core_LDFLAGS+=("-lm") else - if [ "${CT_CC_STATIC_LIBSTDCXX}" = "y" ]; then + if [ "${CT_CC_GCC_STATIC_LIBSTDCXX}" = "y" ]; then # this is from CodeSourcery arm-2010q1-202-arm-none-linux-gnueabi.src.tar.bz2 # build script # INFO: if the host gcc is gcc-4.5 then presumably we could use -static-libstdc++, @@ -379,21 +379,21 @@ do_cc_core_backend() { CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'" # Use --with-local-prefix so older gccs don't look in /usr/local (http://gcc.gnu.org/PR10532) - CT_DoExecLog CFG \ - CC_FOR_BUILD="${CT_BUILD}-gcc" \ - CFLAGS="${cflags}" \ - CXXFLAGS="${cflags}" \ - LDFLAGS="${core_LDFLAGS[*]}" \ - "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/configure" \ - --build=${CT_BUILD} \ - --host=${host} \ - --target=${CT_TARGET} \ - --prefix="${prefix}" \ - --with-local-prefix="${CT_SYSROOT_DIR}" \ - --disable-libmudflap \ - ${CC_CORE_SYSROOT_ARG} \ - "${extra_config[@]}" \ - --enable-languages="${lang_list}" \ + CT_DoExecLog CFG \ + CC_FOR_BUILD="${CT_BUILD}-gcc" \ + CFLAGS="${cflags}" \ + CXXFLAGS="${cflags}" \ + LDFLAGS="${core_LDFLAGS[*]}" \ + "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/configure" \ + --build=${CT_BUILD} \ + --host=${host} \ + --target=${CT_TARGET} \ + --prefix="${prefix}" \ + --with-local-prefix="${CT_SYSROOT_DIR}" \ + --disable-libmudflap \ + ${CC_CORE_SYSROOT_ARG} \ + "${extra_config[@]}" \ + --enable-languages="${lang_list}" \ "${extra_user_config[@]}" if [ "${build_libgcc}" = "yes" ]; then @@ -413,7 +413,7 @@ do_cc_core_backend() { # so we configure then build it. # Next we have to configure gcc, create libgcc.mk then edit it... # So much easier if we just edit the source tree, but hey... - if [ ! -f "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/BASE-VER" ]; then + if [ ! -f "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/gcc/BASE-VER" ]; then CT_DoExecLog CFG make ${JOBSFLAGS} configure-libiberty CT_DoExecLog ALL make ${JOBSFLAGS} -C libiberty libiberty.a CT_DoExecLog CFG make ${JOBSFLAGS} configure-gcc configure-libcpp @@ -423,12 +423,12 @@ do_cc_core_backend() { CT_DoExecLog ALL make ${JOBSFLAGS} all-libcpp all-build-libiberty fi # HACK: gcc-4.2 uses libdecnumber to build libgcc.mk, so build it here. - if [ -d "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/libdecnumber" ]; then + if [ -d "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/libdecnumber" ]; then CT_DoExecLog CFG make ${JOBSFLAGS} configure-libdecnumber CT_DoExecLog ALL make ${JOBSFLAGS} -C libdecnumber libdecnumber.a fi # HACK: gcc-4.8 uses libbacktrace to make libgcc.mvars, so make it here. - if [ -d "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/libbacktrace" ]; then + if [ -d "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/libbacktrace" ]; then CT_DoExecLog CFG make ${JOBSFLAGS} configure-libbacktrace CT_DoExecLog ALL make ${JOBSFLAGS} -C libbacktrace fi @@ -492,7 +492,9 @@ do_cc_core_backend() { # check whether compiler has an extension file="$( ls -1 "${prefix}/bin/${CT_TARGET}-gcc."* 2>/dev/null || true )" [ -z "${file}" ] || ext=".${file##*.}" - CT_DoExecLog ALL ln -sfv "${CT_TARGET}-gcc${ext}" "${prefix}/bin/${CT_TARGET}-cc${ext}" + if [ -f "${prefix}/bin/${CT_TARGET}-gcc${ext}" ]; then + CT_DoExecLog ALL ln -sfv "${CT_TARGET}-gcc${ext}" "${prefix}/bin/${CT_TARGET}-cc${ext}" + fi if [ "${CT_MULTILIB}" = "y" ]; then if [ "${CT_CANADIAN}" = "y" -a "${mode}" = "baremetal" \ @@ -517,7 +519,7 @@ do_cc_core_backend() { #------------------------------------------------------------------------------ # Build complete gcc to run on build -do_cc_for_build() { +do_gcc_for_build() { local -a build_final_opts local build_final_backend @@ -542,13 +544,13 @@ do_cc_for_build() { if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then build_final_opts+=( "build_staticlinked=yes" ) fi - build_final_backend=do_cc_core_backend + build_final_backend=do_gcc_core_backend else - build_final_backend=do_cc_backend + build_final_backend=do_gcc_backend fi - CT_DoStep INFO "Installing final compiler for build" - CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-final-build-${CT_BUILD}" + CT_DoStep INFO "Installing final gcc compiler for build" + CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-gcc-final-build-${CT_BUILD}" "${build_final_backend}" "${build_final_opts[@]}" @@ -558,7 +560,7 @@ do_cc_for_build() { #------------------------------------------------------------------------------ # Build final gcc to run on host -do_cc_for_host() { +do_gcc_for_host() { local -a final_opts local final_backend @@ -579,13 +581,13 @@ do_cc_for_host() { if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then final_opts+=( "build_staticlinked=yes" ) fi - final_backend=do_cc_core_backend + final_backend=do_gcc_core_backend else - final_backend=do_cc_backend + final_backend=do_gcc_backend fi - CT_DoStep INFO "Installing final compiler" - CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-final" + CT_DoStep INFO "Installing final gcc compiler" + CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-gcc-final" "${final_backend}" "${final_opts[@]}" @@ -595,7 +597,7 @@ do_cc_for_host() { #------------------------------------------------------------------------------ # Build the final gcc -# Usage: do_cc_backend param=value [...] +# Usage: do_gcc_backend param=value [...] # Parameter : Definition : Type : Default # host : the host we run onto : tuple : (none) # prefix : the runtime prefix : dir : (none) @@ -604,7 +606,7 @@ do_cc_for_host() { # ldflags : ldflags to use : string : (empty) # lang_list : the list of languages to build : string : (empty) # build_manuals : whether to build manuals or not : bool : no -do_cc_backend() { +do_gcc_backend() { local host local prefix local complibs @@ -622,7 +624,7 @@ do_cc_backend() { eval "${arg// /\\ }" done - CT_DoLog EXTRA "Configuring gcc" + CT_DoLog EXTRA "Configuring final gcc compiler" # Enable selected languages extra_config+=("--enable-languages=${lang_list}") @@ -649,8 +651,8 @@ do_cc_backend() { else extra_config+=("--disable-__cxa_atexit") fi - if [ -n "${CT_CC_ENABLE_CXX_FLAGS}" ]; then - extra_config+=("--enable-cxx-flags=${CT_CC_ENABLE_CXX_FLAGS}") + if [ -n "${CT_CC_GCC_ENABLE_CXX_FLAGS}" ]; then + extra_config+=("--enable-cxx-flags=${CT_CC_GCC_ENABLE_CXX_FLAGS}") fi if [ "${CT_CC_GCC_4_8_or_later}" = "y" ]; then if [ "${CT_THREADS}" = "none" ]; then @@ -693,7 +695,7 @@ do_cc_backend() { # *** WARNING ! *** # Keep this full if-else-if-elif-fi-fi block in sync - # with the same block in do_cc_core, above. + # with the same block in do_gcc_core, above. if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then final_LDFLAGS+=("-static") host_libstdcxx_flags+=("-static-libgcc") @@ -706,7 +708,7 @@ do_cc_backend() { final_LDFLAGS+=("-lstdc++") final_LDFLAGS+=("-lm") else - if [ "${CT_CC_STATIC_LIBSTDCXX}" = "y" ]; then + if [ "${CT_CC_GCC_STATIC_LIBSTDCXX}" = "y" ]; then # this is from CodeSourcery arm-2010q1-202-arm-none-linux-gnueabi.src.tar.bz2 # build script # INFO: if the host gcc is gcc-4.5 then presumably we could use -static-libstdc++, @@ -849,7 +851,7 @@ do_cc_backend() { CFLAGS_FOR_TARGET="${CT_TARGET_CFLAGS}" \ CXXFLAGS_FOR_TARGET="${CT_TARGET_CFLAGS}" \ LDFLAGS_FOR_TARGET="${CT_TARGET_LDFLAGS}" \ - "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/configure" \ + "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/configure" \ --build=${CT_BUILD} \ --host=${host} \ --target=${CT_TARGET} \ @@ -859,17 +861,17 @@ do_cc_backend() { --with-local-prefix="${CT_SYSROOT_DIR}" \ --enable-c99 \ --enable-long-long \ - "${CT_CC_EXTRA_CONFIG_ARRAY[@]}" + "${CT_CC_GCC_EXTRA_CONFIG_ARRAY[@]}" if [ "${CT_CANADIAN}" = "y" ]; then CT_DoLog EXTRA "Building libiberty" CT_DoExecLog ALL make ${JOBSFLAGS} all-build-libiberty fi - CT_DoLog EXTRA "Building gcc" + CT_DoLog EXTRA "Building final gcc compiler" CT_DoExecLog ALL make ${JOBSFLAGS} all - CT_DoLog EXTRA "Installing gcc" + CT_DoLog EXTRA "Installing final gcc compiler" CT_DoExecLog ALL make ${JOBSFLAGS} install if [ "${build_manuals}" = "yes" ]; then @@ -884,7 +886,9 @@ do_cc_backend() { # check whether compiler has an extension file="$( ls -1 "${CT_PREFIX_DIR}/bin/${CT_TARGET}-gcc."* 2>/dev/null || true )" [ -z "${file}" ] || ext=".${file##*.}" - CT_DoExecLog ALL ln -sfv "${CT_TARGET}-gcc${ext}" "${CT_PREFIX_DIR}/bin/${CT_TARGET}-cc${ext}" + if [ -f "${CT_PREFIX_DIR}/bin/${CT_TARGET}-gcc${ext}" ]; then + CT_DoExecLog ALL ln -sfv "${CT_TARGET}-gcc${ext}" "${CT_PREFIX_DIR}/bin/${CT_TARGET}-cc${ext}" + fi if [ "${CT_MULTILIB}" = "y" ]; then if [ "${CT_CANADIAN}" = "y" ]; then diff --git a/scripts/build/companion_libs/130-cloog.sh b/scripts/build/companion_libs/130-cloog.sh index 1a3b91a..fe5ba13 100644 --- a/scripts/build/companion_libs/130-cloog.sh +++ b/scripts/build/companion_libs/130-cloog.sh @@ -24,7 +24,8 @@ if [ "${CT_CLOOG}" = "y" ]; then # Download CLooG do_cloog_get() { CT_GetFile "$(cloog_basename_version)" \ - http://www.bastoul.net/cloog/pages/download + http://www.bastoul.net/cloog/pages/download \ + ftp://gcc.gnu.org/pub/gcc/infrastructure } # Extract CLooG diff --git a/scripts/build/companion_libs/140-mpc.sh b/scripts/build/companion_libs/140-mpc.sh index 03071d3..b15eea6 100644 --- a/scripts/build/companion_libs/140-mpc.sh +++ b/scripts/build/companion_libs/140-mpc.sh @@ -13,7 +13,8 @@ if [ "${CT_MPC}" = "y" ]; then # Download MPC do_mpc_get() { CT_GetFile "mpc-${CT_MPC_VERSION}" .tar.gz \ - {http,ftp,https}://ftp.gnu.org/gnu/mpc + {http,ftp,https}://ftp.gnu.org/gnu/mpc \ + http://www.multiprecision.org/mpc/download } # Extract MPC diff --git a/scripts/build/debug/300-gdb.sh b/scripts/build/debug/300-gdb.sh index 4eee214..93086b9 100644 --- a/scripts/build/debug/300-gdb.sh +++ b/scripts/build/debug/300-gdb.sh @@ -188,11 +188,11 @@ do_debug_gdb_build() { if [ "${CT_GDB_INSTALL_GDBINIT}" = "y" ]; then CT_DoLog EXTRA "Installing '.gdbinit' template" # See in scripts/build/internals.sh for why we do this - if [ -f "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/BASE-VER" ]; then - gcc_version=$( cat "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/BASE-VER" ) + if [ -f "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/gcc/BASE-VER" ]; then + gcc_version=$( cat "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/gcc/BASE-VER" ) else - gcc_version=$( sed -r -e '/version_string/!d; s/^.+= "([^"]+)".*$/\1/;' \ - "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/version.c" \ + gcc_version=$( sed -r -e '/version_string/!d; s/^.+= "([^"]+)".*$/\1/;' \ + "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/gcc/version.c" \ ) fi ${sed} -r \ diff --git a/scripts/build/internals.sh b/scripts/build/internals.sh index c7eb4c8..21f6472 100644 --- a/scripts/build/internals.sh +++ b/scripts/build/internals.sh @@ -28,33 +28,35 @@ do_finish() { CT_DoExecLog ALL "${CT_TARGET}-strip" ${strip_args} \ "${CT_TARGET}/debug-root/usr/bin/gdbserver" fi - # We can not use the version in CT_CC_VERSION because - # of the Linaro stuff. So, harvest the version string - # directly from the gcc sources... - # All gcc 4.x seem to have the version in gcc/BASE-VER - # while version prior to 4.x have the version in gcc/version.c - # Of course, here is not the better place to do that... - if [ -f "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/BASE-VER" ]; then - gcc_version=$( cat "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/BASE-VER" ) - else - gcc_version=$( sed -r -e '/version_string/!d; s/^.+= "([^"]+)".*$/\1/;' \ - "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/version.c" \ - ) + if [ "${CT_CC_gcc}" = "y" ]; then + # We can not use the version in CT_CC_GCC_VERSION because + # of the Linaro stuff. So, harvest the version string + # directly from the gcc sources... + # All gcc 4.x seem to have the version in gcc/BASE-VER + # while version prior to 4.x have the version in gcc/version.c + # Of course, here is not the better place to do that... + if [ -f "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/gcc/BASE-VER" ]; then + gcc_version=$( cat "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/gcc/BASE-VER" ) + else + gcc_version=$( sed -r -e '/version_string/!d; s/^.+= "([^"]+)".*$/\1/;' \ + "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/gcc/version.c" \ + ) + fi + for _t in "bin/${CT_TARGET}-"* \ + "${CT_TARGET}/bin/"* \ + "libexec/gcc/${CT_TARGET}/${gcc_version}/"* \ + "libexec/gcc/${CT_TARGET}/${gcc_version}/install-tools/"* \ + ; do + _type="$( file "${_t}" |cut -d ' ' -f 2- )" + case "${_type}" in + *script*executable*) + ;; + *executable*) + CT_DoExecLog ALL ${CT_HOST}-strip ${strip_args} "${_t}" + ;; + esac + done fi - for _t in "bin/${CT_TARGET}-"* \ - "${CT_TARGET}/bin/"* \ - "libexec/gcc/${CT_TARGET}/${gcc_version}/"* \ - "libexec/gcc/${CT_TARGET}/${gcc_version}/install-tools/"* \ - ; do - _type="$( file "${_t}" |cut -d ' ' -f 2- )" - case "${_type}" in - *script*executable*) - ;; - *executable*) - CT_DoExecLog ALL ${CT_HOST}-strip ${strip_args} "${_t}" - ;; - esac - done CT_Popd fi diff --git a/scripts/build/kernel/linux.sh b/scripts/build/kernel/linux.sh index 864562e..5f32680 100644 --- a/scripts/build/kernel/linux.sh +++ b/scripts/build/kernel/linux.sh @@ -33,21 +33,22 @@ do_kernel_get() { "${CT_KERNEL_LINUX_CUSTOM_LOCATION}" else # Not a custom tarball case "${CT_KERNEL_VERSION}" in - 2.6.*.*|3.*.*) + 2.6.*.*|3.*.*|4.*.*) # 4-part versions (for 2.6 stables and long-terms), and - # 3-part versions (for 3.x.y stables and long-terms), + # 3-part versions (for 3.x.y and 4.x.y stables and long-terms), # we need to trash the last digit k_ver="${CT_KERNEL_VERSION%.*}" ;; - 2.6.*|3.*) + 2.6.*|3.*|4.*) # 3-part version (for 2.6.x initial releases), and 2-part - # versions (for 3.x initial releases), use all of it + # versions (for 3.x and 4.x initial releases), use all of it k_ver="${CT_KERNEL_VERSION}" ;; esac case "${CT_KERNEL_VERSION}" in 2.6.*) rel_dir=v2.6;; 3.*) rel_dir=v3.x;; + 4.*) rel_dir=v4.x;; esac korg_base="http://www.kernel.org/pub/linux/kernel/${rel_dir}" CT_GetFile "linux-${CT_KERNEL_VERSION}" \ diff --git a/scripts/build/libc/eglibc.sh b/scripts/build/libc/eglibc.sh deleted file mode 100644 index 704ef7c..0000000 --- a/scripts/build/libc/eglibc.sh +++ /dev/null @@ -1,189 +0,0 @@ -# eglibc build functions (initially by Thomas JOURDAN). - -# Add the definitions common to glibc and eglibc -# do_libc_extract -# do_libc_start_files -# do_libc -# do_libc_add_ons_list -# do_libc_min_kernel_config -. "${CT_LIB_DIR}/scripts/build/libc/glibc-eglibc.sh-common" - -# Download glibc -# eglibc is only available through subversion, there are no -# snapshots available. -do_libc_get() { - local addon - local -a extra_addons - local svn_base - - if echo ${CT_LIBC_VERSION} |grep -q linaro; then - # Linaro eglibc releases come from regular downloads... - YYMM=`echo ${CT_LIBC_VERSION} |cut -d- -f3 |${sed} -e 's,^..,,'` - CT_GetFile "eglibc-${CT_LIBC_VERSION}" \ - https://releases.linaro.org/${YYMM}/components/toolchain/eglibc-linaro \ - http://cbuild.validation.linaro.org/snapshots - return - fi - - if [ "${CT_EGLIBC_HTTP}" = "y" ]; then - svn_base="http://www.eglibc.org/svn" - else - svn_base="svn://svn.eglibc.org" - fi - - case "${CT_LIBC_VERSION}" in - trunk) svn_base+="/trunk";; - *) svn_base+="/branches/eglibc-${CT_LIBC_VERSION}";; - esac - - if [ "${CT_LIBC_CUSTOM}" = "y" ]; then - CT_GetCustom "eglibc" "${CT_LIBC_VERSION}" "${CT_LIBC_EGLIBC_CUSTOM_LOCATION}" - CT_LIBC_CUSTOM_LOCATION="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}" - else - CT_GetSVN "eglibc-${CT_LIBC_VERSION}" \ - "${svn_base}/libc" \ - "${CT_EGLIBC_REVISION:-HEAD}" - fi - - if [ "${CT_LIBC_LOCALES}" = "y" ]; then - extra_addons+=("localedef") - fi - - for addon in $(do_libc_add_ons_list " ") "${extra_addons[@]}"; do - # Never ever try to download these add-ons, - # they've always been internal - case "${addon}" in - nptl) continue;; - esac - - case "${addon}:${CT_LIBC_GLIBC_PORTS_EXTERNAL}" in - ports:y) ;; - ports:*) continue;; - esac - - if ! CT_GetSVN "eglibc-${addon}-${CT_LIBC_VERSION}" \ - "${svn_base}/${addon}" \ - "${CT_EGLIBC_REVISION:-HEAD}" - then - # Some add-ons are bundled with the main sources - # so failure to download them is expected - CT_DoLog DEBUG "Addon '${addon}' could not be downloaded." - CT_DoLog DEBUG "We'll see later if we can find it in the source tree" - fi - done -} - -# Copy user provided eglibc configuration file if provided -do_libc_check_config() { - if [ "${CT_EGLIBC_CUSTOM_CONFIG}" != "y" ]; then - return 0 - fi - - CT_DoStep INFO "Checking C library configuration" - - CT_TestOrAbort "You did not provide an eglibc config file!" \ - -n "${CT_EGLIBC_OPTION_GROUPS_FILE}" -a \ - -f "${CT_EGLIBC_OPTION_GROUPS_FILE}" - - CT_DoExecLog ALL cp "${CT_EGLIBC_OPTION_GROUPS_FILE}" "${CT_CONFIG_DIR}/eglibc.config" - - # NSS configuration - if grep -E '^OPTION_EGLIBC_NSSWITCH[[:space:]]*=[[:space:]]*n' "${CT_EGLIBC_OPTION_GROUPS_FILE}" >/dev/null 2>&1; then - CT_DoLog DEBUG "Using fixed-configuration nsswitch facility" - - if [ "${CT_EGLIBC_BUNDLED_NSS_CONFIG}" = "y" ]; then - nss_config="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.conf" - else - nss_config="${CT_EGLIBC_NSS_CONFIG_FILE}" - fi - CT_TestOrAbort "NSS config file not found!" -n "${nss_config}" -a -f "${nss_config}" - - CT_DoExecLog ALL cp "${nss_config}" "${CT_CONFIG_DIR}/nsswitch.config" - echo "OPTION_EGLIBC_NSSWITCH_FIXED_CONFIG = ${CT_CONFIG_DIR}/nsswitch.config" \ - >> "${CT_CONFIG_DIR}/eglibc.config" - - if [ "${CT_EGLIBC_BUNDLED_NSS_FUNCTIONS}" = "y" ]; then - nss_functions="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.functions" - else - nss_functions="${CT_EGLIBC_NSS_FUNCTIONS_FILE}" - fi - CT_TestOrAbort "NSS functions file not found!" -n "${nss_functions}" -a -f "${nss_functions}" - - CT_DoExecLog ALL cp "${nss_functions}" "${CT_CONFIG_DIR}/nsswitch.functions" - echo "OPTION_EGLIBC_NSSWITCH_FIXED_FUNCTIONS = ${CT_CONFIG_DIR}/nsswitch.functions" \ - >> "${CT_CONFIG_DIR}/eglibc.config" - else - CT_DoLog DEBUG "Using full-blown nsswitch facility" - fi - - CT_EndStep -} - -# Extract the files required for the libc locales -do_libc_locales_extract() { - CT_Extract "eglibc-localedef-${CT_LIBC_VERSION}" - CT_Patch "eglibc" "localedef-${CT_LIBC_VERSION}" -} - -# Build and install the libc locales -do_libc_locales() { - local libc_src_dir="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}" - local src_dir="${CT_SRC_DIR}/eglibc-localedef-${CT_LIBC_VERSION}" - local -a extra_config - local -a localedef_opts - - mkdir -p "${CT_BUILD_DIR}/build-localedef" - cd "${CT_BUILD_DIR}/build-localedef" - - CT_DoLog EXTRA "Configuring C library localedef" - - if [ "${CT_LIBC_EGLIBC_HAS_PKGVERSION_BUGURL}" = "y" ]; then - extra_config+=("--with-pkgversion=${CT_PKGVERSION}") - [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}") - fi - - CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'" - - # ./configure is misled by our tools override wrapper for bash - # so just tell it where the real bash is _on_the_target_! - # Notes: - # - ${ac_cv_path_BASH_SHELL} is only used to set BASH_SHELL - # - ${BASH_SHELL} is only used to set BASH - # - ${BASH} is only used to set the shebang - # in two scripts to run on the target - # So we can safely bypass bash detection at compile time. - # Should this change in a future eglibc release, we'd better - # directly mangle the generated scripts _after_ they get built, - # or even after they get installed... - echo "ac_cv_path_BASH_SHELL=/bin/bash" >>config.cache - - # Configure with --prefix the way we want it on the target... - - CT_DoExecLog CFG \ - CPPFLAGS="-DNOT_IN_libc" \ - "${src_dir}/configure" \ - --prefix=/usr \ - --cache-file="$(pwd)/config.cache" \ - --with-glibc="${libc_src_dir}" \ - "${extra_config[@]}" - - CT_DoLog EXTRA "Building C library localedef" - CT_DoExecLog ALL make ${JOBSFLAGS} - - # Set the localedef endianness option - case "${CT_ARCH_ENDIAN}" in - big) localedef_opts+=(--big-endian);; - little) localedef_opts+=(--little-endian);; - esac - - # Set the localedef option for the target's uint32_t alignment in bytes. - # This is target-specific, but for now, 32-bit alignment should work for all - # supported targets, even 64-bit ones. - localedef_opts+=(--uint32-align=4) - - CT_DoLog EXTRA "Installing C library locales" - CT_DoExecLog ALL make ${JOBSFLAGS} \ - "LOCALEDEF_OPTS=${localedef_opts[*]}" \ - install_root="${CT_SYSROOT_DIR}" \ - install-locales -} diff --git a/scripts/build/libc/glibc-eglibc.sh-common b/scripts/build/libc/glibc-eglibc.sh-common deleted file mode 100644 index 28a36bd..0000000 --- a/scripts/build/libc/glibc-eglibc.sh-common +++ /dev/null @@ -1,540 +0,0 @@ -# This file contains the functions common to glibc and eglibc - -# Extract the C library tarball(s) -do_libc_extract() { - local addon - - # Attempt CT_EXTRACT only if NOT custom, or CUSTOM_LOCATION is not a directory - if [ "${CT_LIBC_CUSTOM}" != "y" \ - -o ! -d "${CT_LIBC_CUSTOM_LOCATION}" ]; then - CT_Extract "${CT_LIBC}-${CT_LIBC_VERSION}" - fi - CT_Pushd "${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}" - # Attempt CT_PATCH only if NOT custom - if [ "${CT_LIBC_CUSTOM}" != "y" ]; then - CT_Patch nochdir "${CT_LIBC}" "${CT_LIBC_VERSION}" - fi - - # Extract the add-opns - for addon in $(do_libc_add_ons_list " "); do - # If the addon was bundled with the main archive, we do not - # need to extract it. Worse, if we were to try to extract - # it, we'd get an error. - if [ -d "${addon}" ]; then - CT_DoLog DEBUG "Add-on '${addon}' already present, skipping extraction" - continue - fi - - CT_Extract nochdir "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" - - CT_TestAndAbort "Error in add-on '${addon}': both short and long names in tarball" \ - -d "${addon}" -a -d "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" - - # Some addons have the 'long' name, while others have the - # 'short' name, but patches are non-uniformly built with - # either the 'long' or 'short' name, whatever the addons name - # but we prefer the 'short' name and avoid duplicates. - if [ -d "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" ]; then - CT_DoExecLog FILE mv "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" "${addon}" - fi - - CT_DoExecLog FILE ln -s "${addon}" "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" - - CT_Patch nochdir "${CT_LIBC}" "${addon}-${CT_LIBC_VERSION}" - - # Remove the long name since it can confuse configure scripts to run - # the same source twice. - rm "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" - done - - # The configure files may be older than the configure.in files - # if using a snapshot (or even some tarballs). Fake them being - # up to date. - find . -type f -name configure -exec touch {} \; 2>&1 |CT_DoLog ALL - - CT_Popd - - if [ "${CT_LIBC_LOCALES}" = "y" ]; then - do_libc_locales_extract - fi -} - -# Build and install headers and start files -do_libc_start_files() { - # Start files and Headers should be configured the same way as the - # final libc, but built and installed differently. - do_libc_backend libc_mode=startfiles -} - -# This function builds and install the full C library -do_libc() { - do_libc_backend libc_mode=final -} - -# This backend builds the C library once for each multilib -# variant the compiler gives us -# Usage: do_libc_backend param=value [...] -# Parameter : Definition : Type : Default -# libc_mode : 'startfiles' or 'final' : string : (none) -do_libc_backend() { - local libc_mode - local -a multilibs - local multilib - local multi_dir - local multi_flags - local extra_dir - local libc_headers libc_startfiles libc_full - local hdr - local arg - - for arg in "$@"; do - eval "${arg// /\\ }" - done - - case "${libc_mode}" in - startfiles) - CT_DoStep INFO "Installing C library headers & start files" - hdr=y - libc_startfiles=y - libc_full= - ;; - final) - CT_DoStep INFO "Installing C library" - hdr= - libc_startfiles= - libc_full=y - ;; - *) CT_Abort "Unsupported (or unset) libc_mode='${libc_mode}'";; - esac - - # If gcc is not configured for multilib, it still prints - # a single line for the default settings - multilibs=( $("${CT_TARGET}-gcc" -print-multi-lib 2>/dev/null) ) - for multilib in "${multilibs[@]}"; do - multi_dir="${multilib%%;*}" - if [ "${multi_dir}" != "." ]; then - CT_DoStep INFO "Building for multilib subdir='${multi_dir}'" - - extra_flags="$( echo "${multilib#*;}" \ - |${sed} -r -e 's/@/ -/g;' \ - )" - extra_dir="/${multi_dir}" - - # glibc install its files in ${extra_dir}/{usr/,}lib - # while gcc expects them in {,usr/}lib/${extra_dir}. - # Prepare some symlinks so glibc installs in fact in - # the proper place - # We do it in the start-files step, so it is not needed - # to do it in the final step, as the symlinks will - # already exist - if [ "${libc_mode}" = "startfiles" ]; then - CT_Pushd "${CT_SYSROOT_DIR}" - CT_DoExecLog ALL mkdir -p "lib/${multi_dir}" \ - "usr/lib/${multi_dir}" \ - "${multi_dir}" \ - "${multi_dir}/usr" - CT_DoExecLog ALL ln -sf "../lib/${multi_dir}" "${multi_dir}/lib" - CT_DoExecLog ALL ln -sf "../../usr/lib/${multi_dir}" "${multi_dir}/usr/lib" - CT_Popd - fi - libc_headers= - else - extra_dir= - extra_flags= - libc_headers="${hdr}" - fi - - CT_mkdir_pushd "${CT_BUILD_DIR}/build-libc-${libc_mode}${extra_dir//\//_}" - - do_libc_backend_once extra_dir="${extra_dir}" \ - extra_flags="${extra_flags}" \ - libc_headers="${libc_headers}" \ - libc_startfiles="${libc_startfiles}" \ - libc_full="${libc_full}" - - CT_Popd - - if [ "${multi_dir}" != "." ]; then - if [ "${libc_mode}" = "final" ]; then - CT_DoLog EXTRA "Fixing up multilib location" - - # rewrite the library multiplexers - for d in "lib/${multi_dir}" "usr/lib/${multi_dir}"; do - for l in libc libpthread libgcc_s; do - if [ -f "${CT_SYSROOT_DIR}/${d}/${l}.so" \ - -a ! -L ${CT_SYSROOT_DIR}/${d}/${l}.so ] - then - CT_DoExecLog DEBUG ${sed} -r -i \ - -e "s:/lib/:/lib/${multi_dir}/:g;" \ - "${CT_SYSROOT_DIR}/${d}/${l}.so" - fi - done - done - # Remove the multi_dir now it is no longer useful - CT_DoExecLog DEBUG rm -rf "${CT_SYSROOT_DIR}/${multi_dir}" - fi # libc_mode == final - - CT_EndStep - fi - done - - CT_EndStep -} - -# This backend builds the C library once -# Usage: do_libc_backend_once param=value [...] -# Parameter : Definition : Type : Default -# libc_headers : Build libc headers : bool : n -# libc_startfiles : Build libc start-files : bool : n -# libc_full : Build full libc : bool : n -# extra_flags : Extra CFLAGS to use (for multilib) : string : (empty) -# extra_dir : Extra subdir for multilib : string : (empty) -do_libc_backend_once() { - local libc_headers - local libc_startfiles - local libc_full - local extra_flags - local extra_dir - local src_dir="${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}" - local extra_cc_args - local -a extra_config - local -a extra_make_args - local glibc_cflags - local float_extra - local endian_extra - local arg - - for arg in "$@"; do - eval "${arg// /\\ }" - done - - CT_DoLog EXTRA "Configuring C library" - - case "${CT_LIBC}" in - eglibc) - if [ "${CT_EGLIBC_CUSTOM_CONFIG}" = "y" ]; then - CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/eglibc.config" option-groups.config - fi - if [ "${CT_EGLIBC_OPT_SIZE}" = "y" ]; then - OPTIMIZE=-Os - else - OPTIMIZE=-O2 - fi - ;; - glibc) - # glibc can't be built without -O2 (reference needed!) - OPTIMIZE=-O2 - # Also, if those two are missing, iconv build breaks - extra_config+=( --disable-debug --disable-sanity-checks ) - ;; - esac - - # always include rpc, the user can still override it with TI-RPC - extra_config+=( --enable-obsolete-rpc ) - - # Add some default glibc config options if not given by user. - # We don't need to be conditional on wether the user did set different - # values, as they CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY is passed after - # extra_config - - extra_config+=("$(do_libc_min_kernel_config)") - - case "${CT_THREADS}" in - nptl) extra_config+=("--with-__thread" "--with-tls");; - linuxthreads) extra_config+=("--with-__thread" "--without-tls" "--without-nptl");; - none) extra_config+=("--without-__thread" "--without-nptl") - case "${CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY[*]}" in - *-tls*) ;; - *) extra_config+=("--without-tls");; - esac - ;; - esac - - case "${CT_SHARED_LIBS}" in - y) extra_config+=("--enable-shared");; - *) extra_config+=("--disable-shared");; - esac - - float_extra="$( echo "${extra_flags}" \ - |${sed} -r -e '/^(.*[[:space:]])?-m(hard|soft)-float([[:space:]].*)?$/!d;' \ - -e 's//\2/;' \ - )" - case "${float_extra}" in - hard) extra_config+=("--with-fp");; - soft) extra_config+=("--without-fp");; - "") - case "${CT_ARCH_FLOAT}" in - hard|softfp) extra_config+=("--with-fp");; - soft) extra_config+=("--without-fp");; - esac - ;; - esac - - if [ "${CT_LIBC_DISABLE_VERSIONING}" = "y" ]; then - extra_config+=("--disable-versioning") - fi - - if [ "${CT_LIBC_OLDEST_ABI}" != "" ]; then - extra_config+=("--enable-oldest-abi=${CT_LIBC_OLDEST_ABI}") - fi - - case "$(do_libc_add_ons_list ,)" in - "") extra_config+=("--enable-add-ons=no");; - *) extra_config+=("--enable-add-ons=$(do_libc_add_ons_list ,)");; - esac - - extra_config+=("--with-pkgversion=${CT_PKGVERSION}") - [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}") - - # Extract the endianness options if any - # This should cover all possible endianness options - # in gcc, but it is prone to bit-rot... :-( - endian_extra="$( echo "${extra_flags}" \ - |${sed} -r -e '/^(.*[[:space:]])?-(E[BL]|m((big|little)(-endian)?|e?[bl]))([[:space:]].*)?$/!d;' \ - -e 's//\2/;' \ - )" - case "${endian_extra}" in - EB|mbig-endian|mbig|meb|mb) - extra_cc_args="${extra_cc_args} ${endian_extra}" - ;; - EL|mlittle-endian|mlittle|mel|ml) - extra_cc_args="${extra_cc_args} ${endian_extra}" - ;; - "") extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}" - ;; - esac - - touch config.cache - if [ "${CT_LIBC_GLIBC_FORCE_UNWIND}" = "y" ]; then - echo "libc_cv_forced_unwind=yes" >>config.cache - echo "libc_cv_c_cleanup=yes" >>config.cache - fi - - # Pre-seed the configparms file with values from the config option - printf "%s\n" "${CT_LIBC_GLIBC_CONFIGPARMS}" > configparms - - cross_cc=$(CT_Which "${CT_TARGET}-gcc") - extra_cc_args+=" ${extra_flags}" - - case "${CT_LIBC_ENABLE_FORTIFIED_BUILD}" in - y) ;; - *) glibc_cflags+=" -U_FORTIFY_SOURCE";; - esac - glibc_cflags+=" ${CT_TARGET_CFLAGS} ${OPTIMIZE} ${CT_LIBC_GLIBC_EXTRA_CFLAGS}" - - # ./configure is mislead by our tools override wrapper for bash - # so just tell it where the real bash is _on_the_target_! - # Notes: - # - ${ac_cv_path_BASH_SHELL} is only used to set BASH_SHELL - # - ${BASH_SHELL} is only used to set BASH - # - ${BASH} is only used to set the shebang - # in two scripts to run on the target - # So we can safely bypass bash detection at compile time. - # Should this change in a future eglibc release, we'd better - # directly mangle the generated scripts _after_ they get built, - # or even after they get installed... - echo "ac_cv_path_BASH_SHELL=/bin/bash" >>config.cache - - # Configure with --prefix the way we want it on the target... - # There are a whole lot of settings here. You'll probably want - # to read up on what they all mean, and customize a bit, possibly by setting GLIBC_EXTRA_CONFIG_ARRAY - # Compare these options with the ones used when installing the glibc headers above - they're different. - # Adding "--without-gd" option to avoid error "memusagestat.c:36:16: gd.h: No such file or directory" - # See also http://sources.redhat.com/ml/libc-alpha/2000-07/msg00024.html. - # Set BUILD_CC, or we won't be able to build datafiles - # Run explicitly through CONFIG_SHELL, or the build breaks badly (loop-of-death) - # when the shell is not bash... Sigh... :-( - - CT_DoLog DEBUG "Using gcc for target : '${cross_cc}'" - CT_DoLog DEBUG "Configuring with addons : '$(do_libc_add_ons_list ,)'" - CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'" - CT_DoLog DEBUG "Extra CC args passed : '${glibc_cflags}'" - CT_DoLog DEBUG "Extra flags (multilib) : '${extra_flags}'" - - CT_DoExecLog CFG \ - BUILD_CC="${CT_BUILD}-gcc" \ - CFLAGS="${glibc_cflags}" \ - CC="${CT_TARGET}-gcc ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}" \ - AR=${CT_TARGET}-ar \ - RANLIB=${CT_TARGET}-ranlib \ - "${CONFIG_SHELL}" \ - "${src_dir}/configure" \ - --prefix=/usr \ - --build=${CT_BUILD} \ - --host=${CT_TARGET} \ - --cache-file="$(pwd)/config.cache" \ - --without-cvs \ - --disable-profile \ - --without-gd \ - --with-headers="${CT_HEADERS_DIR}" \ - "${extra_config[@]}" \ - "${CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY[@]}" - - # build hacks - case "${CT_ARCH},${CT_ARCH_CPU}" in - powerpc,8??) - # http://sourceware.org/ml/crossgcc/2008-10/msg00068.html - CT_DoLog DEBUG "Activating support for memset on broken ppc-8xx (CPU15 erratum)" - extra_make_args+=( ASFLAGS="-DBROKEN_PPC_8xx_CPU15" ) - ;; - esac - - if [ "${libc_headers}" = "y" ]; then - CT_DoLog EXTRA "Installing C library headers" - - # use the 'install-headers' makefile target to install the - # headers - CT_DoExecLog ALL make ${JOBSFLAGS} \ - install_root=${CT_SYSROOT_DIR}${extra_dir} \ - install-bootstrap-headers=yes \ - "${extra_make_args[@]}" \ - install-headers - - # For glibc, a few headers need to be manually installed - if [ "${CT_LIBC}" = "glibc" ]; then - # Two headers -- stubs.h and features.h -- aren't installed by install-headers, - # so do them by hand. We can tolerate an empty stubs.h for the moment. - # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html - mkdir -p "${CT_HEADERS_DIR}/gnu" - CT_DoExecLog ALL touch "${CT_HEADERS_DIR}/gnu/stubs.h" - CT_DoExecLog ALL cp -v "${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/include/features.h" \ - "${CT_HEADERS_DIR}/features.h" - - # Building the bootstrap gcc requires either setting inhibit_libc, or - # having a copy of stdio_lim.h... see - # http://sources.redhat.com/ml/libc-alpha/2003-11/msg00045.html - CT_DoExecLog ALL cp -v bits/stdio_lim.h "${CT_HEADERS_DIR}/bits/stdio_lim.h" - - # Following error building gcc-4.0.0's gcj: - # error: bits/syscall.h: No such file or directory - # solved by following copy; see http://sourceware.org/ml/crossgcc/2005-05/msg00168.html - # but it breaks arm, see http://sourceware.org/ml/crossgcc/2006-01/msg00091.html - # Of course, only copy it if it does not already exist - case "${CT_ARCH}" in - arm) ;; - *) if [ -f "${CT_HEADERS_DIR}/bits/syscall.h" ]; then - CT_DoLog ALL "Not over-writing existing bits/syscall.h" - elif [ -f "misc/bits/syscall.h" ]; then - CT_DoExecLog ALL cp -v "misc/bits/syscall.h" \ - "${CT_HEADERS_DIR}/bits/syscall.h" - else - # "Old" glibces do not have the above file, - # but provide this one: - CT_DoExecLog ALL cp -v "misc/syscall-list.h" \ - "${CT_HEADERS_DIR}/bits/syscall.h" - fi - ;; - esac - fi - fi # libc_headers == y - - if [ "${libc_startfiles}" = "y" ]; then - if [ "${CT_THREADS}" = "nptl" ]; then - CT_DoLog EXTRA "Installing C library start files" - - # there are a few object files needed to link shared libraries, - # which we build and install by hand - CT_DoExecLog ALL mkdir -p "${CT_SYSROOT_DIR}${extra_dir}/usr/lib" - CT_DoExecLog ALL make ${JOBSFLAGS} \ - "${extra_make_args[@]}" \ - csu/subdir_lib - CT_DoExecLog ALL cp csu/crt1.o csu/crti.o csu/crtn.o \ - "${CT_SYSROOT_DIR}${extra_dir}/usr/lib" - - # Finally, 'libgcc_s.so' requires a 'libc.so' to link against. - # However, since we will never actually execute its code, - # it doesn't matter what it contains. So, treating '/dev/null' - # as a C source file, we produce a dummy 'libc.so' in one step - CT_DoExecLog ALL "${cross_cc}" -nostdlib \ - -nostartfiles \ - -shared \ - -x c /dev/null \ - -o "${CT_SYSROOT_DIR}${extra_dir}/usr/lib/libc.so" - fi # threads == nptl - fi # libc_headers == y - - if [ "${libc_full}" = "y" ]; then - CT_DoLog EXTRA "Building C library" - CT_DoExecLog ALL make ${JOBSFLAGS} \ - "${extra_make_args[@]}" \ - all - - CT_DoLog EXTRA "Installing C library" - CT_DoExecLog ALL make ${JOBSFLAGS} \ - "${extra_make_args[@]}" \ - install_root="${CT_SYSROOT_DIR}${extra_dir}" \ - install - - if [ "${CT_BUILD_MANUALS}" = "y" ]; then - CT_DoLog EXTRA "Building and installing the C library manual" - # Omit JOBSFLAGS as GLIBC has problems building the - # manuals in parallel - CT_DoExecLog ALL make pdf html - # EGLIBC doesn't have a install-{pdf.html}, and older - # versions leave the manuals in the source directory - CT_DoExecLog ALL mkdir -p ${CT_PREFIX_DIR}/share/doc - if [ "${CT_LIBC_EGLIBC_2_16_or_later}" = "y" ]; then - CT_DoExecLog ALL cp -av manual/*.pdf manual/libc \ - ${CT_PREFIX_DIR}/share/doc - else - CT_DoExecLog ALL cp -av ${src_dir}/manual/*.pdf ${src_dir}/manual/libc \ - ${CT_PREFIX_DIR}/share/doc - fi - fi - - if [ "${CT_LIBC_LOCALES}" = "y" ]; then - do_libc_locales - fi - fi # libc_full == y -} - -# Build up the addons list, separated with $1 -do_libc_add_ons_list() { - local sep="$1" - local addons_list="$( echo "${CT_LIBC_ADDONS_LIST}" \ - |sed -r -e "s/[[:space:],]/${sep}/g;" \ - )" - if [ "${CT_LIBC_GLIBC_2_20_or_later}" != "y" ]; then - case "${CT_THREADS}" in - none) ;; - *) addons_list="${addons_list}${sep}${CT_THREADS}";; - esac - fi - [ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && addons_list="${addons_list}${sep}ports" - # Remove duplicate, leading and trailing separators - echo "${addons_list}" |sed -r -e "s/${sep}+/${sep}/g; s/^${sep}//; s/${sep}\$//;" -} - -# Compute up the minimum supported Linux kernel version -do_libc_min_kernel_config() { - local min_kernel_config - - case "${CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY[*]}" in - *--enable-kernel*) ;; - *) if [ "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" ]; then - # We can't rely on the kernel version from the configuration, - # because it might not be available if the user uses pre-installed - # headers. On the other hand, both method will have the kernel - # version installed in "usr/include/linux/version.h" in the sysroot. - # Parse that instead of having two code-paths. - version_code_file="${CT_SYSROOT_DIR}/usr/include/linux/version.h" - if [ ! -f "${version_code_file}" -o ! -r "${version_code_file}" ]; then - CT_Abort "Linux version is unavailable in installed headers files" - fi - version_code="$( grep -E LINUX_VERSION_CODE "${version_code_file}" \ - |cut -d ' ' -f 3 \ - )" - version=$(((version_code>>16)&0xFF)) - patchlevel=$(((version_code>>8)&0xFF)) - sublevel=$((version_code&0xFF)) - min_kernel_config="${version}.${patchlevel}.${sublevel}" - elif [ "${CT_LIBC_GLIBC_KERNEL_VERSION_CHOSEN}" = "y" ]; then - # Trim the fourth part of the linux version, keeping only the first three numbers - min_kernel_config="$( echo "${CT_LIBC_GLIBC_MIN_KERNEL_VERSION}" \ - |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;' \ - )" - fi - echo "--enable-kernel=${min_kernel_config}" - ;; - esac -} diff --git a/scripts/build/libc/glibc.sh b/scripts/build/libc/glibc.sh index a064c49..672e672 100644 --- a/scripts/build/libc/glibc.sh +++ b/scripts/build/libc/glibc.sh @@ -2,13 +2,532 @@ # Copyright 2007 Yann E. MORIN # Licensed under the GPL v2. See COPYING in the root of this package -# Add the definitions common to glibc and eglibc -# do_libc_extract -# do_libc_start_files -# do_libc -# do_libc_add_ons_list -# do_libc_min_kernel_config -. "${CT_LIB_DIR}/scripts/build/libc/glibc-eglibc.sh-common" +# Extract the C library tarball(s) +do_libc_extract() { + local addon + + # Attempt CT_EXTRACT only if NOT custom, or CUSTOM_LOCATION is not a directory + if [ "${CT_LIBC_CUSTOM}" != "y" \ + -o ! -d "${CT_LIBC_CUSTOM_LOCATION}" ]; then + CT_Extract "${CT_LIBC}-${CT_LIBC_VERSION}" + fi + CT_Pushd "${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}" + # Attempt CT_PATCH only if NOT custom + if [ "${CT_LIBC_CUSTOM}" != "y" ]; then + CT_Patch nochdir "${CT_LIBC}" "${CT_LIBC_VERSION}" + fi + + # Extract the add-opns + for addon in $(do_libc_add_ons_list " "); do + # If the addon was bundled with the main archive, we do not + # need to extract it. Worse, if we were to try to extract + # it, we'd get an error. + if [ -d "${addon}" ]; then + CT_DoLog DEBUG "Add-on '${addon}' already present, skipping extraction" + continue + fi + + CT_Extract nochdir "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" + + CT_TestAndAbort "Error in add-on '${addon}': both short and long names in tarball" \ + -d "${addon}" -a -d "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" + + # Some addons have the 'long' name, while others have the + # 'short' name, but patches are non-uniformly built with + # either the 'long' or 'short' name, whatever the addons name + # but we prefer the 'short' name and avoid duplicates. + if [ -d "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" ]; then + CT_DoExecLog FILE mv "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" "${addon}" + fi + + CT_DoExecLog FILE ln -s "${addon}" "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" + + CT_Patch nochdir "${CT_LIBC}" "${addon}-${CT_LIBC_VERSION}" + + # Remove the long name since it can confuse configure scripts to run + # the same source twice. + rm "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" + done + + # The configure files may be older than the configure.in files + # if using a snapshot (or even some tarballs). Fake them being + # up to date. + find . -type f -name configure -exec touch {} \; 2>&1 |CT_DoLog ALL + + CT_Popd + + if [ "${CT_LIBC_LOCALES}" = "y" ]; then + do_libc_locales_extract + fi +} + +# Build and install headers and start files +do_libc_start_files() { + # Start files and Headers should be configured the same way as the + # final libc, but built and installed differently. + do_libc_backend libc_mode=startfiles +} + +# This function builds and install the full C library +do_libc() { + do_libc_backend libc_mode=final +} + +# This backend builds the C library once for each multilib +# variant the compiler gives us +# Usage: do_libc_backend param=value [...] +# Parameter : Definition : Type : Default +# libc_mode : 'startfiles' or 'final' : string : (none) +do_libc_backend() { + local libc_mode + local -a multilibs + local multilib + local multi_dir + local multi_flags + local extra_dir + local libc_headers libc_startfiles libc_full + local hdr + local arg + + for arg in "$@"; do + eval "${arg// /\\ }" + done + + case "${libc_mode}" in + startfiles) + CT_DoStep INFO "Installing C library headers & start files" + hdr=y + libc_startfiles=y + libc_full= + ;; + final) + CT_DoStep INFO "Installing C library" + hdr= + libc_startfiles= + libc_full=y + ;; + *) CT_Abort "Unsupported (or unset) libc_mode='${libc_mode}'";; + esac + + # If gcc is not configured for multilib, it still prints + # a single line for the default settings + multilibs=( $("${CT_TARGET}-gcc" -print-multi-lib 2>/dev/null) ) + for multilib in "${multilibs[@]}"; do + multi_dir="${multilib%%;*}" + if [ "${multi_dir}" != "." ]; then + CT_DoStep INFO "Building for multilib subdir='${multi_dir}'" + + extra_flags="$( echo "${multilib#*;}" \ + |${sed} -r -e 's/@/ -/g;' \ + )" + extra_dir="/${multi_dir}" + + # glibc install its files in ${extra_dir}/{usr/,}lib + # while gcc expects them in {,usr/}lib/${extra_dir}. + # Prepare some symlinks so glibc installs in fact in + # the proper place + # We do it in the start-files step, so it is not needed + # to do it in the final step, as the symlinks will + # already exist + if [ "${libc_mode}" = "startfiles" ]; then + CT_Pushd "${CT_SYSROOT_DIR}" + CT_DoExecLog ALL mkdir -p "lib/${multi_dir}" \ + "usr/lib/${multi_dir}" \ + "${multi_dir}" \ + "${multi_dir}/usr" + CT_DoExecLog ALL ln -sf "../lib/${multi_dir}" "${multi_dir}/lib" + CT_DoExecLog ALL ln -sf "../../usr/lib/${multi_dir}" "${multi_dir}/usr/lib" + CT_Popd + fi + libc_headers= + else + extra_dir= + extra_flags= + libc_headers="${hdr}" + fi + + CT_mkdir_pushd "${CT_BUILD_DIR}/build-libc-${libc_mode}${extra_dir//\//_}" + + do_libc_backend_once extra_dir="${extra_dir}" \ + extra_flags="${extra_flags}" \ + libc_headers="${libc_headers}" \ + libc_startfiles="${libc_startfiles}" \ + libc_full="${libc_full}" + + CT_Popd + + if [ "${multi_dir}" != "." ]; then + if [ "${libc_mode}" = "final" ]; then + CT_DoLog EXTRA "Fixing up multilib location" + + # rewrite the library multiplexers + for d in "lib/${multi_dir}" "usr/lib/${multi_dir}"; do + for l in libc libpthread libgcc_s; do + if [ -f "${CT_SYSROOT_DIR}/${d}/${l}.so" \ + -a ! -L ${CT_SYSROOT_DIR}/${d}/${l}.so ] + then + CT_DoExecLog DEBUG ${sed} -r -i \ + -e "s:/lib/:/lib/${multi_dir}/:g;" \ + "${CT_SYSROOT_DIR}/${d}/${l}.so" + fi + done + done + # Remove the multi_dir now it is no longer useful + CT_DoExecLog DEBUG rm -rf "${CT_SYSROOT_DIR}/${multi_dir}" + fi # libc_mode == final + + CT_EndStep + fi + done + + CT_EndStep +} + +# This backend builds the C library once +# Usage: do_libc_backend_once param=value [...] +# Parameter : Definition : Type : Default +# libc_headers : Build libc headers : bool : n +# libc_startfiles : Build libc start-files : bool : n +# libc_full : Build full libc : bool : n +# extra_flags : Extra CFLAGS to use (for multilib) : string : (empty) +# extra_dir : Extra subdir for multilib : string : (empty) +do_libc_backend_once() { + local libc_headers + local libc_startfiles + local libc_full + local extra_flags + local extra_dir + local src_dir="${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}" + local extra_cc_args + local -a extra_config + local -a extra_make_args + local glibc_cflags + local float_extra + local endian_extra + local arg + + for arg in "$@"; do + eval "${arg// /\\ }" + done + + CT_DoLog EXTRA "Configuring C library" + + case "${CT_LIBC}" in + glibc) + # glibc can't be built without -O2 (reference needed!) + OPTIMIZE=-O2 + # Also, if those two are missing, iconv build breaks + extra_config+=( --disable-debug --disable-sanity-checks ) + ;; + esac + + # always include rpc, the user can still override it with TI-RPC + extra_config+=( --enable-obsolete-rpc ) + + # Add some default glibc config options if not given by user. + # We don't need to be conditional on wether the user did set different + # values, as they CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY is passed after + # extra_config + + extra_config+=("$(do_libc_min_kernel_config)") + + case "${CT_THREADS}" in + nptl) extra_config+=("--with-__thread" "--with-tls");; + linuxthreads) extra_config+=("--with-__thread" "--without-tls" "--without-nptl");; + none) extra_config+=("--without-__thread" "--without-nptl") + case "${CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY[*]}" in + *-tls*) ;; + *) extra_config+=("--without-tls");; + esac + ;; + esac + + case "${CT_SHARED_LIBS}" in + y) extra_config+=("--enable-shared");; + *) extra_config+=("--disable-shared");; + esac + + float_extra="$( echo "${extra_flags}" \ + |${sed} -r -e '/^(.*[[:space:]])?-m(hard|soft)-float([[:space:]].*)?$/!d;' \ + -e 's//\2/;' \ + )" + case "${float_extra}" in + hard) extra_config+=("--with-fp");; + soft) extra_config+=("--without-fp");; + "") + case "${CT_ARCH_FLOAT}" in + hard|softfp) extra_config+=("--with-fp");; + soft) extra_config+=("--without-fp");; + esac + ;; + esac + + if [ "${CT_LIBC_DISABLE_VERSIONING}" = "y" ]; then + extra_config+=("--disable-versioning") + fi + + if [ "${CT_LIBC_OLDEST_ABI}" != "" ]; then + extra_config+=("--enable-oldest-abi=${CT_LIBC_OLDEST_ABI}") + fi + + case "$(do_libc_add_ons_list ,)" in + "") extra_config+=("--enable-add-ons=no");; + *) extra_config+=("--enable-add-ons=$(do_libc_add_ons_list ,)");; + esac + + extra_config+=("--with-pkgversion=${CT_PKGVERSION}") + [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}") + + # Extract the endianness options if any + # This should cover all possible endianness options + # in gcc, but it is prone to bit-rot... :-( + endian_extra="$( echo "${extra_flags}" \ + |${sed} -r -e '/^(.*[[:space:]])?-(E[BL]|m((big|little)(-endian)?|e?[bl]))([[:space:]].*)?$/!d;' \ + -e 's//\2/;' \ + )" + case "${endian_extra}" in + EB|mbig-endian|mbig|meb|mb) + extra_cc_args="${extra_cc_args} ${endian_extra}" + ;; + EL|mlittle-endian|mlittle|mel|ml) + extra_cc_args="${extra_cc_args} ${endian_extra}" + ;; + "") extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}" + ;; + esac + + touch config.cache + if [ "${CT_LIBC_GLIBC_FORCE_UNWIND}" = "y" ]; then + echo "libc_cv_forced_unwind=yes" >>config.cache + echo "libc_cv_c_cleanup=yes" >>config.cache + fi + + # Pre-seed the configparms file with values from the config option + printf "%s\n" "${CT_LIBC_GLIBC_CONFIGPARMS}" > configparms + + cross_cc=$(CT_Which "${CT_TARGET}-gcc") + extra_cc_args+=" ${extra_flags}" + + case "${CT_LIBC_ENABLE_FORTIFIED_BUILD}" in + y) ;; + *) glibc_cflags+=" -U_FORTIFY_SOURCE";; + esac + glibc_cflags+=" ${CT_TARGET_CFLAGS} ${OPTIMIZE} ${CT_LIBC_GLIBC_EXTRA_CFLAGS}" + + # ./configure is mislead by our tools override wrapper for bash + # so just tell it where the real bash is _on_the_target_! + # Notes: + # - ${ac_cv_path_BASH_SHELL} is only used to set BASH_SHELL + # - ${BASH_SHELL} is only used to set BASH + # - ${BASH} is only used to set the shebang + # in two scripts to run on the target + # So we can safely bypass bash detection at compile time. + # Should this change in a future glibc release, we'd better + # directly mangle the generated scripts _after_ they get built, + # or even after they get installed... + echo "ac_cv_path_BASH_SHELL=/bin/bash" >>config.cache + + # Configure with --prefix the way we want it on the target... + # There are a whole lot of settings here. You'll probably want + # to read up on what they all mean, and customize a bit, possibly by setting GLIBC_EXTRA_CONFIG_ARRAY + # Compare these options with the ones used when installing the glibc headers above - they're different. + # Adding "--without-gd" option to avoid error "memusagestat.c:36:16: gd.h: No such file or directory" + # See also http://sources.redhat.com/ml/libc-alpha/2000-07/msg00024.html. + # Set BUILD_CC, or we won't be able to build datafiles + # Run explicitly through CONFIG_SHELL, or the build breaks badly (loop-of-death) + # when the shell is not bash... Sigh... :-( + + CT_DoLog DEBUG "Using gcc for target : '${cross_cc}'" + CT_DoLog DEBUG "Configuring with addons : '$(do_libc_add_ons_list ,)'" + CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'" + CT_DoLog DEBUG "Extra CC args passed : '${glibc_cflags}'" + CT_DoLog DEBUG "Extra flags (multilib) : '${extra_flags}'" + + CT_DoExecLog CFG \ + BUILD_CC="${CT_BUILD}-gcc" \ + CFLAGS="${glibc_cflags}" \ + CC="${CT_TARGET}-gcc ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}" \ + AR=${CT_TARGET}-ar \ + RANLIB=${CT_TARGET}-ranlib \ + "${CONFIG_SHELL}" \ + "${src_dir}/configure" \ + --prefix=/usr \ + --build=${CT_BUILD} \ + --host=${CT_TARGET} \ + --cache-file="$(pwd)/config.cache" \ + --without-cvs \ + --disable-profile \ + --without-gd \ + --with-headers="${CT_HEADERS_DIR}" \ + "${extra_config[@]}" \ + "${CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY[@]}" + + # build hacks + case "${CT_ARCH},${CT_ARCH_CPU}" in + powerpc,8??) + # http://sourceware.org/ml/crossgcc/2008-10/msg00068.html + CT_DoLog DEBUG "Activating support for memset on broken ppc-8xx (CPU15 erratum)" + extra_make_args+=( ASFLAGS="-DBROKEN_PPC_8xx_CPU15" ) + ;; + esac + + CT_CFLAGS_FOR_BUILD+=" ${CT_EXTRA_CFLAGS_FOR_BUILD}" + CT_LDFLAGS_FOR_BUILD+=" ${CT_EXTRA_LDFLAGS_FOR_BUILD}" + extra_make_args+=( "BUILD_CFLAGS=${CT_CFLAGS_FOR_BUILD}" "BUILD_LDFLAGS=${CT_LDFLAGS_FOR_BUILD}" ) + + if [ "${libc_headers}" = "y" ]; then + CT_DoLog EXTRA "Installing C library headers" + + # use the 'install-headers' makefile target to install the + # headers + CT_DoExecLog ALL make ${JOBSFLAGS} \ + install_root=${CT_SYSROOT_DIR}${extra_dir} \ + install-bootstrap-headers=yes \ + "${extra_make_args[@]}" \ + install-headers + + # For glibc, a few headers need to be manually installed + if [ "${CT_LIBC}" = "glibc" ]; then + # Two headers -- stubs.h and features.h -- aren't installed by install-headers, + # so do them by hand. We can tolerate an empty stubs.h for the moment. + # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html + mkdir -p "${CT_HEADERS_DIR}/gnu" + CT_DoExecLog ALL touch "${CT_HEADERS_DIR}/gnu/stubs.h" + CT_DoExecLog ALL cp -v "${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/include/features.h" \ + "${CT_HEADERS_DIR}/features.h" + + # Building the bootstrap gcc requires either setting inhibit_libc, or + # having a copy of stdio_lim.h... see + # http://sources.redhat.com/ml/libc-alpha/2003-11/msg00045.html + CT_DoExecLog ALL cp -v bits/stdio_lim.h "${CT_HEADERS_DIR}/bits/stdio_lim.h" + + # Following error building gcc-4.0.0's gcj: + # error: bits/syscall.h: No such file or directory + # solved by following copy; see http://sourceware.org/ml/crossgcc/2005-05/msg00168.html + # but it breaks arm, see http://sourceware.org/ml/crossgcc/2006-01/msg00091.html + # Of course, only copy it if it does not already exist + case "${CT_ARCH}" in + arm) ;; + *) if [ -f "${CT_HEADERS_DIR}/bits/syscall.h" ]; then + CT_DoLog ALL "Not over-writing existing bits/syscall.h" + elif [ -f "misc/bits/syscall.h" ]; then + CT_DoExecLog ALL cp -v "misc/bits/syscall.h" \ + "${CT_HEADERS_DIR}/bits/syscall.h" + else + # "Old" glibces do not have the above file, + # but provide this one: + CT_DoExecLog ALL cp -v "misc/syscall-list.h" \ + "${CT_HEADERS_DIR}/bits/syscall.h" + fi + ;; + esac + fi + fi # libc_headers == y + + if [ "${libc_startfiles}" = "y" ]; then + if [ "${CT_THREADS}" = "nptl" ]; then + CT_DoLog EXTRA "Installing C library start files" + + # there are a few object files needed to link shared libraries, + # which we build and install by hand + CT_DoExecLog ALL mkdir -p "${CT_SYSROOT_DIR}${extra_dir}/usr/lib" + CT_DoExecLog ALL make ${JOBSFLAGS} \ + "${extra_make_args[@]}" \ + csu/subdir_lib + CT_DoExecLog ALL cp csu/crt1.o csu/crti.o csu/crtn.o \ + "${CT_SYSROOT_DIR}${extra_dir}/usr/lib" + + # Finally, 'libgcc_s.so' requires a 'libc.so' to link against. + # However, since we will never actually execute its code, + # it doesn't matter what it contains. So, treating '/dev/null' + # as a C source file, we produce a dummy 'libc.so' in one step + CT_DoExecLog ALL "${cross_cc}" -nostdlib \ + -nostartfiles \ + -shared \ + -x c /dev/null \ + -o "${CT_SYSROOT_DIR}${extra_dir}/usr/lib/libc.so" + fi # threads == nptl + fi # libc_headers == y + + if [ "${libc_full}" = "y" ]; then + CT_DoLog EXTRA "Building C library" + CT_DoExecLog ALL make ${JOBSFLAGS} \ + "${extra_make_args[@]}" \ + all + + CT_DoLog EXTRA "Installing C library" + CT_DoExecLog ALL make ${JOBSFLAGS} \ + "${extra_make_args[@]}" \ + install_root="${CT_SYSROOT_DIR}${extra_dir}" \ + install + + if [ "${CT_BUILD_MANUALS}" = "y" ]; then + CT_DoLog EXTRA "Building and installing the C library manual" + # Omit JOBSFLAGS as GLIBC has problems building the + # manuals in parallel + CT_DoExecLog ALL make pdf html + CT_DoExecLog ALL mkdir -p ${CT_PREFIX_DIR}/share/doc + CT_DoExecLog ALL cp -av ${src_dir}/manual/*.pdf \ + ${src_dir}/manual/libc \ + ${CT_PREFIX_DIR}/share/doc + fi + + if [ "${CT_LIBC_LOCALES}" = "y" ]; then + do_libc_locales + fi + fi # libc_full == y +} + +# Build up the addons list, separated with $1 +do_libc_add_ons_list() { + local sep="$1" + local addons_list="$( echo "${CT_LIBC_ADDONS_LIST}" \ + |sed -r -e "s/[[:space:],]/${sep}/g;" \ + )" + if [ "${CT_LIBC_GLIBC_2_20_or_later}" != "y" ]; then + case "${CT_THREADS}" in + none) ;; + *) addons_list="${addons_list}${sep}${CT_THREADS}";; + esac + fi + [ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && addons_list="${addons_list}${sep}ports" + # Remove duplicate, leading and trailing separators + echo "${addons_list}" |sed -r -e "s/${sep}+/${sep}/g; s/^${sep}//; s/${sep}\$//;" +} + +# Compute up the minimum supported Linux kernel version +do_libc_min_kernel_config() { + local min_kernel_config + + case "${CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY[*]}" in + *--enable-kernel*) ;; + *) if [ "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" ]; then + # We can't rely on the kernel version from the configuration, + # because it might not be available if the user uses pre-installed + # headers. On the other hand, both method will have the kernel + # version installed in "usr/include/linux/version.h" in the sysroot. + # Parse that instead of having two code-paths. + version_code_file="${CT_SYSROOT_DIR}/usr/include/linux/version.h" + if [ ! -f "${version_code_file}" -o ! -r "${version_code_file}" ]; then + CT_Abort "Linux version is unavailable in installed headers files" + fi + version_code="$( grep -E LINUX_VERSION_CODE "${version_code_file}" \ + |cut -d ' ' -f 3 \ + )" + version=$(((version_code>>16)&0xFF)) + patchlevel=$(((version_code>>8)&0xFF)) + sublevel=$((version_code&0xFF)) + min_kernel_config="${version}.${patchlevel}.${sublevel}" + elif [ "${CT_LIBC_GLIBC_KERNEL_VERSION_CHOSEN}" = "y" ]; then + # Trim the fourth part of the linux version, keeping only the first three numbers + min_kernel_config="$( echo "${CT_LIBC_GLIBC_MIN_KERNEL_VERSION}" \ + |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;' \ + )" + fi + echo "--enable-kernel=${min_kernel_config}" + ;; + esac +} # Download glibc do_libc_get() { @@ -24,7 +543,7 @@ do_libc_get() { CT_LIBC_CUSTOM_LOCATION="${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}" else if echo ${CT_LIBC_VERSION} |grep -q linaro; then - # Linaro eglibc releases come from regular downloads... + # Linaro glibc releases come from regular downloads... YYMM=`echo ${CT_LIBC_VERSION} |cut -d- -f3 |${sed} -e 's,^..,,'` CT_GetFile "glibc-${CT_LIBC_VERSION}" \ https://releases.linaro.org/${YYMM}/components/toolchain/glibc-linaro \ @@ -89,8 +608,13 @@ do_libc_locales() { CT_DoLog EXTRA "Configuring C library localedef" - if [ "${CT_LIBC_EGLIBC_HAS_PKGVERSION_BUGURL}" = "y" ]; then + # Versions that don't support --with-pkgversion or --with-bugurl will cause + # a harmless: `configure: WARNING: unrecognized options: --with-bugurl...` + # If it's set, use it, if is a recognized option. + if [ ! "${CT_TOOLCHAIN_PKGVERSION}" = "" ]; then extra_config+=("--with-pkgversion=${CT_PKGVERSION}") + fi + if [ ! "${CT_TOOLCHAIN_BUGURL}" = "" ]; then [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}") fi @@ -110,7 +634,7 @@ do_libc_locales() { # - ${BASH} is only used to set the shebang # in two scripts to run on the target # So we can safely bypass bash detection at compile time. - # Should this change in a future eglibc release, we'd better + # Should this change in a future glibc release, we'd better # directly mangle the generated scripts _after_ they get built, # or even after they get installed... echo "ac_cv_path_BASH_SHELL=/bin/bash" >>config.cache diff --git a/scripts/build/libc/mingw.sh b/scripts/build/libc/mingw.sh index 9a89df7..23f31d1 100644 --- a/scripts/build/libc/mingw.sh +++ b/scripts/build/libc/mingw.sh @@ -1,15 +1,25 @@ # Copyright 2012 Yann Diorcet # Licensed under the GPL v2. See COPYING in the root of this package -do_libc_get() { - CT_GetFile "mingw-w64-v${CT_WINAPI_VERSION}" \ - http://downloads.sourceforge.net/sourceforge/mingw-w64 +CT_WINAPI_VERSION_DOWNLOADED= + +do_libc_get() { + CT_DoStep INFO "Fetching mingw-w64 source for ${CT_WINAPI_VERSION}" + if [ "${CT_WINAPI_VERSION}" = "devel" ]; then + CT_GetGit "mingw-w64" "ref=HEAD" "git://git.code.sf.net/p/mingw-w64/mingw-w64" CT_WINAPI_VERSION_DOWNLOADED + CT_DoLog EXTRA "Fetched as ${CT_WINAPI_VERSION_DOWNLOADED}" + else + CT_GetFile "mingw-w64-v${CT_WINAPI_VERSION}" \ + http://downloads.sourceforge.net/sourceforge/mingw-w64 + CT_WINAPI_VERSION_DOWNLOADED=v${CT_WINAPI_VERSION} + fi + CT_EndStep } do_libc_extract() { - CT_Extract "mingw-w64-v${CT_WINAPI_VERSION}" - CT_Pushd "${CT_SRC_DIR}/mingw-w64-v${CT_WINAPI_VERSION}/" - CT_Patch nochdir mingw-w64 "${CT_WINAPI_VERSION}" + CT_Extract "mingw-w64-${CT_WINAPI_VERSION_DOWNLOADED}" + CT_Pushd "${CT_SRC_DIR}/mingw-w64-${CT_WINAPI_VERSION_DOWNLOADED}/" + CT_Patch nochdir mingw-w64 "${CT_WINAPI_VERSION_DOWNLOADED}" CT_Popd } @@ -17,6 +27,13 @@ do_libc_check_config() { : } +do_set_mingw_install_prefix(){ + MINGW_INSTALL_PREFIX=/usr/${CT_TARGET} + if [[ ${CT_WINAPI_VERSION} == 2* ]]; then + MINGW_INSTALL_PREFIX=/usr + fi +} + do_libc_start_files() { local -a sdk_opts @@ -33,11 +50,12 @@ do_libc_start_files() { CT_DoLog EXTRA "Configuring Headers" + do_set_mingw_install_prefix CT_DoExecLog CFG \ - "${CT_SRC_DIR}/mingw-w64-v${CT_WINAPI_VERSION}/mingw-w64-headers/configure" \ + "${CT_SRC_DIR}/mingw-w64-${CT_WINAPI_VERSION_DOWNLOADED}/mingw-w64-headers/configure" \ --build=${CT_BUILD} \ --host=${CT_TARGET} \ - --prefix=/usr \ + --prefix=${MINGW_INSTALL_PREFIX} \ "${sdk_opts[@]}" CT_DoLog EXTRA "Compile Headers" @@ -45,7 +63,7 @@ do_libc_start_files() { CT_DoLog EXTRA "Installing Headers" CT_DoExecLog ALL make install DESTDIR=${CT_SYSROOT_DIR} - + CT_Popd # It seems mingw is strangely set up to look into /mingw instead of @@ -56,18 +74,35 @@ do_libc_start_files() { CT_EndStep } +do_check_mingw_vendor_tuple() +{ + if [[ ${CT_WINAPI_VERSION} == 4* ]]; then + CT_DoStep INFO "Checking vendor tuple configured in crosstool-ng .config" + if [[ ${CT_TARGET_VENDOR} == w64 ]]; then + CT_DoLog EXTRA "The tuple is set to '${CT_TARGET_VENDOR}', as recommended by mingw-64 team." + else + CT_DoLog WARN "WARNING! The tuple '${CT_TARGET_VENDOR}', is not equal to w64 and might break the toolchain! WARNING!" + fi + CT_EndStep + fi +} + do_libc() { + do_check_mingw_vendor_tuple + CT_DoStep INFO "Building mingw-w64 files" CT_DoLog EXTRA "Configuring mingw-w64-crt" CT_mkdir_pushd "${CT_BUILD_DIR}/build-mingw-w64-crt" - CT_DoExecLog CFG \ - "${CT_SRC_DIR}/mingw-w64-v${CT_WINAPI_VERSION}/mingw-w64-crt/configure" \ - --prefix=/usr \ - --build=${CT_BUILD} \ - --host=${CT_TARGET} \ + do_set_mingw_install_prefix + CT_DoExecLog CFG \ + "${CT_SRC_DIR}/mingw-w64-${CT_WINAPI_VERSION_DOWNLOADED}/mingw-w64-crt/configure" \ + --with-sysroot=${CT_SYSROOT_DIR} \ + --prefix=${MINGW_INSTALL_PREFIX} \ + --build=${CT_BUILD} \ + --host=${CT_TARGET} \ CT_DoLog EXTRA "Building mingw-w64-crt" CT_DoExecLog ALL make ${JOBSFLAGS} diff --git a/scripts/build/test_suite/gcc.sh b/scripts/build/test_suite/gcc.sh index 178cffd..c829a43 100644 --- a/scripts/build/test_suite/gcc.sh +++ b/scripts/build/test_suite/gcc.sh @@ -15,10 +15,10 @@ do_test_suite_gcc_build() { CT_DoStep INFO "Installing GCC test suite" CT_DoExecLog ALL mkdir -p "${CT_TEST_SUITE_DIR}/gcc" - CT_DoExecLog ALL cp -av "${CT_LIB_DIR}/contrib/gcc-test-suite/default.cfg" \ - "${CT_LIB_DIR}/contrib/gcc-test-suite/Makefile" \ - "${CT_LIB_DIR}/contrib/gcc-test-suite/README" \ - "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/testsuite" \ + CT_DoExecLog ALL cp -av "${CT_LIB_DIR}/contrib/gcc-test-suite/default.cfg" \ + "${CT_LIB_DIR}/contrib/gcc-test-suite/Makefile" \ + "${CT_LIB_DIR}/contrib/gcc-test-suite/README" \ + "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/gcc/testsuite" \ "${CT_TEST_SUITE_DIR}/gcc" CT_DoExecLog ALL sed -i -r -e "s/@@DG_TARGET@@/${CT_TARGET}/g;" \ diff --git a/scripts/crosstool-NG.sh.in b/scripts/crosstool-NG.sh.in index 53ac552..ab654da 100644 --- a/scripts/crosstool-NG.sh.in +++ b/scripts/crosstool-NG.sh.in @@ -143,7 +143,7 @@ CT_DoLog INFO "Building environment variables" . "${CT_LIB_DIR}/scripts/build/companion_libs.sh" . "${CT_LIB_DIR}/scripts/build/binutils/${CT_BINUTILS}.sh" . "${CT_LIB_DIR}/scripts/build/libc/${CT_LIBC}.sh" -. "${CT_LIB_DIR}/scripts/build/cc/${CT_CC}.sh" +. "${CT_LIB_DIR}/scripts/build/cc.sh" . "${CT_LIB_DIR}/scripts/build/debug.sh" . "${CT_LIB_DIR}/scripts/build/test_suite.sh" @@ -165,8 +165,8 @@ CT_PREFIX_DIR="$( "${sed}" -r -e 's:/+:/:g; s:/*$::;' <<<"${CT_PREFIX_DIR}" )" # Put user-supplied flags at the end, so that they take precedence. CT_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_TARGET_CFLAGS}" CT_TARGET_LDFLAGS="${CT_ARCH_TARGET_LDFLAGS} ${CT_TARGET_LDFLAGS}" -CT_CC_CORE_EXTRA_CONFIG_ARRAY=( ${CT_ARCH_CC_CORE_EXTRA_CONFIG} "${CT_CC_CORE_EXTRA_CONFIG_ARRAY[@]}" ) -CT_CC_EXTRA_CONFIG_ARRAY=( ${CT_ARCH_CC_EXTRA_CONFIG} "${CT_CC_EXTRA_CONFIG_ARRAY[@]}" ) +CT_CC_GCC_CORE_EXTRA_CONFIG_ARRAY=( ${CT_ARCH_CC_CORE_EXTRA_CONFIG} "${CT_CC_GCC_CORE_EXTRA_CONFIG_ARRAY[@]}" ) +CT_CC_GCC_EXTRA_CONFIG_ARRAY=( ${CT_ARCH_CC_EXTRA_CONFIG} "${CT_CC_GCC_EXTRA_CONFIG_ARRAY[@]}" ) # Compute the package version string CT_PKGVERSION="crosstool-NG ${CT_VERSION}${CT_TOOLCHAIN_PKGVERSION:+ - ${CT_TOOLCHAIN_PKGVERSION}}" @@ -548,8 +548,8 @@ if [ -z "${CT_RESTART}" ]; then CT_EndStep fi - if [ "${CT_CC_STATIC_LIBSTDCXX}" = "y" ]; then - CT_DoStep DEBUG "Checking that gcc can statically link libstdc++ (CT_CC_STATIC_LIBSTDCXX)" + if [ "${CT_CC_GCC_STATIC_LIBSTDCXX}" = "y" ]; then + CT_DoStep DEBUG "Checking that gcc can statically link libstdc++ (CT_CC_GCC_STATIC_LIBSTDCXX)" CT_DoLog DEBUG "You may need to ensure that libstdc++.a is installed on your system" CT_DoExecLog DEBUG "${CT_HOST}-gcc" ${CT_CFLAGS_FOR_HOST} ${CT_LDFLAGS_FOR_HOST} "${testc}" -static -lstdc++ -o "${gccout}" rm -f "${gccout}" @@ -562,7 +562,7 @@ if [ -z "${CT_RESTART}" ]; then CT_DoLog EXTRA "Installing user-supplied crosstool-NG configuration" CT_DoExecLog ALL mkdir -p "${CT_PREFIX_DIR}/bin" CT_DoExecLog DEBUG install -m 0755 "${CT_LIB_DIR}/scripts/toolchain-config.in" "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ct-ng.config" - CT_DoExecLog DEBUG sed -i -e 's,@@grep@@,"'"${grep}"'",;' "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ct-ng.config" + CT_DoExecLog DEBUG ${sed} -i -e 's,@@grep@@,"'"${grep}"'",;' "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ct-ng.config" bzip2 -c -9 .config >>"${CT_PREFIX_DIR}/bin/${CT_TARGET}-ct-ng.config" CT_DoStep EXTRA "Dumping internal crosstool-NG configuration" diff --git a/scripts/functions b/scripts/functions index adb9f69..3e3440a 100644 --- a/scripts/functions +++ b/scripts/functions @@ -737,7 +737,7 @@ CT_GetFile() { done # Just return error, someone may want to catch and handle the error - # (eg. glibc/eglibc add-ons can be missing). + # (eg. glibc add-ons can be missing). return 1 } @@ -832,18 +832,43 @@ CT_GetSVN() { # Prerequisites: either the server does not require password, # or the user has already taken any action to authenticate to the server. # The cloned tree will *not* be stored in the local tarballs dir! -# Usage: CT_GetGit <basename> <cset> <url> +# cset_or_ref can be a branch or tag, if specified as 'ref=name' +# In this case, 'git ls-remote' is used to get the sha1 and can also +# be used to get a list valid refs (e.g. HEAD, refs/heads/master, refs/tags/v3.3.0) +# Usage: CT_GetGit <basename> <cset_or_ref> <url> <out_cset> CT_GetGit() { local basename="${1}" - local cset="${2}" + local cset_or_ref="${2}" local url="${3}" - local file="${basename}-${cset}.tar.gz" + local _out_cset="${4}" + + local ref=$(echo "${cset_or_ref}" | sed -n 's/^ref=\(.*\)/\1/p') + if [ -n "$ref" ]; then + local matches=$(git ls-remote --exit-code "$url" --refs "${ref}") + local result=$? + CT_TestAndAbort "Failed to find git ref ${ref} at ${url}" "${result}" != "0" + if [ $( echo "$matches" | wc -l) -gt 1 ]; then + CT_DoLog WARN "Ambiguous ref ${ref} at ${url}, using first" + fi + local cset=$(echo "$matches" | head -n1 | cut -c1-6) + CT_DoLog INFO "ref ${ref} at ${url} has cset of ${cset}" + else + local cset=${cset_or_ref} + CT_DoLog INFO "cset ${cset}" + fi + + if [ -n "${_out_cset}" ]; then + eval ${_out_cset}=\${cset} + fi + local dir="${CT_TARBALLS_DIR}/${basename}-${cset}.git" + local file="${basename}-${cset}.tar.gz" local dest="${CT_TARBALLS_DIR}/${file}" local tmp="${CT_TARBALLS_DIR}/${file}.tmp-dl" - # Do we alreadyhave it? + # Do we already have it? if CT_GetLocal "${file}"; then + echo ${cset} return 0 fi # Nope... @@ -877,6 +902,8 @@ CT_GetGit() { CT_SaveLocal "${dest}" CT_DoExecLog ALL rm -rf "${tmp}.tar.gz" "${tmp}.tar" "${tmp}" "${dir}" CT_Popd + echo ${cset} + return 0 else # Woops... CT_DoExecLog ALL rm -rf "${dir}" diff --git a/scripts/gen_in_frags.sh b/scripts/gen_in_frags.sh index 2451495..9c656a8 100755 --- a/scripts/gen_in_frags.sh +++ b/scripts/gen_in_frags.sh @@ -138,6 +138,9 @@ gen_menu() { _entry=$(printf '%s\n' "${entry}" |"${sed}" -r -s -e 's/[-.+]/_/g;') printf 'menuconfig %s_%s\n' "${cfg_prefix}" "${_entry}" printf ' bool\n' + if "${grep}" -E '^## default' ${file} >/dev/null 2>&1; then + "${sed}" -r -e '/^## default ?/!d; s/^## default ?/ default /;' ${file} 2>/dev/null + fi printf ' prompt "%s"\n' "${entry}" "${sed}" -r -e '/^## depends on /!d; s/^## / /;' ${file} 2>/dev/null "${sed}" -r -e '/^## select /!d; s/^## / /;' ${file} 2>/dev/null diff --git a/scripts/populate.in b/scripts/populate.in index 9aa3ee9..8f476e3 100644 --- a/scripts/populate.in +++ b/scripts/populate.in @@ -184,13 +184,13 @@ do_add_lib() { local dir local mode - for dir in lib usr/lib; do + for dir in lib usr/lib usr/lib/gconv; do if [ -e "${dir}/${libname}" ]; then ${CT_PRINTF} " already present\n" return 0 fi done - for dir in lib usr/lib; do + for dir in lib usr/lib usr/lib/gconv; do ${CT_PRINTF} " trying in '%s'" "${dir}" libfile="${CT_SYSROOT_DIR}/${dir}/${libname}" ${CT_PRINTF} ": '%s'\n" "${libfile}" diff --git a/scripts/saveSample.sh.in b/scripts/saveSample.sh.in index 792f033..34e6594 100644 --- a/scripts/saveSample.sh.in +++ b/scripts/saveSample.sh.in @@ -89,8 +89,8 @@ cp .config .defconfig CT_DoAddFileToSample() { source="$1" dest="$2" - inode_s=$(ls -i "${source}" |awk '{ print $1; }') - inode_d=$(ls -i "${dest}" 2>/dev/null |awk '{ print $1; }' || true) + inode_s=$(ls -i "${source}" | ${awk} '{ print $1; }') + inode_d=$(ls -i "${dest}" 2>/dev/null | ${awk} '{ print $1; }' || true) if [ "${inode_s}" != "${inode_d}" ]; then cp "${source}" "${dest}" fi @@ -132,7 +132,7 @@ read -p "Reporter name [${reporter_name}]: " reporter_name read -p "Reporter URL [${reporter_url}]: " reporter_url if [ -n "${reporter_comment}" ]; then echo "Old comment:" - printf "${reporter_comment}\n" |sed -r -e 's/^/ > /;' + printf "${reporter_comment}\n" | ${sed} -r -e 's/^/ > /;' fi echo "Reporter comment (Ctrl-D to finish, '.' to use previous):" reporter_comment=$(cat) diff --git a/scripts/showSamples.sh b/scripts/showSamples.sh index ccb8382..684e118 100755 --- a/scripts/showSamples.sh +++ b/scripts/showSamples.sh @@ -76,7 +76,15 @@ dump_single_sample() { [ -z "${CT_LIBELF}" -a -z "${CT_LIBELF_TARGET}" ] || printf " libelf-%s" "${CT_LIBELF_VERSION}" [ -z "${complibs}" ] || printf "\n" printf " %-*s : %s\n" ${width} "binutils" "binutils-${CT_BINUTILS_VERSION}" - printf " %-*s : %s" ${width} "C compiler" "${CT_CC}-${CT_CC_VERSION} (C" + printf " %-*s :" ${width} "C compilers" + for cc in $(env | ${sed} -n 's/^CT_CC_\(.*\)_VERSION.*/\1/p'); do + cc_variable=CT_CC_${cc}_VERSION + version=${!cc_variable} + compiler=$(echo $cc | ${awk} '{print tolower($0)}') + printf " $compiler-$version" + done + printf "\n" + printf " %-*s : %s" ${width} "Languages" "C" [ "${CT_CC_LANG_CXX}" = "y" ] && printf ",C++" [ "${CT_CC_LANG_FORTRAN}" = "y" ] && printf ",Fortran" [ "${CT_CC_LANG_JAVA}" = "y" ] && printf ",Java" @@ -85,7 +93,7 @@ dump_single_sample() { [ "${CT_CC_LANG_OBJCXX}" = "y" ] && printf ",Objective-C++" [ "${CT_CC_LANG_GOLANG}" = "y" ] && printf ",Go" [ -n "${CT_CC_LANG_OTHERS}" ] && printf ",${CT_CC_LANG_OTHERS}" - printf ")\n" + printf "\n" printf " %-*s : %s (threads: %s)\n" ${width} "C library" "${CT_LIBC}${CT_LIBC_VERSION:+-}${CT_LIBC_VERSION}" "${CT_THREADS}" printf " %-*s :" ${width} "Tools" [ "${CT_TOOL_sstrip}" ] && printf " sstrip" @@ -103,7 +111,7 @@ dump_single_sample() { ;; canadian) printf "| ''" - printf "${sample}" |sed -r -e 's/.*,//' + printf "${sample}" |${sed} -r -e 's/.*,//' printf "'' | ${CT_HOST} " ;; *) ;; @@ -120,8 +128,14 @@ dump_single_sample() { fi fi printf "| ${CT_BINUTILS_VERSION} " - printf "| ''${CT_CC}'' " - printf "| ${CT_CC_VERSION} " + printf "| " + for cc in $(env | ${sed} -n 's/^CT_CC_\(.*\)_VERSION.*/\1/p'); do + cc_variable=CT_CC_${cc}_VERSION + version=${!cc_variable} + compiler=$(echo $cc | ${awk} '{print tolower($0)}') + printf " $compiler-$version" + done + printf " " printf "| ''${CT_LIBC}'' |" if [ "${CT_LIBC}" != "none" ]; then printf " ${CT_LIBC_VERSION} " @@ -149,7 +163,7 @@ dump_single_sample() { fi ) sample_updated="$( git log -n1 --pretty=format:'%ci' "${sample_top}/samples/${sample}" \ - |awk '{ print $1; }' )" + |${awk} '{ print $1; }' )" printf "| ${sample_updated} " echo "|" fi |