summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKoen Kooi <koen@openembedded.org>2008-10-09 21:03:30 +0000
committerKoen Kooi <koen@openembedded.org>2008-10-09 21:03:30 +0000
commit0f4e1f9d799ce8eb98b2aed805a361a61012828b (patch)
tree7aa52bdbd9edd0a83928fa4d3769316e8be78916
parent05a24bde30b8799ad5431b29ba4f35242b3e97b2 (diff)
gcc cross: add 4.3.2+csl2008q3, the latest csl release
* it builds, but needs Khems sysroot and flags patches to work properly
-rw-r--r--packages/gcc/gcc-cross_csl-arm-2008q3.bb26
-rw-r--r--packages/gcc/gcc-csl-arm-2008q3.inc32
-rw-r--r--packages/gcc/gcc-csl-arm-2008q3/.mtn2git_empty0
-rw-r--r--packages/gcc/gcc-csl-arm-2008q3/arm-nolibfloat.patch24
-rw-r--r--packages/gcc/gcc-csl-arm-2008q3/arm-softfloat.patch16
-rw-r--r--packages/gcc/gcc-csl-arm-2008q3/gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch31
-rw-r--r--packages/gcc/gcc-csl-arm-2008q3/gcc-4.3.1-SYSROOT_CFLAGS_FOR_TARGET.patch6691
-rw-r--r--packages/gcc/gcc-csl-arm-2008q3/gcc-flags-for-build.patch279
-rw-r--r--packages/gcc/gcc-csl-arm-2008q3/gcc41-configure.in.patch22
-rw-r--r--packages/gcc/gcc-csl-arm-2008q3/zecke-no-host-includes.patch31
10 files changed, 7152 insertions, 0 deletions
diff --git a/packages/gcc/gcc-cross_csl-arm-2008q3.bb b/packages/gcc/gcc-cross_csl-arm-2008q3.bb
new file mode 100644
index 0000000000..d2a1102776
--- /dev/null
+++ b/packages/gcc/gcc-cross_csl-arm-2008q3.bb
@@ -0,0 +1,26 @@
+PR = "r0"
+
+require gcc-csl-arm-2008q3.inc
+require gcc-cross4.inc
+require gcc-configure-cross.inc
+require gcc-package-cross.inc
+
+SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 "
+
+EXTRA_OECONF += "--disable-multilib --disable-libunwind-exceptions --with-mpfr=${STAGING_DIR_NATIVE}${layout_exec_prefix}"
+
+#We don't want i686 linux ending up in the CFLAGS_FOR_TARGET like this: -isystem/OE/angstrom-tmp/staging/i686-linux/usr/include
+CFLAGS = ""
+CXXFLAGS = ""
+LDFLAGS = ""
+
+# staging-linkage and cross-linkage recipes don't work anymore, so do it by hand for this backwards CSL toolchain
+do_compile_prepend() {
+ ln -sf ${STAGING_DIR_TARGET}${layout_libdir}/crt*.o ${CROSS_DIR}/${TARGET_SYS}/lib/
+ ln -sf ${STAGING_DIR_TARGET}${layout_libdir}/ld-* ${CROSS_DIR}/${TARGET_SYS}/lib/
+ ln -sf ${STAGING_DIR_TARGET}/lib/libc* ${CROSS_DIR}/${TARGET_SYS}/lib/
+ sed -i -e 's:gcc_no_link=yes:gcc_no_link=no:' ${S}/libstdc++-v3/configure
+
+}
+
+ARCH_FLAGS_FOR_TARGET += " -L${STAGING_DIR_TARGET}${layout_libdir} -isystem${STAGING_DIR_TARGET}${layout_includedir}"
diff --git a/packages/gcc/gcc-csl-arm-2008q3.inc b/packages/gcc/gcc-csl-arm-2008q3.inc
new file mode 100644
index 0000000000..8985a7cbff
--- /dev/null
+++ b/packages/gcc/gcc-csl-arm-2008q3.inc
@@ -0,0 +1,32 @@
+require gcc-common.inc
+
+BINV = "4.3.2"
+PV = "4.3.2+csl-arm-2008q3-39"
+
+FILESDIR = "${FILE_DIRNAME}/gcc-csl-arm-2008q3"
+
+SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/arm-none-eabi/arm-2008q3-39-arm-none-eabi.src.tar.bz2 \
+ file://arm-nolibfloat.patch;patch=1 \
+ file://arm-softfloat.patch;patch=1 \
+# file://gcc-4.3.1-SYSROOT_CFLAGS_FOR_TARGET.patch;patch=1 \
+# file://gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch;patch=1 \
+ file://gcc-flags-for-build.patch;patch=1 \
+"
+
+
+S = "${WORKDIR}/gcc-4.3"
+
+do_unpack2() {
+ cd ${WORKDIR}
+ tar -xvjf ./arm-2008q3-39-arm-none-eabi/gcc-2008q3-39.tar.bz2
+}
+
+# Language Overrides
+FORTRAN = ""
+#FORTRAN_linux-gnueabi = ",fortran"
+#JAVA = ",java"
+
+EXTRA_OECONF_BASE = "--enable-libssp --disable-bootstrap --disable-libgomp --disable-libmudflap"
+ARM_INSTRUCTION_SET = "arm"
+
+addtask unpack2 after do_unpack before do_patch
diff --git a/packages/gcc/gcc-csl-arm-2008q3/.mtn2git_empty b/packages/gcc/gcc-csl-arm-2008q3/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/gcc/gcc-csl-arm-2008q3/.mtn2git_empty
diff --git a/packages/gcc/gcc-csl-arm-2008q3/arm-nolibfloat.patch b/packages/gcc/gcc-csl-arm-2008q3/arm-nolibfloat.patch
new file mode 100644
index 0000000000..c4897c0330
--- /dev/null
+++ b/packages/gcc/gcc-csl-arm-2008q3/arm-nolibfloat.patch
@@ -0,0 +1,24 @@
+# Dimitry Andric <dimitry@andric.com>, 2004-05-01
+#
+# * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed
+# anymore. (The required functions are now in libgcc.)
+#
+# Fixes errors like
+# arm-softfloat-linux-gnu/3.4.0/../../../../arm-softfloat-linux-gnu/bin/ld: cannot find -lfloat
+# collect2: ld returned 1 exit status
+# make[2]: *** [arm-softfloat-linux-gnu/gcc-3.4.0-glibc-2.3.2/build-glibc/iconvdata/ISO8859-1.so] Error 1
+# when building glibc-2.3.3 with gcc-3.4.0 for arm-softfloat
+
+Index: gcc-4.0.2/gcc/config/arm/linux-elf.h
+===================================================================
+--- gcc-4.0.2.orig/gcc/config/arm/linux-elf.h 2005-03-04 16:14:01.000000000 +0000
++++ gcc-4.0.2/gcc/config/arm/linux-elf.h 2005-11-11 18:02:54.000000000 +0000
+@@ -56,7 +56,7 @@
+ %{shared:-lc} \
+ %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
+
+-#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"
++#define LIBGCC_SPEC "-lgcc"
+
+ /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add
+ the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
diff --git a/packages/gcc/gcc-csl-arm-2008q3/arm-softfloat.patch b/packages/gcc/gcc-csl-arm-2008q3/arm-softfloat.patch
new file mode 100644
index 0000000000..5e1edd9208
--- /dev/null
+++ b/packages/gcc/gcc-csl-arm-2008q3/arm-softfloat.patch
@@ -0,0 +1,16 @@
+Index: gcc-4.0.2/gcc/config/arm/t-linux
+===================================================================
+--- gcc-4.0.2.orig/gcc/config/arm/t-linux 2004-05-15 12:41:35.000000000 +0000
++++ gcc-4.0.2/gcc/config/arm/t-linux 2005-11-11 16:07:53.000000000 +0000
+@@ -4,7 +4,10 @@
+ LIBGCC2_DEBUG_CFLAGS = -g0
+
+ LIB1ASMSRC = arm/lib1funcs.asm
+-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx
++LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
++ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
++ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
++ _fixsfsi _fixunssfsi _floatdidf _floatdisf _floatundisf _floatundidf
+
+ # MULTILIB_OPTIONS = mhard-float/msoft-float
+ # MULTILIB_DIRNAMES = hard-float soft-float
diff --git a/packages/gcc/gcc-csl-arm-2008q3/gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch b/packages/gcc/gcc-csl-arm-2008q3/gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch
new file mode 100644
index 0000000000..f33e6c1ea6
--- /dev/null
+++ b/packages/gcc/gcc-csl-arm-2008q3/gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch
@@ -0,0 +1,31 @@
+---
+ configure | 2 +-
+ configure.ac | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+Index: gcc-4.3.1/configure.ac
+===================================================================
+--- gcc-4.3.1.orig/configure.ac 2008-07-21 12:29:18.000000000 -0700
++++ gcc-4.3.1/configure.ac 2008-07-21 12:29:35.000000000 -0700
+@@ -2352,7 +2352,7 @@ fi
+ # for target_alias and gcc doesn't manage it consistently.
+ target_configargs="--cache-file=./config.cache ${target_configargs}"
+
+-FLAGS_FOR_TARGET=
++FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET"
+ case " $target_configdirs " in
+ *" newlib "*)
+ case " $target_configargs " in
+Index: gcc-4.3.1/configure
+===================================================================
+--- gcc-4.3.1.orig/configure 2008-07-21 12:29:48.000000000 -0700
++++ gcc-4.3.1/configure 2008-07-21 12:29:59.000000000 -0700
+@@ -5841,7 +5841,7 @@ fi
+ # for target_alias and gcc doesn't manage it consistently.
+ target_configargs="--cache-file=./config.cache ${target_configargs}"
+
+-FLAGS_FOR_TARGET=
++FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET"
+ case " $target_configdirs " in
+ *" newlib "*)
+ case " $target_configargs " in
diff --git a/packages/gcc/gcc-csl-arm-2008q3/gcc-4.3.1-SYSROOT_CFLAGS_FOR_TARGET.patch b/packages/gcc/gcc-csl-arm-2008q3/gcc-4.3.1-SYSROOT_CFLAGS_FOR_TARGET.patch
new file mode 100644
index 0000000000..aba1e2df69
--- /dev/null
+++ b/packages/gcc/gcc-csl-arm-2008q3/gcc-4.3.1-SYSROOT_CFLAGS_FOR_TARGET.patch
@@ -0,0 +1,6691 @@
+Before committing, I noticed that PR/32161 was marked as a dup of PR/32009, but my previous patch did not fix it.
+
+This alternative patch is better because it lets you just use CFLAGS_FOR_TARGET to set the compilation flags for libgcc. Since bootstrapped target libraries are never compiled with the native compiler, it makes little sense to use different flags for stage1 and later stages. And it also makes little sense to use a different variable than CFLAGS_FOR_TARGET.
+
+Other changes I had to do include:
+
+- moving the creation of default CFLAGS_FOR_TARGET from Makefile.am to configure.ac, because otherwise the BOOT_CFLAGS are substituted into CFLAGS_FOR_TARGET (which is "-O2 -g $(CFLAGS)") via $(CFLAGS). It is also cleaner this way though.
+
+- passing the right CFLAGS to configure scripts as exported environment variables
+
+I also stopped passing LIBCFLAGS to configure scripts since they are unused in the whole src tree. And I updated the documentation as H-P reminded me to do.
+
+Bootstrapped/regtested i686-pc-linux-gnu, will commit to 4.4 shortly. Ok for 4.3?
+
+Paolo
+
+2008-02-19 Paolo Bonzini <bonzini@gnu.org>
+
+ PR bootstrap/32009
+ PR bootstrap/32161
+
+ * configure.ac (CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET): Compute here.
+ * configure: Regenerate.
+
+ * Makefile.def: Define stage_libcflags for all bootstrap stages.
+ * Makefile.tpl (BOOT_LIBCFLAGS, STAGE2_LIBCFLAGS, STAGE3_LIBCFLAGS,
+ STAGE4_LIBCFLAGS): New.
+ (CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET): Subst from autoconf, without
+ $(SYSROOT_CFLAGS_FOR_TARGET) and $(DEBUG_PREFIX_CFLAGS_FOR_TARGET).
+ (BASE_TARGET_EXPORTS): Append them here to C{,XX}FLAGS.
+ (EXTRA_TARGET_FLAGS): Append them here to {LIB,}C{,XX}FLAGS.
+ (configure-stage[+id+]-[+prefix+][+module+]): Pass stage_libcflags
+ for target modules. Don't export LIBCFLAGS.
+ (all-stage[+id+]-[+prefix+][+module+]): Pass stage_libcflags; pass
+ $(BASE_FLAGS_TO_PASS) where [+args+] was passed, and [+args+] after
+ the overridden CFLAGS_FOR_TARGET and CXXFLAGS_FOR_TARGET.
+ (invocations of `all'): Replace $(TARGET_FLAGS_TO_PASS) with
+ $(EXTRA_TARGET_FLAGS), $(FLAGS_TO_PASS) with $(EXTRA_HOST_FLAGS).
+ * Makefile.in: Regenerate.
+
+config:
+2008-02-19 Paolo Bonzini <bonzini@gnu.org>
+
+ PR bootstrap/32009
+ * mh-ppc-darwin (BOOT_CFLAGS): Reenable.
+
+gcc:
+2008-02-19 Paolo Bonzini <bonzini@gnu.org>
+
+ PR bootstrap/32009
+ * doc/install.texi: Correct references to CFLAGS, replacing them
+ with BOOT_CFLAGS. Document flags used during bootstrap for
+ target libraries.
+
+
+---
+ Makefile.def | 25
+ Makefile.in | 1845 ++++++++++++++++++++++++++++++-------------------
+ Makefile.tpl | 91 +-
+ config/mh-ppc-darwin | 3
+ configure | 36
+ configure.ac | 32
+ gcc/Makefile.in | 2
+ gcc/configure | 6
+ gcc/configure.ac | 3
+ gcc/doc/install.texi | 56 -
+ libiberty/Makefile.in | 162 ++--
+ libiberty/configure | 46 -
+ libiberty/configure.ac | 43 -
+ 13 files changed, 1454 insertions(+), 896 deletions(-)
+
+Index: gcc-4.3.2/configure.ac
+===================================================================
+--- gcc-4.3.2.orig/configure.ac 2008-02-01 19:29:30.000000000 -0800
++++ gcc-4.3.2/configure.ac 2008-08-28 18:18:37.000000000 -0700
+@@ -1667,6 +1667,38 @@
+ [DEBUG_PREFIX_CFLAGS_FOR_TARGET=])
+ AC_SUBST(DEBUG_PREFIX_CFLAGS_FOR_TARGET)
+
++# During gcc bootstrap, if we use some random cc for stage1 then CFLAGS
++# might be empty or "-g". We don't require a C++ compiler, so CXXFLAGS
++# might also be empty (or "-g", if a non-GCC C++ compiler is in the path).
++# We want to ensure that TARGET libraries (which we know are built with
++# gcc) are built with "-O2 -g", so include those options when setting
++# CFLAGS_FOR_TARGET and CXXFLAGS_FOR_TARGET.
++if test "x$CFLAGS_FOR_TARGET" = x; then
++ CFLAGS_FOR_TARGET=$CFLAGS
++ case " $CFLAGS " in
++ *" -O2 "*) ;;
++ *) CFLAGS_FOR_TARGET="-O2 $CFLAGS" ;;
++ esac
++ case " $CFLAGS " in
++ *" -g "* | *" -g3 "*) ;;
++ *) CFLAGS_FOR_TARGET="-g $CFLAGS" ;;
++ esac
++fi
++AC_SUBST(CFLAGS_FOR_TARGET)
++
++if test "x$CXXFLAGS_FOR_TARGET" = x; then
++ CXXFLAGS_FOR_TARGET=$CXXFLAGS
++ case " $CXXFLAGS " in
++ *" -O2 "*) ;;
++ *) CXXFLAGS_FOR_TARGET="-O2 $CXXFLAGS" ;;
++ esac
++ case " $CXXFLAGS " in
++ *" -g "* | *" -g3 "*) ;;
++ *) CXXFLAGS_FOR_TARGET="-g $CXXFLAGS" ;;
++ esac
++fi
++AC_SUBST(CXXFLAGS_FOR_TARGET)
++
+ # Handle --with-headers=XXX. If the value is not "yes", the contents of
+ # the named directory are copied to $(tooldir)/sys-include.
+ if test x"${with_headers}" != x && test x"${with_headers}" != xno ; then
+Index: gcc-4.3.2/Makefile.def
+===================================================================
+--- gcc-4.3.2.orig/Makefile.def 2007-10-23 08:53:18.000000000 -0700
++++ gcc-4.3.2/Makefile.def 2008-08-28 18:18:37.000000000 -0700
+@@ -214,6 +214,7 @@
+ flags_to_pass = { flag= INSTALL_DATA ; };
+ flags_to_pass = { flag= INSTALL_PROGRAM ; };
+ flags_to_pass = { flag= INSTALL_SCRIPT ; };
++flags_to_pass = { flag= LDFLAGS_FOR_BUILD ; };
+ flags_to_pass = { flag= LEX ; };
+ flags_to_pass = { flag= M4 ; };
+ flags_to_pass = { flag= MAKE ; };
+@@ -511,43 +512,51 @@
+ // compiler probably has never heard of them.
+ stage_configure_flags='--disable-intermodule $(STAGE1_CHECKING) \
+ --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"' ;
+- stage_cflags='$(STAGE1_CFLAGS)' ; };
++ stage_cflags='$(STAGE1_CFLAGS)' ;
++ stage_libcflags='$(STAGE1_LIBCFLAGS)' ; };
+ bootstrap_stage = {
+ id=2 ; prev=1 ;
+ bootstrap_target=bootstrap2 ;
+ stage_configure_flags="@stage2_werror_flag@" ;
+- stage_cflags="$(STAGE2_CFLAGS)" ; };
++ stage_cflags="$(STAGE2_CFLAGS)" ;
++ stage_libcflags="$(STAGE2_LIBCFLAGS)" ; };
+ bootstrap_stage = {
+ id=b2g0 ; prev=1 ;
+ bootstrap_target=bootstrap2-debug ;
+ stage_configure_flags="@stage2_werror_flag@" ;
+- stage_cflags="$(STAGE2_CFLAGS) -g0" ; };
++ stage_cflags="$(STAGE2_CFLAGS) -g0" ;
++ stage_libcflags="$(STAGE2_LIBCFLAGS) -g0" ; };
+ bootstrap_stage = {
+ id=3 ; prev=2 ; lean=1 ;
+ compare_target=compare ;
+ bootstrap_target=bootstrap ;
+ cleanstrap_target=cleanstrap ;
+ stage_configure_flags="@stage2_werror_flag@" ;
+- stage_cflags="$(STAGE3_CFLAGS)" ; };
++ stage_cflags="$(STAGE3_CFLAGS)" ;
++ stage_libcflags="$(STAGE3_LIBCFLAGS)" ; };
+ bootstrap_stage = {
+ id=b3g2 ; prev=b2g0 ; lean=1 ;
+ compare_target=compare-debug ;
+ bootstrap_target=bootstrap-debug ;
+ cleanstrap_target=cleanstrap-debug ;
+ stage_configure_flags="@stage2_werror_flag@" ;
+- stage_cflags="$(STAGE3_CFLAGS) -g2" ; };
++ stage_cflags="$(STAGE3_CFLAGS) -g2" ;
++ stage_libcflags="$(STAGE3_LIBCFLAGS) -g2" ; };
+ bootstrap_stage = {
+ id=4 ; prev=3 ; lean=2 ;
+ compare_target=compare3 ;
+ bootstrap_target=bootstrap4 ;
+ stage_configure_flags="@stage2_werror_flag@" ;
+- stage_cflags="$(STAGE4_CFLAGS)" ; };
++ stage_cflags="$(STAGE4_CFLAGS)" ;
++ stage_libcflags="$(STAGE4_CFLAGS)" ; };
+ bootstrap_stage = {
+ id=profile ; prev=1 ;
+ stage_configure_flags="@stage2_werror_flag@" ;
+- stage_cflags='$(STAGE2_CFLAGS) -fprofile-generate' ; };
++ stage_cflags='$(STAGE2_CFLAGS) -fprofile-generate' ;
++ stage_libcflags='$(STAGE2_LIBCFLAGS) -fprofile-generate' ; };
+ bootstrap_stage = {
+ id=feedback ; prev=profile ;
+ bootstrap_target=profiledbootstrap ;
+ stage_configure_flags="@stage2_werror_flag@" ;
+- stage_cflags='$(STAGE3_CFLAGS) -fprofile-use' ; };
++ stage_cflags='$(STAGE3_CFLAGS) -fprofile-use' ;
++ stage_libcflags='$(STAGE3_LIBCFLAGS) -fprofile-use' ; };
+Index: gcc-4.3.2/Makefile.tpl
+===================================================================
+--- gcc-4.3.2.orig/Makefile.tpl 2008-08-28 18:05:25.000000000 -0700
++++ gcc-4.3.2/Makefile.tpl 2008-08-28 18:18:37.000000000 -0700
+@@ -23,6 +23,14 @@
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ #
+
++# First, test for a proper version of make, but only where one is required.
++
++@if gcc
++ifeq (,$(.VARIABLES)) # The variable .VARIABLES, new with 3.80, is never empty.
++$(error GNU make version 3.80 or newer is required.)
++endif
++@endif gcc
++
+ # -------------------------------
+ # Standard Autoconf-set variables
+ # -------------------------------
+@@ -139,6 +147,13 @@
+ WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \
+ WINDMC="$(WINDMC_FOR_BUILD)"; export WINDMC;
+
++# These variables must be set on the make command line for directories
++# built for the build system to override those in BASE_FLAGS_TO_PASSS.
++EXTRA_BUILD_FLAGS = \
++ CFLAGS="$(CFLAGS_FOR_BUILD)" \
++ LDFLAGS="$(LDFLAGS_FOR_BUILD)" \
++ LIBCFLAGS=""
++
+ # This is the list of directories to built for the host system.
+ SUBDIRS = @configdirs@
+ # This is set by the configure script to the arguments to use when configuring
+@@ -153,6 +168,7 @@
+ HOST_EXPORTS = \
+ $(BASE_EXPORTS) \
+ CC="$(CC)"; export CC; \
++ ADA_CFLAGS="$(ADA_CFLAGS)"; export ADA_CFLAGS; \
+ CFLAGS="$(CFLAGS)"; export CFLAGS; \
+ CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ CXX="$(CXX)"; export CXX; \
+@@ -207,10 +223,10 @@
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
++ CFLAGS="$(CFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
++ CXXFLAGS="$(CXXFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ GFORTRAN="$(GFORTRAN_FOR_TARGET)"; export GFORTRAN; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+@@ -323,7 +339,6 @@
+ LIBCFLAGS = $(CFLAGS)
+ CXXFLAGS = @CXXFLAGS@
+ LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
+-PICFLAG =
+
+ # Only build the C compiler for stage1, because that is the only one that
+ # we can guarantee will build with the native compiler, and also it is the
+@@ -331,14 +346,19 @@
+ # MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
+ # overrideable (for a bootstrap build stage1 also builds gcc.info).
+
+-STAGE1_CFLAGS=@stage1_cflags@
+ STAGE1_CHECKING=@stage1_checking@
+ STAGE1_LANGUAGES=@stage1_languages@
+
++STAGE1_CFLAGS=@stage1_cflags@
+ STAGE2_CFLAGS=$(BOOT_CFLAGS)
+ STAGE3_CFLAGS=$(BOOT_CFLAGS)
+ STAGE4_CFLAGS=$(BOOT_CFLAGS)
+
++STAGE1_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
++STAGE2_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
++STAGE3_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
++STAGE4_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
++
+ do-compare = @do_compare@
+ do-compare3 = $(do-compare)
+ do-compare-debug = $(SHELL) $(srcdir)/contrib/compare-debug $$f1 $$f2
+@@ -377,22 +397,14 @@
+ COMPILER_LD_FOR_TARGET=@COMPILER_LD_FOR_TARGET@
+ COMPILER_NM_FOR_TARGET=@COMPILER_NM_FOR_TARGET@
+
+-# During gcc bootstrap, if we use some random cc for stage1 then CFLAGS
+-# might be empty or "-g". We don't require a C++ compiler, so CXXFLAGS
+-# might also be empty (or "-g", if a non-GCC C++ compiler is in the path).
+-# We want to ensure that TARGET libraries (which we know are built with
+-# gcc) are built with "-O2 -g", so prepend those options when setting
+-# CFLAGS_FOR_TARGET and CXXFLAGS_FOR_TARGET.
+-CFLAGS_FOR_TARGET = -O2 -g $(CFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) \
+- $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)
++CFLAGS_FOR_TARGET = @CFLAGS_FOR_TARGET@
++CXXFLAGS_FOR_TARGET = @CXXFLAGS_FOR_TARGET@
+ SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@
+ DEBUG_PREFIX_CFLAGS_FOR_TARGET = @DEBUG_PREFIX_CFLAGS_FOR_TARGET@
+-CXXFLAGS_FOR_TARGET = -O2 -g $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) \
+- $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)
++
+ LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
+ LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
+-LDFLAGS_FOR_TARGET = @LDFLAGS@
+-PICFLAG_FOR_TARGET =
++LDFLAGS_FOR_TARGET = @LDFLAGS@
+
+ # ------------------------------------
+ # Miscellaneous targets and flag lists
+@@ -492,19 +504,20 @@
+ # Flags to pass down to makes which are built with the target environment.
+ # The double $ decreases the length of the command line; those variables
+ # are set in BASE_FLAGS_TO_PASS, and the sub-make will expand them. The
+-# COMPILER_ prefixed variables are not passed down so we expand them here.
++# *_CFLAGS_FOR_TARGET variables are not passed down and most often empty,
++# so we expand them here.
+ EXTRA_TARGET_FLAGS = \
+ 'AR=$$(AR_FOR_TARGET)' \
+ 'AS=$(COMPILER_AS_FOR_TARGET)' \
+ 'CC=$$(CC_FOR_TARGET)' \
+- 'CFLAGS=$$(CFLAGS_FOR_TARGET)' \
++ 'CFLAGS=$$(CFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
+ 'CXX=$$(CXX_FOR_TARGET)' \
+- 'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET)' \
++ 'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
+ 'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \
+ 'LD=$(COMPILER_LD_FOR_TARGET)' \
+ 'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \
+- 'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \
+- 'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET)' \
++ 'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
++ 'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
+ 'NM=$(COMPILER_NM_FOR_TARGET)' \
+ 'OBJDUMP=$$(OBJDUMP_FOR_TARGET)' \
+ 'RANLIB=$$(RANLIB_FOR_TARGET)' \
+@@ -852,9 +865,11 @@
+ fi; \
+ [+ ENDIF check_multilibs +]test ! -f [+subdir+]/[+module+]/Makefile || exit 0; \
+ [+exports+][+ IF prev +] \
+- [+poststage1_exports+][+ ENDIF prev +] \
++ [+poststage1_exports+][+ ENDIF prev +] [+ IF prefix +] \
++ CFLAGS="[+stage_libcflags+] $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)"; export CFLAGS; \
++ CXXFLAGS="[+stage_libcflags+] $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)"; export CXXFLAGS; [+ ELSE +] \
+ CFLAGS="[+stage_cflags+]"; export CFLAGS; \
+- LIBCFLAGS="[+stage_cflags+]"; export LIBCFLAGS; \
++ CXXFLAGS="[+stage_cflags+]"; export CXXFLAGS; [+ ENDIF +] \
+ echo Configuring stage [+id+] in [+subdir+]/[+module+] ; \
+ $(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
+ cd [+subdir+]/[+module+] || exit 1; \
+@@ -891,7 +906,8 @@
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ [+exports+] \
+ (cd [+subdir+]/[+module+] && \
+- $(MAKE) [+args+] [+extra_make_flags+] $(TARGET-[+prefix+][+module+]))
++ $(MAKE) $(BASE_FLAGS_TO_PASS) [+args+] [+extra_make_flags+] \
++ $(TARGET-[+prefix+][+module+]))
+ @endif [+prefix+][+module+]
+
+ [+ IF bootstrap +]
+@@ -911,8 +927,11 @@
+ [+exports+][+ IF prev +] \
+ [+poststage1_exports+][+ ENDIF prev +] \
+ cd [+subdir+]/[+module+] && \
+- $(MAKE) [+args+] \
+- CFLAGS="[+stage_cflags+]" LIBCFLAGS="[+stage_cflags+]" [+
++ $(MAKE) $(BASE_FLAGS_TO_PASS) \
++ CFLAGS="[+stage_cflags+]" CXXFLAGS="[+stage_cflags+]" \
++ LIBCFLAGS="[+stage_libcflags+]" \
++ CFLAGS_FOR_TARGET="[+stage_libcflags+]" \
++ CXXFLAGS_FOR_TARGET="[+stage_libcflags+]" [+args+] [+
+ IF prev +][+poststage1_args+][+ ENDIF prev
+ +] [+extra_make_flags+] \
+ $(TARGET-stage[+id+]-[+prefix+][+module+])
+@@ -945,7 +964,8 @@
+ target_alias=(get "target" "${target_alias}")
+ args="$(BUILD_CONFIGARGS)" no-config-site=true +]
+
+-[+ all prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)" +]
++[+ all prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)"
++ args="$(EXTRA_BUILD_FLAGS)" +]
+ [+ ENDFOR build_module +]
+
+ # --------------------------------------
+@@ -962,7 +982,7 @@
+ [+ all prefix="" subdir="$(HOST_SUBDIR)"
+ exports="$(HOST_EXPORTS)"
+ poststage1_exports="$(POSTSTAGE1_HOST_EXPORTS)"
+- args="$(FLAGS_TO_PASS)"
++ args="$(EXTRA_HOST_FLAGS)"
+ poststage1_args="$(POSTSTAGE1_FLAGS_TO_PASS)" +]
+
+ .PHONY: check-[+module+] maybe-check-[+module+]
+@@ -1060,7 +1080,7 @@
+
+ [+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
+ exports="$(RAW_CXX_TARGET_EXPORTS)"
+- args="$(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'" +]
++ args="$(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'" +]
+ [+ ELSE +]
+ [+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
+ check_multilibs=true
+@@ -1071,7 +1091,7 @@
+
+ [+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
+ exports="$(NORMAL_TARGET_EXPORTS)"
+- args="$(TARGET_FLAGS_TO_PASS)" +]
++ args="$(EXTRA_TARGET_FLAGS)" +]
+ [+ ENDIF +]
+
+ .PHONY: check-target-[+module+] maybe-check-target-[+module+]
+@@ -1301,7 +1321,7 @@
+
+ # Bubble a bug fix through all the stages up to stage [+id+]. They are
+ # remade, but not reconfigured. The next stage (if any) will not be
+-# reconfigured as well.
++# reconfigured either.
+ .PHONY: stage[+id+]-bubble
+ stage[+id+]-bubble:: [+ IF prev +]stage[+prev+]-bubble[+ ENDIF +]
+ @r=`${PWD_COMMAND}`; export r; \
+@@ -1440,11 +1460,11 @@
+ @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
+
+ .PHONY: restrap
+-restrap:
++restrap::
+ @: $(MAKE); $(stage)
+ rm -rf stage1-$(TARGET_SUBDIR) [+ FOR bootstrap-stage +][+ IF prev
+ +]stage[+id+]-* [+ ENDIF prev +][+ ENDFOR bootstrap-stage +]
+- $(MAKE) $(RECURSE_FLAGS_TO_PASS) all
++restrap:: all
+ @endif gcc-bootstrap
+
+ # --------------------------------------
+@@ -1475,7 +1495,7 @@
+
+ [+ ;; These Scheme functions build the bulk of the dependencies.
+ ;; dep-target builds a string like "maybe-all-MODULE_KIND-gcc",
+- ;; where "maybe-" is only included if HARD is true, and all-gcc
++ ;; where "maybe-" is only included if HARD is not true, and all-gcc
+ ;; is taken from VAR-NAME.
+ (define dep-target (lambda (module-kind var-name hard)
+ (string-append
+@@ -1633,7 +1653,8 @@
+
+ # Rebuilding configure.
+ AUTOCONF = autoconf
+-$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4
++$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \
++ $(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4
+ cd $(srcdir) && $(AUTOCONF)
+
+ # ------------------------------
+Index: gcc-4.3.2/config/mh-ppc-darwin
+===================================================================
+--- gcc-4.3.2.orig/config/mh-ppc-darwin 2007-05-23 07:26:31.000000000 -0700
++++ gcc-4.3.2/config/mh-ppc-darwin 2008-08-28 18:18:37.000000000 -0700
+@@ -2,5 +2,4 @@
+ # position-independent-code -- the usual default on Darwin. This fix speeds
+ # compiles by 3-5%.
+
+-# Broken because of PR32009.
+-# BOOT_CFLAGS=-g -O2 -mdynamic-no-pic
++BOOT_CFLAGS=-g -O2 -mdynamic-no-pic
+Index: gcc-4.3.2/gcc/doc/install.texi
+===================================================================
+--- gcc-4.3.2.orig/gcc/doc/install.texi 2008-06-18 22:59:30.000000000 -0700
++++ gcc-4.3.2/gcc/doc/install.texi 2008-08-28 18:18:37.000000000 -0700
+@@ -1778,33 +1778,35 @@
+ stage2 of the 3-stage bootstrap of the compiler are deleted as
+ soon as they are no longer needed.
+
+-If you want to save additional space during the bootstrap and in
+-the final installation as well, you can build the compiler binaries
+-without debugging information as in the following example. This will save
+-roughly 40% of disk space both for the bootstrap and the final installation.
+-(Libraries will still contain debugging information.)
+-
+-@smallexample
+- make CFLAGS='-O' LIBCFLAGS='-g -O2' \
+- LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap
+-@end smallexample
+-
+-If you wish to use non-default GCC flags when compiling the stage2 and
+-stage3 compilers, set @code{BOOT_CFLAGS} on the command line when doing
+-@samp{make}. Non-default optimization flags are less well
+-tested here than the default of @samp{-g -O2}, but should still work.
+-In a few cases, you may find that you need to specify special flags such
+-as @option{-msoft-float} here to complete the bootstrap; or, if the
+-native compiler miscompiles the stage1 compiler, you may need to work
+-around this, by choosing @code{BOOT_CFLAGS} to avoid the parts of the
+-stage1 compiler that were miscompiled, or by using @samp{make
++If you wish to use non-default GCC flags when compiling the stage2
++and stage3 compilers, set @code{BOOT_CFLAGS} on the command line when
++doing @samp{make}. For example, if you want to save additional space
++during the bootstrap and in the final installation as well, you can
++build the compiler binaries without debugging information as in the
++following example. This will save roughly 40% of disk space both for
++the bootstrap and the final installation. (Libraries will still contain
++debugging information.)
++
++@smallexample
++ make BOOT_CFLAGS='-O' bootstrap
++@end smallexample
++
++You can place non-default optimization flags into @code{BOOT_CFLAGS}; they
++are less well tested here than the default of @samp{-g -O2}, but should
++still work. In a few cases, you may find that you need to specify special
++flags such as @option{-msoft-float} here to complete the bootstrap; or,
++if the native compiler miscompiles the stage1 compiler, you may need
++to work around this, by choosing @code{BOOT_CFLAGS} to avoid the parts
++of the stage1 compiler that were miscompiled, or by using @samp{make
+ bootstrap4} to increase the number of stages of bootstrap.
+
+-Note that using non-standard @code{CFLAGS} can cause bootstrap to fail
+-if these trigger a warning with the new compiler. For example using
+-@samp{-O2 -g -mcpu=i686} on @code{i686-pc-linux-gnu} will cause bootstrap
+-failure as @option{-mcpu=} is deprecated in 3.4.0 and above.
+-
++@code{BOOT_CFLAGS} does not apply to bootstrapped target libraries.
++Since these are always compiled with the compiler currently being
++bootstrapped, you can use @code{CFLAGS_FOR_TARGET} to modify their
++compilation flags, as for non-bootstrapped target libraries.
++Again, if the native compiler miscompiles the stage1 compiler, you may
++need to work around this by avoiding non-working parts of the stage1
++compiler. Use @code{STAGE1_LIBCFLAGS} to this end.
+
+ If you used the flag @option{--enable-languages=@dots{}} to restrict
+ the compilers to be built, only those you've actually enabled will be
+@@ -2695,8 +2697,8 @@
+ a few cases and may not work properly.
+
+ @samp{make compare} may fail on old versions of DEC Unix unless you add
+-@option{-save-temps} to @code{CFLAGS}. On these systems, the name of the
+-assembler input file is stored in the object file, and that makes
++@option{-save-temps} to @code{BOOT_CFLAGS}. On these systems, the name
++of the assembler input file is stored in the object file, and that makes
+ comparison fail if it differs between the @code{stage1} and
+ @code{stage2} compilations. The option @option{-save-temps} forces a
+ fixed name to be used for the assembler input file, instead of a
+Index: gcc-4.3.2/Makefile.in
+===================================================================
+--- gcc-4.3.2.orig/Makefile.in 2008-08-28 18:05:25.000000000 -0700
++++ gcc-4.3.2/Makefile.in 2008-08-28 18:18:37.000000000 -0700
+@@ -20,6 +20,14 @@
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ #
+
++# First, test for a proper version of make, but only where one is required.
++
++@if gcc
++ifeq (,$(.VARIABLES)) # The variable .VARIABLES, new with 3.80, is never empty.
++$(error GNU make version 3.80 or newer is required.)
++endif
++@endif gcc
++
+ # -------------------------------
+ # Standard Autoconf-set variables
+ # -------------------------------
+@@ -136,6 +144,13 @@
+ WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \
+ WINDMC="$(WINDMC_FOR_BUILD)"; export WINDMC;
+
++# These variables must be set on the make command line for directories
++# built for the build system to override those in BASE_FLAGS_TO_PASSS.
++EXTRA_BUILD_FLAGS = \
++ CFLAGS="$(CFLAGS_FOR_BUILD)" \
++ LDFLAGS="$(LDFLAGS_FOR_BUILD)" \
++ LIBCFLAGS=""
++
+ # This is the list of directories to built for the host system.
+ SUBDIRS = @configdirs@
+ # This is set by the configure script to the arguments to use when configuring
+@@ -150,6 +165,7 @@
+ HOST_EXPORTS = \
+ $(BASE_EXPORTS) \
+ CC="$(CC)"; export CC; \
++ ADA_CFLAGS="$(ADA_CFLAGS)"; export ADA_CFLAGS; \
+ CFLAGS="$(CFLAGS)"; export CFLAGS; \
+ CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ CXX="$(CXX)"; export CXX; \
+@@ -204,10 +220,10 @@
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
++ CFLAGS="$(CFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
++ CXXFLAGS="$(CXXFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ GFORTRAN="$(GFORTRAN_FOR_TARGET)"; export GFORTRAN; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+@@ -320,7 +336,6 @@
+ LIBCFLAGS = $(CFLAGS)
+ CXXFLAGS = @CXXFLAGS@
+ LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
+-PICFLAG =
+
+ # Only build the C compiler for stage1, because that is the only one that
+ # we can guarantee will build with the native compiler, and also it is the
+@@ -328,14 +343,19 @@
+ # MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
+ # overrideable (for a bootstrap build stage1 also builds gcc.info).
+
+-STAGE1_CFLAGS=@stage1_cflags@
+ STAGE1_CHECKING=@stage1_checking@
+ STAGE1_LANGUAGES=@stage1_languages@
+
++STAGE1_CFLAGS=@stage1_cflags@
+ STAGE2_CFLAGS=$(BOOT_CFLAGS)
+ STAGE3_CFLAGS=$(BOOT_CFLAGS)
+ STAGE4_CFLAGS=$(BOOT_CFLAGS)
+
++STAGE1_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
++STAGE2_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
++STAGE3_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
++STAGE4_LIBCFLAGS=$(CFLAGS_FOR_TARGET)
++
+ do-compare = @do_compare@
+ do-compare3 = $(do-compare)
+ do-compare-debug = $(SHELL) $(srcdir)/contrib/compare-debug $$f1 $$f2
+@@ -374,22 +394,14 @@
+ COMPILER_LD_FOR_TARGET=@COMPILER_LD_FOR_TARGET@
+ COMPILER_NM_FOR_TARGET=@COMPILER_NM_FOR_TARGET@
+
+-# During gcc bootstrap, if we use some random cc for stage1 then CFLAGS
+-# might be empty or "-g". We don't require a C++ compiler, so CXXFLAGS
+-# might also be empty (or "-g", if a non-GCC C++ compiler is in the path).
+-# We want to ensure that TARGET libraries (which we know are built with
+-# gcc) are built with "-O2 -g", so prepend those options when setting
+-# CFLAGS_FOR_TARGET and CXXFLAGS_FOR_TARGET.
+-CFLAGS_FOR_TARGET = -O2 -g $(CFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) \
+- $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)
++CFLAGS_FOR_TARGET = @CFLAGS_FOR_TARGET@
++CXXFLAGS_FOR_TARGET = @CXXFLAGS_FOR_TARGET@
+ SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@
+ DEBUG_PREFIX_CFLAGS_FOR_TARGET = @DEBUG_PREFIX_CFLAGS_FOR_TARGET@
+-CXXFLAGS_FOR_TARGET = -O2 -g $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) \
+- $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)
++
+ LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
+ LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
+-LDFLAGS_FOR_TARGET = @LDFLAGS@
+-PICFLAG_FOR_TARGET =
++LDFLAGS_FOR_TARGET = @LDFLAGS@
+
+ # ------------------------------------
+ # Miscellaneous targets and flag lists
+@@ -496,6 +508,7 @@
+ "INSTALL_DATA=$(INSTALL_DATA)" \
+ "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
+ "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
++ "LDFLAGS_FOR_BUILD=$(LDFLAGS_FOR_BUILD)" \
+ "LEX=$(LEX)" \
+ "M4=$(M4)" \
+ "MAKE=$(MAKE)" \
+@@ -592,19 +605,20 @@
+ # Flags to pass down to makes which are built with the target environment.
+ # The double $ decreases the length of the command line; those variables
+ # are set in BASE_FLAGS_TO_PASS, and the sub-make will expand them. The
+-# COMPILER_ prefixed variables are not passed down so we expand them here.
++# *_CFLAGS_FOR_TARGET variables are not passed down and most often empty,
++# so we expand them here.
+ EXTRA_TARGET_FLAGS = \
+ 'AR=$$(AR_FOR_TARGET)' \
+ 'AS=$(COMPILER_AS_FOR_TARGET)' \
+ 'CC=$$(CC_FOR_TARGET)' \
+- 'CFLAGS=$$(CFLAGS_FOR_TARGET)' \
++ 'CFLAGS=$$(CFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
+ 'CXX=$$(CXX_FOR_TARGET)' \
+- 'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET)' \
++ 'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
+ 'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \
+ 'LD=$(COMPILER_LD_FOR_TARGET)' \
+ 'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \
+- 'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \
+- 'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET)' \
++ 'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
++ 'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGE