ifeq ($(strip $(BR2_HAVE_DOT_CONFIG)),y)
+# cc-option
+# Usage: cflags-y += $(call cc-option, -march=winchip-c6, -march=i586)
+# sets -march=winchip-c6 if supported else falls back to -march=i586
+# without checking the latter.
+cc-option = $(shell if $(TARGET_CC) $(TARGET_CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
+ > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
+
#############################################################
#
# The list of stuff to build for the target toolchain
touch $@
ifeq ($(BR2_PREFER_IMA),y)
-SETSERIAL_CFLAGS=--combine -fwhole-program
+SETSERIAL_CFLAGS=--combine $(CFLAGS_WHOLE_PROGRAM)
endif
$(SETSERIAL_DIR)/.configured: $(SETSERIAL_DIR)/.unpacked
# FIXME -- this is temporary
OPTIMIZE_FOR_CPU=$(ARCH)
+# late binding check to see if the target cc supports -fwhole-program
+CFLAGS_WHOLE_PROGRAM = $(call cc-option,-fwhole-program,)
+
# gcc has a bunch of needed stuff....
include toolchain/gcc/Makefile.in
--- /dev/null
+--- gcc-4.0.4.orig/gcc/Makefile.in 2007-02-12 11:35:43.000000000 +0100
++++ gcc-4.0.4/gcc/Makefile.in 2007-02-12 11:38:04.000000000 +0100
+@@ -2202,7 +2202,7 @@ mips-tdump.o : mips-tdump.c $(CONFIG_H)
+ # FIXME: writing proper dependencies for this is a *LOT* of work.
+ libbackend.o : $(OBJS-common:.o=.c) $(out_file) \
+ insn-config.h insn-flags.h insn-codes.h insn-constants.h \
+- insn-attr.h
++ insn-attr.h gcov-iov.h
+ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) \
+ -DTARGET_NAME=\"$(target_noncanonical)\" \
+ -DLOCALEDIR=\"$(localedir)\" \