Add support for a saving build objects in a separate directory.
Modifications are based on the linux kernel approach and
support two use cases:

  1) Add O= to the make command line
  'make O=/tmp/build all'

  2) Set environement variable BUILD_DIR to point to the desired location
  'export BUILD_DIR=/tmp/build'
  'make'

The second approach can also be used with a MAKEALL script
'export BUILD_DIR=/tmp/build'
'./MAKEALL'

Command line 'O=' setting overrides BUILD_DIR environent variable.

When none of the above methods is used the local build is performed and
the object files are placed in the source directory.
diff --git a/Makefile b/Makefile
index 9bf7c49..fc7b117 100644
--- a/Makefile
+++ b/Makefile
@@ -26,7 +26,7 @@
 SUBLEVEL = 4
 EXTRAVERSION =
 U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
-VERSION_FILE = include/version_autogenerated.h
+VERSION_FILE = $(obj)include/version_autogenerated.h
 
 HOSTARCH := $(shell uname -m | \
 	sed -e s/i.86/i386/ \
@@ -45,14 +45,73 @@
 VENDOR=
 
 #########################################################################
+#
+# U-boot build supports producing a object files to the separate external
+# directory. Two use cases are supported:
+# 
+# 1) Add O= to the make command line
+# 'make O=/tmp/build all'
+#
+# 2) Set environement variable BUILD_DIR to point to the desired location
+# 'export BUILD_DIR=/tmp/build'
+# 'make'
+#
+# The second approach can also be used with a MAKEALL script
+# 'export BUILD_DIR=/tmp/build'
+# './MAKEALL'
+# 
+# Command line 'O=' setting overrides BUILD_DIR environent variable.
+# 
+# When none of the above methods is used the local build is performed and
+# the object files are placed in the source directory.
+# 
 
-TOPDIR	:= $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
-export	TOPDIR
+ifdef O
+ifeq ("$(origin O)", "command line")
+BUILD_DIR := $(O)
+endif
+endif
+
+ifneq ($(BUILD_DIR),)
+saved-output := $(BUILD_DIR)
+BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd)
+$(if $(BUILD_DIR),,$(error output directory "$(saved-output)" does not exist))
+endif # ifneq ($(BUILD_DIR),)
+
+OBJTREE		:= $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
+SRCTREE		:= $(CURDIR)
+TOPDIR		:= $(SRCTREE)
+LNDIR		:= $(OBJTREE)
+export	TOPDIR SRCTREE OBJTREE
+
+MKCONFIG	:= $(SRCTREE)/mkconfig
+export MKCONFIG
+
+ifneq ($(OBJTREE),$(SRCTREE))
+REMOTE_BUILD 	:= 1
+export REMOTE_BUILD
+endif
 
-ifeq (include/config.mk,$(wildcard include/config.mk))
+# $(obj) and (src) are defined in config.mk but here in main Makefile
+# we also need them before config.mk is included which is the case for
+# some targets like unconfig, clean, clobber, distclean, etc.
+ifneq ($(OBJTREE),$(SRCTREE))
+obj := $(OBJTREE)/
+src := $(SRCTREE)/
+else
+obj :=
+src :=
+endif   
+export obj src
+
+#########################################################################
+
+ifeq ($(OBJTREE)/include/config.mk,$(wildcard $(OBJTREE)/include/config.mk))
+
 # load ARCH, BOARD, and CPU configuration
-include include/config.mk
+include $(OBJTREE)/include/config.mk
 export	ARCH CPU BOARD VENDOR SOC
+
 ifndef CROSS_COMPILE
 ifeq ($(HOSTARCH),ppc)
 CROSS_COMPILE =
@@ -96,7 +155,6 @@
 # load other configuration
 include $(TOPDIR)/config.mk
 
-
 #########################################################################
 # U-Boot objects....order is important (i.e. start must be first)
 
@@ -119,6 +177,8 @@
 OBJS += cpu/$(CPU)/cplbhdlr.o	cpu/$(CPU)/cplbmgr.o	cpu/$(CPU)/flush.o
 endif
 
+OBJS := $(addprefix $(obj),$(OBJS))
+
 LIBS  = lib_generic/libgeneric.a
 LIBS += board/$(BOARDDIR)/lib$(BOARD).a
 LIBS += cpu/$(CPU)/lib$(CPU).a
@@ -139,12 +199,13 @@
 LIBS += post/libpost.a post/cpu/libcpu.a
 LIBS += common/libcommon.a
 LIBS += $(BOARDLIBS)
+
+LIBS := $(addprefix $(obj),$(LIBS))
 .PHONY : $(LIBS)
 
 # Add GCC lib
 PLATFORM_LIBS += -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc
 
-
 # The "tools" are needed early, so put this first
 # Don't include stuff already done in $(LIBS)
 SUBDIRS	= tools \
@@ -153,40 +214,46 @@
 	  post/cpu
 .PHONY : $(SUBDIRS)
 
+__OBJS := $(subst $(obj),,$(OBJS))
+__LIBS := $(subst $(obj),,$(LIBS))
+
 #########################################################################
 #########################################################################
 
-ALL = u-boot.srec u-boot.bin System.map
+ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map
 
 all:		$(ALL)
 
-u-boot.hex:	u-boot
+$(obj)u-boot.hex:	$(obj)u-boot
 		$(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@
 
-u-boot.srec:	u-boot
+$(obj)u-boot.srec:	$(obj)u-boot
 		$(OBJCOPY) ${OBJCFLAGS} -O srec $< $@
 
-u-boot.bin:	u-boot
+$(obj)u-boot.bin:	$(obj)u-boot
 		$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
 
-u-boot.img:	u-boot.bin
+$(obj)u-boot.img:	$(obj)u-boot.bin
 		./tools/mkimage -A $(ARCH) -T firmware -C none \
 		-a $(TEXT_BASE) -e 0 \
 		-n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \
 			sed -e 's/"[	 ]*$$/ for $(BOARD) board"/') \
 		-d $< $@
 
-u-boot.dis:	u-boot
+$(obj)u-boot.dis:	$(obj)u-boot
 		$(OBJDUMP) -d $< > $@
 
-u-boot:		depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
+$(obj)u-boot:		depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
 		UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed  -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
-		$(LD) $(LDFLAGS) $$UNDEF_SYM $(OBJS) \
-			--start-group $(LIBS) --end-group $(PLATFORM_LIBS) \
+		cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
+			--start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
 			-Map u-boot.map -o u-boot
 
+$(OBJS):
+		$(MAKE) -C cpu/$(CPU) $(if $(REMOTE_BUILD),$@,$(notdir $@))
+
 $(LIBS):
-		$(MAKE) -C `dirname $@`
+		$(MAKE) -C $(dir $(subst $(obj),,$@))
 
 $(SUBDIRS):
 		$(MAKE) -C $@ all
@@ -199,33 +266,42 @@
 		echo "\"" >> $(VERSION_FILE)
 
 gdbtools:
-		$(MAKE) -C tools/gdb || exit 1
+		$(MAKE) -C tools/gdb all || exit 1
+
+updater:
+		$(MAKE) -C tools/updater all || exit 1
+
+env:
+		$(MAKE) -C tools/env all || exit 1
 
 depend dep:
-		@for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir .depend ; done
+		for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir _depend ; done
 
-tags:
-		ctags -w `find $(SUBDIRS) include \
+tags ctags:
+		ctags -w -o $(OBJTREE)/ctags `find $(SUBDIRS) include \
 				lib_generic board/$(BOARDDIR) cpu/$(CPU) lib_$(ARCH) \
 				fs/cramfs fs/fat fs/fdos fs/jffs2 \
 				net disk rtc dtt drivers drivers/sk98lin common \
 			\( -name CVS -prune \) -o \( -name '*.[ch]' -print \)`
 
 etags:
-		etags -a `find $(SUBDIRS) include \
+		etags -a -o $(OBJTREE)/etags `find $(SUBDIRS) include \
 				lib_generic board/$(BOARDDIR) cpu/$(CPU) lib_$(ARCH) \
 				fs/cramfs fs/fat fs/fdos fs/jffs2 \
 				net disk rtc dtt drivers drivers/sk98lin common \
 			\( -name CVS -prune \) -o \( -name '*.[ch]' -print \)`
 
-System.map:	u-boot
+$(obj)System.map:	$(obj)u-boot
 		@$(NM) $< | \
 		grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
-		sort > System.map
+		sort > $(obj)System.map
 
 #########################################################################
 else
-all install u-boot u-boot.srec depend dep:
+all $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin \
+$(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot \
+$(SUBDIRS) version gdbtools updater env depend \
+dep tags ctags etags $(obj)System.map:
 	@echo "System not configured - see README" >&2
 	@ exit 1
 endif
@@ -233,7 +309,7 @@
 #########################################################################
 
 unconfig:
-	@rm -f include/config.h include/config.mk board/*/config.tmp
+	@rm -f $(obj)include/config.h $(obj)include/config.mk $(obj)board/*/config.tmp
 
 #========================================================================
 # PowerPC
@@ -244,29 +320,29 @@
 #########################################################################
 
 canmb_config:	unconfig
-	@./mkconfig -a canmb ppc mpc5xxx canmb
+	@$(MKCONFIG) -a canmb ppc mpc5xxx canmb
 
 cmi_mpc5xx_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc5xx cmi
+	@$(MKCONFIG) $(@:_config=) ppc mpc5xx cmi
 
 PATI_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc5xx pati mpl
+	@$(MKCONFIG) $(@:_config=) ppc mpc5xx pati mpl
 
 #########################################################################
 ## MPC5xxx Systems
 #########################################################################
 
 aev_config: unconfig
-	@./mkconfig -a aev ppc mpc5xxx tqm5200
+	@$(MKCONFIG) -a aev ppc mpc5xxx tqm5200
 
 BC3450_config:	unconfig
-	@./mkconfig -a BC3450 ppc mpc5xxx bc3450
+	@$(MKCONFIG) -a BC3450 ppc mpc5xxx bc3450
 
 cpci5200_config:  unconfig
-	@./mkconfig -a cpci5200  ppc mpc5xxx cpci5200 esd
+	@$(MKCONFIG) -a cpci5200  ppc mpc5xxx cpci5200 esd
 
 hmi1001_config:         unconfig
-	@./mkconfig hmi1001 ppc mpc5xxx hmi1001
+	@$(MKCONFIG) hmi1001 ppc mpc5xxx hmi1001
 
 Lite5200_config				\
 Lite5200_LOWBOOT_config			\
@@ -278,49 +354,53 @@
 icecube_5200_DDR_LOWBOOT_config 	\
 icecube_5200_DDR_LOWBOOT08_config	\
 icecube_5100_config:			unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@mkdir -p $(obj)board/icecube
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring LOWBOOT_,$@)" ] || \
 		{ if [ "$(findstring DDR,$@)" ] ; \
-			then echo "TEXT_BASE = 0xFF800000" >board/icecube/config.tmp ; \
-			else echo "TEXT_BASE = 0xFF000000" >board/icecube/config.tmp ; \
+			then echo "TEXT_BASE = 0xFF800000" >$(obj)board/icecube/config.tmp ; \
+			else echo "TEXT_BASE = 0xFF000000" >$(obj)board/icecube/config.tmp ; \
 		  fi ; \
 		  echo "... with LOWBOOT configuration" ; \
 		}
 	@[ -z "$(findstring LOWBOOT08,$@)" ] || \
-		{ echo "TEXT_BASE = 0xFF800000" >board/icecube/config.tmp ; \
+		{ echo "TEXT_BASE = 0xFF800000" >$(obj)board/icecube/config.tmp ; \
 		  echo "... with 8 MB flash only" ; \
 		  echo "... with LOWBOOT configuration" ; \
 		}
 	@[ -z "$(findstring DDR,$@)" ] || \
-		{ echo "#define CONFIG_MPC5200_DDR"	>>include/config.h ; \
+		{ echo "#define CONFIG_MPC5200_DDR"	>>$(obj)include/config.h ; \
 		  echo "... DDR memory revision" ; \
 		}
 	@[ -z "$(findstring 5200,$@)" ] || \
-		{ echo "#define CONFIG_MPC5200"		>>include/config.h ; \
+		{ echo "#define CONFIG_MPC5200"		>>$(obj)include/config.h ; \
 		  echo "... with MPC5200 processor" ; \
 		}
 	@[ -z "$(findstring 5100,$@)" ] || \
-		{ echo "#define CONFIG_MGT5100"		>>include/config.h ; \
+		{ echo "#define CONFIG_MGT5100"		>>$(obj)include/config.h ; \
 		  echo "... with MGT5100 processor" ; \
 		}
-	@./mkconfig -a IceCube ppc mpc5xxx icecube
+	@$(MKCONFIG) -a IceCube ppc mpc5xxx icecube
 
 inka4x0_config:	unconfig
-	@./mkconfig inka4x0 ppc mpc5xxx inka4x0
+	@$(MKCONFIG) inka4x0 ppc mpc5xxx inka4x0
 
 lite5200b_config	\
 lite5200b_LOWBOOT_config:	unconfig
-	@ >include/config.h
-	@ echo "#define CONFIG_MPC5200_DDR"	>>include/config.h
+	@mkdir -p $(obj)include
+	@mkdir -p $(obj)board/icecube
+	@ >$(obj)include/config.h
+	@ echo "#define CONFIG_MPC5200_DDR"	>>$(obj)include/config.h
 	@ echo "... DDR memory revision"
-	@ echo "#define CONFIG_MPC5200"		>>include/config.h
-	@ echo "#define CONFIG_LITE5200B"	>>include/config.h
+	@ echo "#define CONFIG_MPC5200"		>>$(obj)include/config.h
+	@ echo "#define CONFIG_LITE5200B"	>>$(obj)include/config.h
 	@[ -z "$(findstring LOWBOOT_,$@)" ] || \
-		{ echo "TEXT_BASE = 0xFF000000" >board/icecube/config.tmp ; \
+		{ echo "TEXT_BASE = 0xFF000000" >$(obj)board/icecube/config.tmp ; \
 		  echo "... with LOWBOOT configuration" ; \
 		}
 	@ echo "... with MPC5200B processor"
-	@./mkconfig -a IceCube  ppc mpc5xxx icecube
+	@$(MKCONFIG) -a IceCube  ppc mpc5xxx icecube
 
 mcc200_config	\
 mcc200_SDRAM_config	\
@@ -334,12 +414,14 @@
 prs200_DDR_config	\
 prs200_highboot_config	\
 prs200_highboot_DDR_config:	unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@mkdir -p $(obj)board/mcc200
+	@ >$(obj)include/config.h
 	@[ -n "$(findstring highboot,$@)" ] || \
 		{ echo "... with lowboot configuration" ; \
 		}
 	@[ -z "$(findstring highboot,$@)" ] || \
-		{ echo "TEXT_BASE = 0xFFF00000" >board/mcc200/config.tmp ; \
+		{ echo "TEXT_BASE = 0xFFF00000" >$(obj)board/mcc200/config.tmp ; \
 		  echo "... with highboot configuration" ; \
 		}
 	@[ -n "$(findstring _SDRAM,$@)" ] || \
@@ -351,92 +433,97 @@
 			then \
 				echo "... with DDR" ; \
 			else \
-				echo "#define CONFIG_MCC200_SDRAM" >>include/config.h ;\
+				echo "#define CONFIG_MCC200_SDRAM" >>$(obj)include/config.h ;\
 				echo "... with SDRAM" ; \
 			fi; \
 		  fi; \
 		}
 	@[ -z "$(findstring _SDRAM,$@)" ] || \
-		{ echo "#define CONFIG_MCC200_SDRAM"	>>include/config.h ; \
+		{ echo "#define CONFIG_MCC200_SDRAM"	>>$(obj)include/config.h ; \
 		  echo "... with SDRAM" ; \
 		}
 	@[ -z "$(findstring COM12,$@)" ] || \
-		{ echo "#define CONFIG_CONSOLE_COM12"	>>include/config.h ; \
+		{ echo "#define CONFIG_CONSOLE_COM12"	>>$(obj)include/config.h ; \
 		  echo "... with console on COM12" ; \
 		}
 	@[ -z "$(findstring prs200,$@)" ] || \
-		{ echo "#define CONFIG_PRS200"  >>include/config.h ;\
+		{ echo "#define CONFIG_PRS200"  >>$(obj)include/config.h ;\
 		}
-	@./mkconfig -n $@ -a mcc200 ppc mpc5xxx mcc200
+	@$(MKCONFIG) -n $@ -a mcc200 ppc mpc5xxx mcc200
 
 o2dnt_config:
-	@./mkconfig o2dnt ppc mpc5xxx o2dnt
+	@$(MKCONFIG) o2dnt ppc mpc5xxx o2dnt
 
 pf5200_config:  unconfig
-	@./mkconfig pf5200  ppc mpc5xxx pf5200 esd
+	@$(MKCONFIG) pf5200  ppc mpc5xxx pf5200 esd
 
 PM520_config \
 PM520_DDR_config \
 PM520_ROMBOOT_config \
 PM520_ROMBOOT_DDR_config:	unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring DDR,$@)" ] || \
-		{ echo "#define CONFIG_MPC5200_DDR"	>>include/config.h ; \
+		{ echo "#define CONFIG_MPC5200_DDR"	>>$(obj)include/config.h ; \
 		  echo "... DDR memory revision" ; \
 		}
 	@[ -z "$(findstring ROMBOOT,$@)" ] || \
-		{ echo "#define CONFIG_BOOT_ROM" >>include/config.h ; \
+		{ echo "#define CONFIG_BOOT_ROM" >>$(obj)include/config.h ; \
 		  echo "... booting from 8-bit flash" ; \
 		}
-	@./mkconfig -a PM520 ppc mpc5xxx pm520
+	@$(MKCONFIG) -a PM520 ppc mpc5xxx pm520
 
 smmaco4_config: unconfig
-	@./mkconfig -a smmaco4 ppc mpc5xxx tqm5200
+	@$(MKCONFIG) -a smmaco4 ppc mpc5xxx tqm5200
 
 spieval_config:	unconfig
-	@./mkconfig -a spieval ppc mpc5xxx tqm5200
+	@$(MKCONFIG) -a spieval ppc mpc5xxx tqm5200
 
 TB5200_B_config \
 TB5200_config:	unconfig
+	@mkdir -p $(obj)include
 	@[ -z "$(findstring _B,$@)" ] || \
-		{ echo "#define CONFIG_TQM5200_B"	>>include/config.h ; \
+		{ echo "#define CONFIG_TQM5200_B"	>>$(obj)include/config.h ; \
 		  echo "... with MPC5200B processor" ; \
 		}
-	@./mkconfig -n $@ -a TB5200 ppc mpc5xxx tqm5200
+	@$(MKCONFIG) -n $@ -a TB5200 ppc mpc5xxx tqm5200
 
 MINI5200_config	\
 EVAL5200_config	\
 TOP5200_config:	unconfig
-	@ echo "#define CONFIG_$(@:_config=) 1"	>include/config.h
-	@./mkconfig -n $@ -a TOP5200 ppc mpc5xxx top5200 emk
+	@mkdir -p $(obj)include
+	@ echo "#define CONFIG_$(@:_config=) 1"	>$(obj)include/config.h
+	@$(MKCONFIG) -n $@ -a TOP5200 ppc mpc5xxx top5200 emk
 
 Total5100_config		\
 Total5200_config		\
 Total5200_lowboot_config	\
 Total5200_Rev2_config		\
 Total5200_Rev2_lowboot_config:	unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@mkdir -p $(obj)board/total5200
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring 5100,$@)" ] || \
-		{ echo "#define CONFIG_MGT5100"		>>include/config.h ; \
+		{ echo "#define CONFIG_MGT5100"		>>$(obj)include/config.h ; \
 		  echo "... with MGT5100 processor" ; \
 		}
 	@[ -z "$(findstring 5200,$@)" ] || \
-		{ echo "#define CONFIG_MPC5200"		>>include/config.h ; \
+		{ echo "#define CONFIG_MPC5200"		>>$(obj)include/config.h ; \
 		  echo "... with MPC5200 processor" ; \
 		}
 	@[ -n "$(findstring Rev,$@)" ] || \
-		{ echo "#define CONFIG_TOTAL5200_REV 1"	>>include/config.h ; \
+		{ echo "#define CONFIG_TOTAL5200_REV 1"	>>$(obj)include/config.h ; \
 		  echo "... revision 1 board" ; \
 		}
 	@[ -z "$(findstring Rev2_,$@)" ] || \
-		{ echo "#define CONFIG_TOTAL5200_REV 2"	>>include/config.h ; \
+		{ echo "#define CONFIG_TOTAL5200_REV 2"	>>$(obj)include/config.h ; \
 		  echo "... revision 2 board" ; \
 		}
 	@[ -z "$(findstring lowboot_,$@)" ] || \
-		{ echo "TEXT_BASE = 0xFE000000" >board/total5200/config.tmp ; \
+		{ echo "TEXT_BASE = 0xFE000000" >$(obj)board/total5200/config.tmp ; \
 		  echo "... with lowboot configuration" ; \
 		}
-	@./mkconfig -a Total5200 ppc mpc5xxx total5200
+	@$(MKCONFIG) -a Total5200 ppc mpc5xxx total5200
 
 cam5200_config \
 fo300_config \
@@ -447,36 +534,38 @@
 TQM5200_B_HIGHBOOT_config \
 TQM5200_config	\
 TQM5200_STK100_config:	unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@mkdir -p $(obj)board/tqm5200
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring cam5200,$@)" ] || \
-		{ echo "#define CONFIG_CAM5200"	>>include/config.h ; \
-		  echo "#define CONFIG_TQM5200S"	>>include/config.h ; \
-		  echo "#define CONFIG_TQM5200_B"	>>include/config.h ; \
+		{ echo "#define CONFIG_CAM5200"	>>$(obj)include/config.h ; \
+		  echo "#define CONFIG_TQM5200S"	>>$(obj)include/config.h ; \
+		  echo "#define CONFIG_TQM5200_B"	>>$(obj)include/config.h ; \
 		  echo "... TQM5200S on Cam5200" ; \
 		}
 	@[ -z "$(findstring fo300,$@)" ] || \
-		{ echo "#define CONFIG_FO300"	>>include/config.h ; \
+		{ echo "#define CONFIG_FO300"	>>$(obj)include/config.h ; \
 		  echo "... TQM5200 on FO300" ; \
 		}
 	@[ -z "$(findstring MiniFAP,$@)" ] || \
-		{ echo "#define CONFIG_MINIFAP"	>>include/config.h ; \
+		{ echo "#define CONFIG_MINIFAP"	>>$(obj)include/config.h ; \
 		  echo "... TQM5200_AC on MiniFAP" ; \
 		}
 	@[ -z "$(findstring STK100,$@)" ] || \
-		{ echo "#define CONFIG_STK52XX_REV100"	>>include/config.h ; \
+		{ echo "#define CONFIG_STK52XX_REV100"	>>$(obj)include/config.h ; \
 		  echo "... on a STK52XX.100 base board" ; \
 		}
 	@[ -z "$(findstring TQM5200_B,$@)" ] || \
-		{ echo "#define CONFIG_TQM5200_B"	>>include/config.h ; \
+		{ echo "#define CONFIG_TQM5200_B"	>>$(obj)include/config.h ; \
 		}
 	@[ -z "$(findstring TQM5200S,$@)" ] || \
-		{ echo "#define CONFIG_TQM5200S"	>>include/config.h ; \
-		  echo "#define CONFIG_TQM5200_B"	>>include/config.h ; \
+		{ echo "#define CONFIG_TQM5200S"	>>$(obj)include/config.h ; \
+		  echo "#define CONFIG_TQM5200_B"	>>$(obj)include/config.h ; \
 		}
 	@[ -z "$(findstring HIGHBOOT,$@)" ] || \
-		{ echo "TEXT_BASE = 0xFFF00000" >board/tqm5200/config.tmp ; \
+		{ echo "TEXT_BASE = 0xFFF00000" >$(obj)board/tqm5200/config.tmp ; \
 		}
-	@./mkconfig -n $@ -a TQM5200 ppc mpc5xxx tqm5200
+	@$(MKCONFIG) -n $@ -a TQM5200 ppc mpc5xxx tqm5200
 
 #########################################################################
 ## MPC8xx Systems
@@ -486,9 +575,10 @@
 Adder87x_config \
 AdderII_config  \
 	:		unconfig
+	@mkdir -p $(obj)include
 	$(if $(findstring AdderII,$@), \
-	@echo "#define CONFIG_MPC852T" > include/config.h)
-	@./mkconfig -a Adder ppc mpc8xx adder
+	@echo "#define CONFIG_MPC852T" > $(obj)include/config.h)
+	@$(MKCONFIG) -a Adder ppc mpc8xx adder
 
 ADS860_config     \
 FADS823_config    \
@@ -496,154 +586,160 @@
 MPC86xADS_config  \
 MPC885ADS_config  \
 FADS860T_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx fads
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx fads
 
 AMX860_config	:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx amx860 westel
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx amx860 westel
 
 c2mon_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx c2mon
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx c2mon
 
 CCM_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx CCM siemens
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx CCM siemens
 
 cogent_mpc8xx_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx cogent
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx cogent
 
 ELPT860_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx elpt860 LEOX
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx elpt860 LEOX
 
 EP88x_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx ep88x
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx ep88x
 
 ESTEEM192E_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx esteem192e
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx esteem192e
 
 ETX094_config	:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx etx094
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx etx094
 
 FLAGADM_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx flagadm
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx flagadm
 
 xtract_GEN860T = $(subst _SC,,$(subst _config,,$1))
 
 GEN860T_SC_config	\
 GEN860T_config: unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring _SC,$@)" ] || \
-		{ echo "#define CONFIG_SC" >>include/config.h ; \
+		{ echo "#define CONFIG_SC" >>$(obj)include/config.h ; \
 		  echo "With reduced H/W feature set (SC)..." ; \
 		}
-	@./mkconfig -a $(call xtract_GEN860T,$@) ppc mpc8xx gen860t
+	@$(MKCONFIG) -a $(call xtract_GEN860T,$@) ppc mpc8xx gen860t
 
 GENIETV_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx genietv
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx genietv
 
 GTH_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx gth
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx gth
 
 hermes_config	:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx hermes
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx hermes
 
 HMI10_config	:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx tqm8xx
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx tqm8xx
 
 IAD210_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx IAD210 siemens
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx IAD210 siemens
 
 xtract_ICU862 = $(subst _100MHz,,$(subst _config,,$1))
 
 ICU862_100MHz_config	\
 ICU862_config: unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring _100MHz,$@)" ] || \
-		{ echo "#define CONFIG_100MHz"	>>include/config.h ; \
+		{ echo "#define CONFIG_100MHz"	>>$(obj)include/config.h ; \
 		  echo "... with 100MHz system clock" ; \
 		}
-	@./mkconfig -a $(call xtract_ICU862,$@) ppc mpc8xx icu862
+	@$(MKCONFIG) -a $(call xtract_ICU862,$@) ppc mpc8xx icu862
 
 IP860_config	:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx ip860
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx ip860
 
 IVML24_256_config \
 IVML24_128_config \
 IVML24_config:	unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring IVML24_config,$@)" ] || \
-		 { echo "#define CONFIG_IVML24_16M"	>>include/config.h ; \
+		 { echo "#define CONFIG_IVML24_16M"	>>$(obj)include/config.h ; \
 		 }
 	@[ -z "$(findstring IVML24_128_config,$@)" ] || \
-		 { echo "#define CONFIG_IVML24_32M"	>>include/config.h ; \
+		 { echo "#define CONFIG_IVML24_32M"	>>$(obj)include/config.h ; \
 		 }
 	@[ -z "$(findstring IVML24_256_config,$@)" ] || \
-		 { echo "#define CONFIG_IVML24_64M"	>>include/config.h ; \
+		 { echo "#define CONFIG_IVML24_64M"	>>$(obj)include/config.h ; \
 		 }
-	@./mkconfig -a IVML24 ppc mpc8xx ivm
+	@$(MKCONFIG) -a IVML24 ppc mpc8xx ivm
 
 IVMS8_256_config \
 IVMS8_128_config \
 IVMS8_config:	unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring IVMS8_config,$@)" ] || \
-		 { echo "#define CONFIG_IVMS8_16M"	>>include/config.h ; \
+		 { echo "#define CONFIG_IVMS8_16M"	>>$(obj)include/config.h ; \
 		 }
 	@[ -z "$(findstring IVMS8_128_config,$@)" ] || \
-		 { echo "#define CONFIG_IVMS8_32M"	>>include/config.h ; \
+		 { echo "#define CONFIG_IVMS8_32M"	>>$(obj)include/config.h ; \
 		 }
 	@[ -z "$(findstring IVMS8_256_config,$@)" ] || \
-		 { echo "#define CONFIG_IVMS8_64M"	>>include/config.h ; \
+		 { echo "#define CONFIG_IVMS8_64M"	>>$(obj)include/config.h ; \
 		 }
-	@./mkconfig -a IVMS8 ppc mpc8xx ivm
+	@$(MKCONFIG) -a IVMS8 ppc mpc8xx ivm
 
 KUP4K_config	:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx kup4k kup
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx kup4k kup
 
 KUP4X_config    :       unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx kup4x kup
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx kup4x kup
 
 LANTEC_config	:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx lantec
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx lantec
 
 lwmon_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx lwmon
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx lwmon
 
 MBX_config	\
 MBX860T_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx mbx8xx
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx mbx8xx
 
 MHPC_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx mhpc eltec
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx mhpc eltec
 
 MVS1_config :		unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx mvs1
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx mvs1
 
 xtract_NETVIA = $(subst _V2,,$(subst _config,,$1))
 
 NETVIA_V2_config \
 NETVIA_config:		unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring NETVIA_config,$@)" ] || \
-		 { echo "#define CONFIG_NETVIA_VERSION 1" >>include/config.h ; \
+		 { echo "#define CONFIG_NETVIA_VERSION 1" >>$(obj)include/config.h ; \
 		  echo "... Version 1" ; \
 		 }
 	@[ -z "$(findstring NETVIA_V2_config,$@)" ] || \
-		 { echo "#define CONFIG_NETVIA_VERSION 2" >>include/config.h ; \
+		 { echo "#define CONFIG_NETVIA_VERSION 2" >>$(obj)include/config.h ; \
 		  echo "... Version 2" ; \
 		 }
-	@./mkconfig -a $(call xtract_NETVIA,$@) ppc mpc8xx netvia
+	@$(MKCONFIG) -a $(call xtract_NETVIA,$@) ppc mpc8xx netvia
 
 xtract_NETPHONE = $(subst _V2,,$(subst _config,,$1))
 
 NETPHONE_V2_config \
 NETPHONE_config:	unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring NETPHONE_config,$@)" ] || \
-		 { echo "#define CONFIG_NETPHONE_VERSION 1" >>include/config.h ; \
+		 { echo "#define CONFIG_NETPHONE_VERSION 1" >>$(obj)include/config.h ; \
 		 }
 	@[ -z "$(findstring NETPHONE_V2_config,$@)" ] || \
-		 { echo "#define CONFIG_NETPHONE_VERSION 2" >>include/config.h ; \
+		 { echo "#define CONFIG_NETPHONE_VERSION 2" >>$(obj)include/config.h ; \
 		 }
-	@./mkconfig -a $(call xtract_NETPHONE,$@) ppc mpc8xx netphone
+	@$(MKCONFIG) -a $(call xtract_NETPHONE,$@) ppc mpc8xx netphone
 
 xtract_NETTA = $(subst _SWAPHOOK,,$(subst _6412,,$(subst _ISDN,,$(subst _config,,$1))))
 
@@ -655,85 +751,88 @@
 NETTA_ISDN_config \
 NETTA_6412_config \
 NETTA_config:		unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring ISDN_,$@)" ] || \
-		 { echo "#define CONFIG_NETTA_ISDN 1" >>include/config.h ; \
+		 { echo "#define CONFIG_NETTA_ISDN 1" >>$(obj)include/config.h ; \
 		 }
 	@[ -n "$(findstring ISDN_,$@)" ] || \
-		 { echo "#undef CONFIG_NETTA_ISDN" >>include/config.h ; \
+		 { echo "#undef CONFIG_NETTA_ISDN" >>$(obj)include/config.h ; \
 		 }
 	@[ -z "$(findstring 6412_,$@)" ] || \
-		 { echo "#define CONFIG_NETTA_6412 1" >>include/config.h ; \
+		 { echo "#define CONFIG_NETTA_6412 1" >>$(obj)include/config.h ; \
 		 }
 	@[ -n "$(findstring 6412_,$@)" ] || \
-		 { echo "#undef CONFIG_NETTA_6412" >>include/config.h ; \
+		 { echo "#undef CONFIG_NETTA_6412" >>$(obj)include/config.h ; \
 		 }
 	@[ -z "$(findstring SWAPHOOK_,$@)" ] || \
-		 { echo "#define CONFIG_NETTA_SWAPHOOK 1" >>include/config.h ; \
+		 { echo "#define CONFIG_NETTA_SWAPHOOK 1" >>$(obj)include/config.h ; \
 		 }
 	@[ -n "$(findstring SWAPHOOK_,$@)" ] || \
-		 { echo "#undef CONFIG_NETTA_SWAPHOOK" >>include/config.h ; \
+		 { echo "#undef CONFIG_NETTA_SWAPHOOK" >>$(obj)include/config.h ; \
 		 }
-	@./mkconfig -a $(call xtract_NETTA,$@) ppc mpc8xx netta
+	@$(MKCONFIG) -a $(call xtract_NETTA,$@) ppc mpc8xx netta
 
 xtract_NETTA2 = $(subst _V2,,$(subst _config,,$1))
 
 NETTA2_V2_config \
 NETTA2_config:		unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring NETTA2_config,$@)" ] || \
-		 { echo "#define CONFIG_NETTA2_VERSION 1" >>include/config.h ; \
+		 { echo "#define CONFIG_NETTA2_VERSION 1" >>$(obj)include/config.h ; \
 		 }
 	@[ -z "$(findstring NETTA2_V2_config,$@)" ] || \
-		 { echo "#define CONFIG_NETTA2_VERSION 2" >>include/config.h ; \
+		 { echo "#define CONFIG_NETTA2_VERSION 2" >>$(obj)include/config.h ; \
 		 }
-	@./mkconfig -a $(call xtract_NETTA2,$@) ppc mpc8xx netta2
+	@$(MKCONFIG) -a $(call xtract_NETTA2,$@) ppc mpc8xx netta2
 
 NC650_Rev1_config \
 NC650_Rev2_config \
 CP850_config:	unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring CP850,$@)" ] || \
-		 { echo "#define CONFIG_CP850 1" >>include/config.h ; \
-		   echo "#define CONFIG_IDS852_REV2 1" >>include/config.h ; \
+		 { echo "#define CONFIG_CP850 1" >>$(obj)include/config.h ; \
+		   echo "#define CONFIG_IDS852_REV2 1" >>$(obj)include/config.h ; \
 		 }
 	@[ -z "$(findstring Rev1,$@)" ] || \
-		 { echo "#define CONFIG_IDS852_REV1 1" >>include/config.h ; \
+		 { echo "#define CONFIG_IDS852_REV1 1" >>$(obj)include/config.h ; \
 		 }
 	@[ -z "$(findstring Rev2,$@)" ] || \
-		 { echo "#define CONFIG_IDS852_REV2 1" >>include/config.h ; \
+		 { echo "#define CONFIG_IDS852_REV2 1" >>$(obj)include/config.h ; \
 		 }
-	@./mkconfig -a NC650 ppc mpc8xx nc650
+	@$(MKCONFIG) -a NC650 ppc mpc8xx nc650
 
 NX823_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx nx823
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx nx823
 
 pcu_e_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx pcu_e siemens
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx pcu_e siemens
 
 QS850_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx qs850 snmc
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx qs850 snmc
 
 QS823_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx qs850 snmc
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx qs850 snmc
 
 QS860T_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx qs860t snmc
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx qs860t snmc
 
 quantum_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx quantum
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx quantum
 
 R360MPI_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx r360mpi
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx r360mpi
 
 RBC823_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx rbc823
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx rbc823
 
 RPXClassic_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx RPXClassic
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx RPXClassic
 
 RPXlite_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx RPXlite
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx RPXlite
 
 RPXlite_DW_64_config  		\
 RPXlite_DW_LCD_config 		\
@@ -743,55 +842,56 @@
 RPXlite_DW_NVRAM_LCD_config	\
 RPXlite_DW_NVRAM_64_LCD_config  \
 RPXlite_DW_config:         unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring _64,$@)" ] || \
-		{ echo "#define RPXlite_64MHz"		>>include/config.h ; \
+		{ echo "#define RPXlite_64MHz"		>>$(obj)include/config.h ; \
 		  echo "... with 64MHz system clock ..."; \
 		}
 	@[ -z "$(findstring _LCD,$@)" ] || \
-		{ echo "#define CONFIG_LCD"          	>>include/config.h ; \
-		  echo "#define CONFIG_NEC_NL6448BC20"	>>include/config.h ; \
+		{ echo "#define CONFIG_LCD"          	>>$(obj)include/config.h ; \
+		  echo "#define CONFIG_NEC_NL6448BC20"	>>$(obj)include/config.h ; \
 		  echo "... with LCD display ..."; \
 		}
 	@[ -z "$(findstring _NVRAM,$@)" ] || \
-		{ echo "#define  CFG_ENV_IS_IN_NVRAM" 	>>include/config.h ; \
+		{ echo "#define  CFG_ENV_IS_IN_NVRAM" 	>>$(obj)include/config.h ; \
 		  echo "... with ENV in NVRAM ..."; \
 		}
-	@./mkconfig -a RPXlite_DW ppc mpc8xx RPXlite_dw
+	@$(MKCONFIG) -a RPXlite_DW ppc mpc8xx RPXlite_dw
 
 rmu_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx rmu
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx rmu
 
 RRvision_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx RRvision
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx RRvision
 
 RRvision_LCD_config:	unconfig
-	@echo "#define CONFIG_LCD" >include/config.h
-	@echo "#define CONFIG_SHARP_LQ104V7DS01" >>include/config.h
-	@./mkconfig -a RRvision ppc mpc8xx RRvision
+	@mkdir -p $(obj)include
+	@echo "#define CONFIG_LCD" >$(obj)include/config.h
+	@echo "#define CONFIG_SHARP_LQ104V7DS01" >>$(obj)include/config.h
+	@$(MKCONFIG) -a RRvision ppc mpc8xx RRvision
 
 SM850_config	:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx tqm8xx
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx tqm8xx
 
 spc1920_config:
-	@./mkconfig $(@:_config=) ppc mpc8xx spc1920
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx spc1920
 
 SPD823TS_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx spd8xx
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx spd8xx
 
 stxxtc_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx stxxtc
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx stxxtc
 
 svm_sc8xx_config:	unconfig
-	@ >include/config.h
-	@./mkconfig $(@:_config=) ppc mpc8xx svm_sc8xx
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx svm_sc8xx
 
 SXNI855T_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx sixnet
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx sixnet
 
 # EMK MPC8xx based modules
 TOP860_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx top860 emk
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx top860 emk
 
 # Play some tricks for configuration selection
 # Only 855 and 860 boards may come with FEC
@@ -815,31 +915,35 @@
 TQM866M_config		\
 TQM885D_config		\
 virtlab2_config:	unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring _LCD,$@)" ] || \
-		{ echo "#define CONFIG_LCD"		>>include/config.h ; \
-		  echo "#define CONFIG_NEC_NL6448BC20"	>>include/config.h ; \
+		{ echo "#define CONFIG_LCD"		>>$(obj)include/config.h ; \
+		  echo "#define CONFIG_NEC_NL6448BC20"	>>$(obj)include/config.h ; \
 		  echo "... with LCD display" ; \
 		}
-	@./mkconfig -a $(call xtract_8xx,$@) ppc mpc8xx tqm8xx
+	@$(MKCONFIG) -a $(call xtract_8xx,$@) ppc mpc8xx tqm8xx
 
 TTTech_config:	unconfig
-	@echo "#define CONFIG_LCD" >include/config.h
-	@echo "#define CONFIG_SHARP_LQ104V7DS01" >>include/config.h
-	@./mkconfig -a TQM823L ppc mpc8xx tqm8xx
+	@mkdir -p $(obj)include
+	@echo "#define CONFIG_LCD" >$(obj)include/config.h
+	@echo "#define CONFIG_SHARP_LQ104V7DS01" >>$(obj)include/config.h
+	@$(MKCONFIG) -a TQM823L ppc mpc8xx tqm8xx
 
 uc100_config	:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8xx uc100
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx uc100
 
 v37_config:	unconfig
-	@echo "#define CONFIG_LCD" >include/config.h
-	@echo "#define CONFIG_SHARP_LQ084V1DG21" >>include/config.h
-	@./mkconfig $(@:_config=) ppc mpc8xx v37
+	@mkdir -p $(obj)include
+	@echo "#define CONFIG_LCD" >$(obj)include/config.h
+	@echo "#define CONFIG_SHARP_LQ084V1DG21" >>$(obj)include/config.h
+	@$(MKCONFIG) $(@:_config=) ppc mpc8xx v37
 
 wtk_config:	unconfig
-	@echo "#define CONFIG_LCD" >include/config.h
-	@echo "#define CONFIG_SHARP_LQ065T9DR51U" >>include/config.h
-	@./mkconfig -a TQM823L ppc mpc8xx tqm8xx
+	@mkdir -p $(obj)include
+	@echo "#define CONFIG_LCD" >$(obj)include/config.h
+	@echo "#define CONFIG_SHARP_LQ065T9DR51U" >>$(obj)include/config.h
+	@$(MKCONFIG) -a TQM823L ppc mpc8xx tqm8xx
 
 #########################################################################
 ## PPC4xx Systems
@@ -847,146 +951,148 @@
 xtract_4xx = $(subst _25,,$(subst _33,,$(subst _BA,,$(subst _ME,,$(subst _HI,,$(subst _config,,$1))))))
 
 ADCIOP_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx adciop esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx adciop esd
 
 AP1000_config:unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx ap1000 amirix
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx ap1000 amirix
 
 APC405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx apc405 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx apc405 esd
 
 AR405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx ar405 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx ar405 esd
 
 ASH405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx ash405 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx ash405 esd
 
 bamboo_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx bamboo amcc
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx bamboo amcc
 
 bubinga_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx bubinga amcc
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx bubinga amcc
 
 CANBT_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx canbt esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx canbt esd
 
 CATcenter_config	\
 CATcenter_25_config	\
 CATcenter_33_config:	unconfig
-	@ echo "/* CATcenter uses PPChameleon Model ME */"  > include/config.h
-	@ echo "#define CONFIG_PPCHAMELEON_MODULE_MODEL 1" >> include/config.h
+	@mkdir -p $(obj)include
+	@ echo "/* CATcenter uses PPChameleon Model ME */"  > $(obj)include/config.h
+	@ echo "#define CONFIG_PPCHAMELEON_MODULE_MODEL 1" >> $(obj)include/config.h
 	@[ -z "$(findstring _25,$@)" ] || \
-		{ echo "#define CONFIG_PPCHAMELEON_CLK_25" >>include/config.h ; \
+		{ echo "#define CONFIG_PPCHAMELEON_CLK_25" >> $(obj)include/config.h ; \
 		  echo "SysClk = 25MHz" ; \
 		}
 	@[ -z "$(findstring _33,$@)" ] || \
-		{ echo "#define CONFIG_PPCHAMELEON_CLK_33" >>include/config.h ; \
+		{ echo "#define CONFIG_PPCHAMELEON_CLK_33" >> $(obj)include/config.h ; \
 		  echo "SysClk = 33MHz" ; \
 		}
-	@./mkconfig -a $(call xtract_4xx,$@) ppc ppc4xx PPChameleonEVB dave
+	@$(MKCONFIG) -a $(call xtract_4xx,$@) ppc ppc4xx PPChameleonEVB dave
 
 CPCI2DP_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx cpci2dp esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx cpci2dp esd
 
 CPCI405_config	\
 CPCI4052_config	\
 CPCI405DT_config	\
 CPCI405AB_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx cpci405 esd
-	@echo "BOARD_REVISION = $(@:_config=)"	>>include/config.mk
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx cpci405 esd
+	@echo "BOARD_REVISION = $(@:_config=)"	>> $(obj)include/config.mk
 
 CPCI440_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx cpci440 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx cpci440 esd
 
 CPCIISER4_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx cpciiser4 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx cpciiser4 esd
 
 CRAYL1_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx L1 cray
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx L1 cray
 
 csb272_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx csb272
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx csb272
 
 csb472_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx csb472
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx csb472
 
 DASA_SIM_config: unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx dasa_sim esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx dasa_sim esd
 
 DP405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx dp405 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx dp405 esd
 
 DU405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx du405 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx du405 esd
 
 ebony_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx ebony amcc
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx ebony amcc
 
 ERIC_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx eric
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx eric
 
 EXBITGEN_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx exbitgen
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx exbitgen
 
 G2000_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx g2000
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx g2000
 
 HH405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx hh405 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx hh405 esd
 
 HUB405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx hub405 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx hub405 esd
 
 JSE_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx jse
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx jse
 
 KAREF_config: unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx karef sandburst
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx karef sandburst
 
 luan_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx luan amcc
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx luan amcc
 
 METROBOX_config: unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx metrobox sandburst
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx metrobox sandburst
 
 MIP405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx mip405 mpl
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx mip405 mpl
 
 MIP405T_config:	unconfig
-	@echo "#define CONFIG_MIP405T" >include/config.h
+	@mkdir -p $(obj)include
+	@echo "#define CONFIG_MIP405T" >$(obj)include/config.h
 	@echo "Enable subset config for MIP405T"
-	@./mkconfig -a MIP405 ppc ppc4xx mip405 mpl
+	@$(MKCONFIG) -a MIP405 ppc ppc4xx mip405 mpl
 
 ML2_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx ml2
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx ml2
 
 ml300_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx ml300 xilinx
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx ml300 xilinx
 
 ocotea_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx ocotea amcc
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx ocotea amcc
 
 OCRTC_config		\
 ORSG_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx ocrtc esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx ocrtc esd
 
 p3p440_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx p3p440 prodrive
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx p3p440 prodrive
 
 PCI405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx pci405 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx pci405 esd
 
 pcs440ep_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx pcs440ep
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx pcs440ep
 
 PIP405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx pip405 mpl
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx pip405 mpl
 
 PLU405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx plu405 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx plu405 esd
 
 PMC405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx pmc405 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx pmc405 esd
 
 PPChameleonEVB_config		\
 PPChameleonEVB_BA_25_config	\
@@ -995,66 +1101,67 @@
 PPChameleonEVB_BA_33_config	\
 PPChameleonEVB_ME_33_config	\
 PPChameleonEVB_HI_33_config:	unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring EVB_BA,$@)" ] || \
-		{ echo "#define CONFIG_PPCHAMELEON_MODULE_MODEL 0" >>include/config.h ; \
+		{ echo "#define CONFIG_PPCHAMELEON_MODULE_MODEL 0" >>$(obj)include/config.h ; \
 		  echo "... BASIC model" ; \
 		}
 	@[ -z "$(findstring EVB_ME,$@)" ] || \
-		{ echo "#define CONFIG_PPCHAMELEON_MODULE_MODEL 1" >>include/config.h ; \
+		{ echo "#define CONFIG_PPCHAMELEON_MODULE_MODEL 1" >>$(obj)include/config.h ; \
 		  echo "... MEDIUM model" ; \
 		}
 	@[ -z "$(findstring EVB_HI,$@)" ] || \
-		{ echo "#define CONFIG_PPCHAMELEON_MODULE_MODEL 2" >>include/config.h ; \
+		{ echo "#define CONFIG_PPCHAMELEON_MODULE_MODEL 2" >>$(obj)include/config.h ; \
 		  echo "... HIGH-END model" ; \
 		}
 	@[ -z "$(findstring _25,$@)" ] || \
-		{ echo "#define CONFIG_PPCHAMELEON_CLK_25" >>include/config.h ; \
+		{ echo "#define CONFIG_PPCHAMELEON_CLK_25" >>$(obj)include/config.h ; \
 		  echo "SysClk = 25MHz" ; \
 		}
 	@[ -z "$(findstring _33,$@)" ] || \
-		{ echo "#define CONFIG_PPCHAMELEON_CLK_33" >>include/config.h ; \
+		{ echo "#define CONFIG_PPCHAMELEON_CLK_33" >>$(obj)include/config.h ; \
 		  echo "SysClk = 33MHz" ; \
 		}
-	@./mkconfig -a $(call xtract_4xx,$@) ppc ppc4xx PPChameleonEVB dave
+	@$(MKCONFIG) -a $(call xtract_4xx,$@) ppc ppc4xx PPChameleonEVB dave
 
 sbc405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx sbc405
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx sbc405
 
 sycamore_config:	unconfig
 	@echo "Configuring for sycamore board as subset of walnut..."
-	@./mkconfig -a walnut ppc ppc4xx walnut amcc
+	@$(MKCONFIG) -a walnut ppc ppc4xx walnut amcc
 
 VOH405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx voh405 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx voh405 esd
 
 VOM405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx vom405 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx vom405 esd
 
 CMS700_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx cms700 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx cms700 esd
 
 W7OLMC_config	\
 W7OLMG_config: unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx w7o
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx w7o
 
 walnut_config: unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx walnut amcc
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx walnut amcc
 
 WUH405_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx wuh405 esd
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx wuh405 esd
 
 XPEDITE1K_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx xpedite1k
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx xpedite1k
 
 yosemite_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx yosemite amcc
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx yosemite amcc
 
 yellowstone_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx yellowstone amcc
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx yellowstone amcc
 
 yucca_config:	unconfig
-	@./mkconfig $(@:_config=) ppc ppc4xx yucca amcc
+	@$(MKCONFIG) $(@:_config=) ppc ppc4xx yucca amcc
 
 #########################################################################
 ## MPC8220 Systems
@@ -1062,10 +1169,10 @@
 
 Alaska8220_config	\
 Yukon8220_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8220 alaska
+	@$(MKCONFIG) $(@:_config=) ppc mpc8220 alaska
 
 sorcery_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc8220 sorcery
+	@$(MKCONFIG) $(@:_config=) ppc mpc8220 sorcery
 
 #########################################################################
 ## MPC824x Systems
@@ -1073,18 +1180,18 @@
 xtract_82xx = $(subst _BIGFLASH,,$(subst _ROMBOOT,,$(subst _L2,,$(subst _266MHz,,$(subst _300MHz,,$(subst _config,,$1))))))
 
 A3000_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x a3000
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x a3000
 
 barco_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x barco
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x barco
 
 BMW_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x bmw
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x bmw
 
 CPC45_config	\
 CPC45_ROMBOOT_config:	unconfig
-	@./mkconfig $(call xtract_82xx,$@) ppc mpc824x cpc45
-	@cd ./include ;				\
+	@$(MKCONFIG) $(call xtract_82xx,$@) ppc mpc824x cpc45
+	@cd $(obj)include ;				\
 	if [ "$(findstring _ROMBOOT_,$@)" ] ; then \
 		echo "CONFIG_BOOT_ROM = y" >> config.mk ; \
 		echo "... booting from 8-bit flash" ; \
@@ -1095,64 +1202,64 @@
 	echo "export CONFIG_BOOT_ROM" >> config.mk;
 
 CU824_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x cu824
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x cu824
 
 debris_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x debris etin
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x debris etin
 
 eXalion_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x eXalion
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x eXalion
 
 HIDDEN_DRAGON_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x hidden_dragon
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x hidden_dragon
 
 kvme080_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x kvme080 etin
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x kvme080 etin
 
 MOUSSE_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x mousse
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x mousse
 
 MUSENKI_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x musenki
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x musenki
 
 MVBLUE_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x mvblue
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x mvblue
 
 OXC_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x oxc
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x oxc
 
 PN62_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x pn62
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x pn62
 
 Sandpoint8240_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x sandpoint
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x sandpoint
 
 Sandpoint8245_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x sandpoint
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x sandpoint
 
 sbc8240_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x sbc8240
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x sbc8240
 
 SL8245_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x sl8245
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x sl8245
 
 utx8245_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc824x utx8245
+	@$(MKCONFIG) $(@:_config=) ppc mpc824x utx8245
 
 #########################################################################
 ## MPC8260 Systems
 #########################################################################
 
 atc_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 atc
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 atc
 
 cogent_mpc8260_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 cogent
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 cogent
 
 CPU86_config	\
 CPU86_ROMBOOT_config: unconfig
-	@./mkconfig $(call xtract_82xx,$@) ppc mpc8260 cpu86
-	@cd ./include ;				\
+	@$(MKCONFIG) $(call xtract_82xx,$@) ppc mpc8260 cpu86
+	@cd $(obj)include ;				\
 	if [ "$(findstring _ROMBOOT_,$@)" ] ; then \
 		echo "CONFIG_BOOT_ROM = y" >> config.mk ; \
 		echo "... booting from 8-bit flash" ; \
@@ -1164,8 +1271,8 @@
 
 CPU87_config	\
 CPU87_ROMBOOT_config: unconfig
-	@./mkconfig $(call xtract_82xx,$@) ppc mpc8260 cpu87
-	@cd ./include ;				\
+	@$(MKCONFIG) $(call xtract_82xx,$@) ppc mpc8260 cpu87
+	@cd $(obj)include ;				\
 	if [ "$(findstring _ROMBOOT_,$@)" ] ; then \
 		echo "CONFIG_BOOT_ROM = y" >> config.mk ; \
 		echo "... booting from 8-bit flash" ; \
@@ -1177,29 +1284,30 @@
 
 ep8248_config	\
 ep8248E_config	:	unconfig
-	@./mkconfig ep8248 ppc mpc8260 ep8248
+	@$(MKCONFIG) ep8248 ppc mpc8260 ep8248
 
 ep8260_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 ep8260
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 ep8260
 
 gw8260_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 gw8260
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 gw8260
 
 hymod_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 hymod
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 hymod
 
 IDS8247_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 ids8247
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 ids8247
 
 IPHASE4539_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 iphase4539
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 iphase4539
 
 ISPAN_config		\
 ISPAN_REVB_config:	unconfig
+	@mkdir -p $(obj)include
 	@if [ "$(findstring _REVB_,$@)" ] ; then \
-		echo "#define CFG_REV_B" > include/config.h ; \
+		echo "#define CFG_REV_B" > $(obj)include/config.h ; \
 	fi
-	@./mkconfig -a ISPAN ppc mpc8260 ispan
+	@$(MKCONFIG) -a ISPAN ppc mpc8260 ispan
 
 MPC8260ADS_config	\
 MPC8260ADS_lowboot_config	\
@@ -1218,21 +1326,23 @@
 PQ2FADS-ZU_66MHz_config	\
 PQ2FADS-ZU_66MHz_lowboot_config	\
 	:		unconfig
+	@mkdir -p $(obj)include
+	@mkdir -p $(obj)board/mpc8260ads
 	$(if $(findstring PQ2FADS,$@), \
-	@echo "#define CONFIG_ADSTYPE CFG_PQ2FADS" > include/config.h, \
-	@echo "#define CONFIG_ADSTYPE CFG_"$(subst MPC,,$(word 1,$(subst _, ,$@))) > include/config.h)
+	@echo "#define CONFIG_ADSTYPE CFG_PQ2FADS" > $(obj)include/config.h, \
+	@echo "#define CONFIG_ADSTYPE CFG_"$(subst MPC,,$(word 1,$(subst _, ,$@))) > $(obj)include/config.h)
 	$(if $(findstring MHz,$@), \
-	@echo "#define CONFIG_8260_CLKIN" $(subst MHz,,$(word 2,$(subst _, ,$@)))"000000" >> include/config.h, \
+	@echo "#define CONFIG_8260_CLKIN" $(subst MHz,,$(word 2,$(subst _, ,$@)))"000000" >> $(obj)include/config.h, \
 	$(if $(findstring VR,$@), \
-	@echo "#define CONFIG_8260_CLKIN 66000000" >> include/config.h))
+	@echo "#define CONFIG_8260_CLKIN 66000000" >> $(obj)include/config.h))
 	@[ -z "$(findstring lowboot_,$@)" ] || \
-		{ echo "TEXT_BASE = 0xFF800000" >board/mpc8260ads/config.tmp ; \
+		{ echo "TEXT_BASE = 0xFF800000" >$(obj)board/mpc8260ads/config.tmp ; \
 		  echo "... with lowboot configuration" ; \
 		}
-	@./mkconfig -a MPC8260ADS ppc mpc8260 mpc8260ads
+	@$(MKCONFIG) -a MPC8260ADS ppc mpc8260 mpc8260ads
 
 MPC8266ADS_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 mpc8266ads
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 mpc8266ads
 
 # PM825/PM826 default configuration:  small (= 8 MB) Flash / boot from 64-bit flash
 PM825_config	\
@@ -1243,71 +1353,76 @@
 PM826_ROMBOOT_config	\
 PM826_BIGFLASH_config	\
 PM826_ROMBOOT_BIGFLASH_config:	unconfig
+	@mkdir -p $(obj)include
+	@mkdir -p $(obj)board/pm826
 	@if [ "$(findstring PM825_,$@)" ] ; then \
-		echo "#define CONFIG_PCI"	>include/config.h ; \
+		echo "#define CONFIG_PCI"	>$(obj)include/config.h ; \
 	else \
-		>include/config.h ; \
+		>$(obj)include/config.h ; \
 	fi
 	@if [ "$(findstring _ROMBOOT_,$@)" ] ; then \
 		echo "... booting from 8-bit flash" ; \
-		echo "#define CONFIG_BOOT_ROM" >>include/config.h ; \
-		echo "TEXT_BASE = 0xFF800000" >board/pm826/config.tmp ; \
+		echo "#define CONFIG_BOOT_ROM" >>$(obj)include/config.h ; \
+		echo "TEXT_BASE = 0xFF800000" >$(obj)board/pm826/config.tmp ; \
 		if [ "$(findstring _BIGFLASH_,$@)" ] ; then \
 			echo "... with 32 MB Flash" ; \
-			echo "#define CONFIG_FLASH_32MB" >>include/config.h ; \
+			echo "#define CONFIG_FLASH_32MB" >>$(obj)include/config.h ; \
 		fi; \
 	else \
 		echo "... booting from 64-bit flash" ; \
 		if [ "$(findstring _BIGFLASH_,$@)" ] ; then \
 			echo "... with 32 MB Flash" ; \
-			echo "#define CONFIG_FLASH_32MB" >>include/config.h ; \
-			echo "TEXT_BASE = 0x40000000" >board/pm826/config.tmp ; \
+			echo "#define CONFIG_FLASH_32MB" >>$(obj)include/config.h ; \
+			echo "TEXT_BASE = 0x40000000" >$(obj)board/pm826/config.tmp ; \
 		else \
-			echo "TEXT_BASE = 0xFF000000" >board/pm826/config.tmp ; \
+			echo "TEXT_BASE = 0xFF000000" >$(obj)board/pm826/config.tmp ; \
 		fi; \
 	fi
-	@./mkconfig -a PM826 ppc mpc8260 pm826
+	@$(MKCONFIG) -a PM826 ppc mpc8260 pm826
 
 PM828_config	\
 PM828_PCI_config	\
 PM828_ROMBOOT_config	\
 PM828_ROMBOOT_PCI_config:	unconfig
+	@mkdir -p $(obj)include
+	@mkdir -p $(obj)board/pm826
 	@if [ "$(findstring _PCI_,$@)" ] ; then \
-		echo "#define CONFIG_PCI"  >>include/config.h ; \
+		echo "#define CONFIG_PCI"  >>$(obj)include/config.h ; \
 		echo "... with PCI enabled" ; \
 	else \
-		>include/config.h ; \
+		>$(obj)include/config.h ; \
 	fi
 	@if [ "$(findstring _ROMBOOT_,$@)" ] ; then \
 		echo "... booting from 8-bit flash" ; \
-		echo "#define CONFIG_BOOT_ROM" >>include/config.h ; \
-		echo "TEXT_BASE = 0xFF800000" >board/pm826/config.tmp ; \
+		echo "#define CONFIG_BOOT_ROM" >>$(obj)include/config.h ; \
+		echo "TEXT_BASE = 0xFF800000" >$(obj)board/pm826/config.tmp ; \
 	fi
-	@./mkconfig -a PM828 ppc mpc8260 pm828
+	@$(MKCONFIG) -a PM828 ppc mpc8260 pm828
 
 ppmc8260_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 ppmc8260
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 ppmc8260
 
 Rattler8248_config	\
 Rattler_config:		unconfig
+	@mkdir -p $(obj)include
 	$(if $(findstring 8248,$@), \
-	@echo "#define CONFIG_MPC8248" > include/config.h)
-	@./mkconfig -a Rattler ppc mpc8260 rattler
+	@echo "#define CONFIG_MPC8248" > $(obj)include/config.h)
+	@$(MKCONFIG) -a Rattler ppc mpc8260 rattler
 
 RPXsuper_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 rpxsuper
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 rpxsuper
 
 rsdproto_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 rsdproto
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 rsdproto
 
 sacsng_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 sacsng
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 sacsng
 
 sbc8260_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 sbc8260
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 sbc8260
 
 SCM_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 SCM siemens
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 SCM siemens
 
 TQM8255_AA_config \
 TQM8260_AA_config \
@@ -1320,6 +1435,7 @@
 TQM8260_AH_config \
 TQM8260_AI_config \
 TQM8265_AA_config:  unconfig
+	@mkdir -p $(obj)include
 	@case "$@" in \
 	TQM8255_AA_config) CTYPE=MPC8255; CFREQ=300; CACHE=no;	BMODE=8260;;  \
 	TQM8260_AA_config) CTYPE=MPC8260; CFREQ=200; CACHE=no;	BMODE=8260;; \
@@ -1333,205 +1449,214 @@
 	TQM8260_AI_config) CTYPE=MPC8260; CFREQ=300; CACHE=no;	BMODE=60x;;  \
 	TQM8265_AA_config) CTYPE=MPC8265; CFREQ=300; CACHE=no;	BMODE=60x;;  \
 	esac; \
-	>include/config.h ; \
+	>$(obj)include/config.h ; \
 	if [ "$${CTYPE}" != "MPC8260" ] ; then \
-		echo "#define CONFIG_$${CTYPE}"	>>include/config.h ; \
+		echo "#define CONFIG_$${CTYPE}"	>>$(obj)include/config.h ; \
 	fi; \
-	echo "#define CONFIG_$${CFREQ}MHz"	>>include/config.h ; \
+	echo "#define CONFIG_$${CFREQ}MHz"	>>$(obj)include/config.h ; \
 	echo "... with $${CFREQ}MHz system clock" ; \
 	if [ "$${CACHE}" == "yes" ] ; then \
-		echo "#define CONFIG_L2_CACHE"	>>include/config.h ; \
+		echo "#define CONFIG_L2_CACHE"	>>$(obj)include/config.h ; \
 		echo "... with L2 Cache support" ; \
 	else \
-		echo "#undef CONFIG_L2_CACHE"	>>include/config.h ; \
+		echo "#undef CONFIG_L2_CACHE"	>>$(obj)include/config.h ; \
 		echo "... without L2 Cache support" ; \
 	fi; \
 	if [ "$${BMODE}" == "60x" ] ; then \
-		echo "#define CONFIG_BUSMODE_60x" >>include/config.h ; \
+		echo "#define CONFIG_BUSMODE_60x" >>$(obj)include/config.h ; \
 		echo "... with 60x Bus Mode" ; \
 	else \
-		echo "#undef CONFIG_BUSMODE_60x"  >>include/config.h ; \
+		echo "#undef CONFIG_BUSMODE_60x"  >>$(obj)include/config.h ; \
 		echo "... without 60x Bus Mode" ; \
 	fi
-	@./mkconfig -a TQM8260 ppc mpc8260 tqm8260
+	@$(MKCONFIG) -a TQM8260 ppc mpc8260 tqm8260
 
 VoVPN-GW_66MHz_config	\
 VoVPN-GW_100MHz_config:		unconfig
-	@echo "#define CONFIG_CLKIN_$(word 2,$(subst _, ,$@))" > include/config.h
-	@./mkconfig -a VoVPN-GW ppc mpc8260 vovpn-gw funkwerk
+	@mkdir -p $(obj)include
+	@echo "#define CONFIG_CLKIN_$(word 2,$(subst _, ,$@))" > $(obj)include/config.h
+	@$(MKCONFIG) -a VoVPN-GW ppc mpc8260 vovpn-gw funkwerk
 
 ZPC1900_config: unconfig
-	@./mkconfig $(@:_config=) ppc mpc8260 zpc1900
+	@$(MKCONFIG) $(@:_config=) ppc mpc8260 zpc1900
 
 #########################################################################
 ## Coldfire
 #########################################################################
 
 cobra5272_config :		unconfig
-	@./mkconfig $(@:_config=) m68k mcf52x2 cobra5272
+	@$(MKCONFIG) $(@:_config=) m68k mcf52x2 cobra5272
 
 EB+MCF-EV123_config :		unconfig
-	@ >include/config.h
-	@echo "TEXT_BASE = 0xFFE00000"|tee board/BuS/EB+MCF-EV123/textbase.mk
-	@./mkconfig EB+MCF-EV123 m68k mcf52x2 EB+MCF-EV123 BuS
+	@mkdir -p $(obj)include
+	@mkdir -p $(obj)board/BuS/EB+MCF-EV123
+	@ >$(obj)include/config.h
+	@echo "TEXT_BASE = 0xFFE00000"|tee $(obj)board/BuS/EB+MCF-EV123/textbase.mk
+	@$(MKCONFIG) EB+MCF-EV123 m68k mcf52x2 EB+MCF-EV123 BuS
 
 EB+MCF-EV123_internal_config :	unconfig
-	@ >include/config.h
-	@echo "TEXT_BASE = 0xF0000000"|tee board/BuS/EB+MCF-EV123/textbase.mk
-	@./mkconfig EB+MCF-EV123 m68k mcf52x2 EB+MCF-EV123 BuS
+	@mkdir -p $(obj)include
+	@mkdir -p $(obj)board/BuS/EB+MCF-EV123
+	@ >$(obj)include/config.h
+	@echo "TEXT_BASE = 0xF0000000"|tee $(obj)board/BuS/EB+MCF-EV123/textbase.mk
+	@$(MKCONFIG) EB+MCF-EV123 m68k mcf52x2 EB+MCF-EV123 BuS
 
 M5271EVB_config :		unconfig
-	@./mkconfig $(@:_config=) m68k mcf52x2 m5271evb
+	@$(MKCONFIG) $(@:_config=) m68k mcf52x2 m5271evb
 
 M5272C3_config :		unconfig
-	@./mkconfig $(@:_config=) m68k mcf52x2 m5272c3
+	@$(MKCONFIG) $(@:_config=) m68k mcf52x2 m5272c3
 
 M5282EVB_config :		unconfig
-	@./mkconfig $(@:_config=) m68k mcf52x2 m5282evb
+	@$(MKCONFIG) $(@:_config=) m68k mcf52x2 m5282evb
 
 TASREG_config :		unconfig
-	@./mkconfig $(@:_config=) m68k mcf52x2 tasreg esd
+	@$(MKCONFIG) $(@:_config=) m68k mcf52x2 tasreg esd
 
 r5200_config :		unconfig
-	@./mkconfig $(@:_config=) m68k mcf52x2 r5200
+	@$(MKCONFIG) $(@:_config=) m68k mcf52x2 r5200
 
 #########################################################################
 ## MPC83xx Systems
 #########################################################################
 
 MPC8349ADS_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc83xx mpc8349ads
+	@$(MKCONFIG) $(@:_config=) ppc mpc83xx mpc8349ads
 
 TQM834x_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc83xx tqm834x
+	@$(MKCONFIG) $(@:_config=) ppc mpc83xx tqm834x
 
 MPC8349EMDS_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc83xx mpc8349emds
+	@$(MKCONFIG) $(@:_config=) ppc mpc83xx mpc8349emds
 
 #########################################################################
 ## MPC85xx Systems
 #########################################################################
 
 MPC8540ADS_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc85xx mpc8540ads
+	@$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8540ads
 
 MPC8540EVAL_config \
 MPC8540EVAL_33_config \
 MPC8540EVAL_66_config \
 MPC8540EVAL_33_slave_config \
 MPC8540EVAL_66_slave_config:      unconfig
-	@echo "" >include/config.h ; \
+	@mkdir -p $(obj)include
+	@echo "" >$(obj)include/config.h ; \
 	if [ "$(findstring _33_,$@)" ] ; then \
 		echo -n "... 33 MHz PCI" ; \
 	else \
-		echo "#define CONFIG_SYSCLK_66M" >>include/config.h ; \
+		echo "#define CONFIG_SYSCLK_66M" >>$(obj)include/config.h ; \
 		echo -n "... 66 MHz PCI" ; \
 	fi ; \
 	if [ "$(findstring _slave_,$@)" ] ; then \
-		echo "#define CONFIG_PCI_SLAVE" >>include/config.h ; \
+		echo "#define CONFIG_PCI_SLAVE" >>$(obj)include/config.h ; \
 		echo " slave" ; \
 	else \
 		echo " host" ; \
 	fi
-	@./mkconfig -a MPC8540EVAL ppc mpc85xx mpc8540eval
+	@$(MKCONFIG) -a MPC8540EVAL ppc mpc85xx mpc8540eval
 
 MPC8560ADS_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc85xx mpc8560ads
+	@$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8560ads
 
 MPC8541CDS_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc85xx mpc8541cds cds
+	@$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8541cds cds
 
 MPC8548CDS_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc85xx mpc8548cds cds
+	@$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8548cds cds
 
 MPC8555CDS_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc85xx mpc8555cds cds
+	@$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8555cds cds
 
 PM854_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc85xx pm854
+	@$(MKCONFIG) $(@:_config=) ppc mpc85xx pm854
 
 PM856_config:	unconfig
-	@./mkconfig $(@:_config=) ppc mpc85xx pm856
+	@$(MKCONFIG) $(@:_config=) ppc mpc85xx pm856
 
 sbc8540_config \
 sbc8540_33_config \
 sbc8540_66_config:	unconfig
+	@mkdir -p $(obj)include
 	@if [ "$(findstring _66_,$@)" ] ; then \
-		echo "#define CONFIG_PCI_66"	>>include/config.h ; \
+		echo "#define CONFIG_PCI_66"	>>$(obj)include/config.h ; \
 		echo "... 66 MHz PCI" ; \
 	else \
-		>include/config.h ; \
+		>$(obj)include/config.h ; \
 		echo "... 33 MHz PCI" ; \
 	fi
-	@./mkconfig -a SBC8540 ppc mpc85xx sbc8560
+	@$(MKCONFIG) -a SBC8540 ppc mpc85xx sbc8560
 
 sbc8560_config \
 sbc8560_33_config \
 sbc8560_66_config:      unconfig
+	@mkdir -p $(obj)include
 	@if [ "$(findstring _66_,$@)" ] ; then \
-		echo "#define CONFIG_PCI_66"	>>include/config.h ; \
+		echo "#define CONFIG_PCI_66"	>>$(obj)include/config.h ; \
 		echo "... 66 MHz PCI" ; \
 	else \
-		>include/config.h ; \
+		>$(obj)include/config.h ; \
 		echo "... 33 MHz PCI" ; \
 	fi
-	@./mkconfig -a sbc8560 ppc mpc85xx sbc8560
+	@$(MKCONFIG) -a sbc8560 ppc mpc85xx sbc8560
 
 stxgp3_config:		unconfig
-	@./mkconfig $(@:_config=) ppc mpc85xx stxgp3
+	@$(MKCONFIG) $(@:_config=) ppc mpc85xx stxgp3
 
 TQM8540_config		\
 TQM8541_config		\
 TQM8555_config		\
 TQM8560_config:		unconfig
+	@mkdir -p $(obj)include
 	@CTYPE=$(subst TQM,,$(@:_config=)); \
-	>include/config.h ; \
+	>$(obj)include/config.h ; \
 	echo "... TQM"$${CTYPE}; \
-	echo "#define CONFIG_MPC$${CTYPE}">>include/config.h; \
-	echo "#define CONFIG_TQM$${CTYPE}">>include/config.h; \
-	echo "#define CONFIG_HOSTNAME tqm$${CTYPE}">>include/config.h; \
-	echo "#define CONFIG_BOARDNAME \"TQM$${CTYPE}\"">>include/config.h; \
-	echo "#define CFG_BOOTFILE \"bootfile=/tftpboot/tqm$${CTYPE}/uImage\0\"">>include/config.h
-	@./mkconfig -a TQM85xx ppc mpc85xx tqm85xx
+	echo "#define CONFIG_MPC$${CTYPE}">>$(obj)include/config.h; \
+	echo "#define CONFIG_TQM$${CTYPE}">>$(obj)include/config.h; \
+	echo "#define CONFIG_HOSTNAME tqm$${CTYPE}">>$(obj)include/config.h; \
+	echo "#define CONFIG_BOARDNAME \"TQM$${CTYPE}\"">>$(obj)include/config.h; \
+	echo "#define CFG_BOOTFILE \"bootfile=/tftpboot/tqm$${CTYPE}/uImage\0\"">>$(obj)include/config.h
+	@$(MKCONFIG) -a TQM85xx ppc mpc85xx tqm85xx
 
 #########################################################################
 ## 74xx/7xx Systems
 #########################################################################
 
 AmigaOneG3SE_config:	unconfig
-	@./mkconfig $(@:_config=) ppc 74xx_7xx AmigaOneG3SE MAI
+	@$(MKCONFIG) $(@:_config=) ppc 74xx_7xx AmigaOneG3SE MAI
 
 BAB7xx_config: unconfig
-	@./mkconfig $(@:_config=) ppc 74xx_7xx bab7xx eltec
+	@$(MKCONFIG) $(@:_config=) ppc 74xx_7xx bab7xx eltec
 
 CPCI750_config:        unconfig
-	@./mkconfig CPCI750 ppc 74xx_7xx cpci750 esd
+	@$(MKCONFIG) CPCI750 ppc 74xx_7xx cpci750 esd
 
 DB64360_config:  unconfig
-	@./mkconfig DB64360 ppc 74xx_7xx db64360 Marvell
+	@$(MKCONFIG) DB64360 ppc 74xx_7xx db64360 Marvell
 
 DB64460_config:  unconfig
-	@./mkconfig DB64460 ppc 74xx_7xx db64460 Marvell
+	@$(MKCONFIG) DB64460 ppc 74xx_7xx db64460 Marvell
 
 ELPPC_config: unconfig
-	@./mkconfig $(@:_config=) ppc 74xx_7xx elppc eltec
+	@$(MKCONFIG) $(@:_config=) ppc 74xx_7xx elppc eltec
 
 EVB64260_config	\
 EVB64260_750CX_config:	unconfig
-	@./mkconfig EVB64260 ppc 74xx_7xx evb64260
+	@$(MKCONFIG) EVB64260 ppc 74xx_7xx evb64260
 
 P3G4_config: unconfig
-	@./mkconfig $(@:_config=) ppc 74xx_7xx evb64260
+	@$(MKCONFIG) $(@:_config=) ppc 74xx_7xx evb64260
 
 PCIPPC2_config \
 PCIPPC6_config: unconfig
-	@./mkconfig $(@:_config=) ppc 74xx_7xx pcippc2
+	@$(MKCONFIG) $(@:_config=) ppc 74xx_7xx pcippc2
 
 ZUMA_config:	unconfig
-	@./mkconfig $(@:_config=) ppc 74xx_7xx evb64260
+	@$(MKCONFIG) $(@:_config=) ppc 74xx_7xx evb64260
 
 ppmc7xx_config: unconfig
-	@./mkconfig $(@:_config=) ppc 74xx_7xx ppmc7xx
+	@$(MKCONFIG) $(@:_config=) ppc 74xx_7xx ppmc7xx
 
 #========================================================================
 # ARM
@@ -1541,19 +1666,19 @@
 #########################################################################
 
 assabet_config	:	unconfig
-	@./mkconfig $(@:_config=) arm sa1100 assabet
+	@$(MKCONFIG) $(@:_config=) arm sa1100 assabet
 
 dnp1110_config	:	unconfig
-	@./mkconfig $(@:_config=) arm sa1100 dnp1110
+	@$(MKCONFIG) $(@:_config=) arm sa1100 dnp1110
 
 gcplus_config	:	unconfig
-	@./mkconfig $(@:_config=) arm sa1100 gcplus
+	@$(MKCONFIG) $(@:_config=) arm sa1100 gcplus
 
 lart_config	:	unconfig
-	@./mkconfig $(@:_config=) arm sa1100 lart
+	@$(MKCONFIG) $(@:_config=) arm sa1100 lart
 
 shannon_config	:	unconfig
-	@./mkconfig $(@:_config=) arm sa1100 shannon
+	@$(MKCONFIG) $(@:_config=) arm sa1100 shannon
 
 #########################################################################
 ## ARM92xT Systems
@@ -1566,16 +1691,16 @@
 xtract_omap730p2 = $(subst _cs0boot,,$(subst _cs3boot,, $(subst _config,,$1)))
 
 at91rm9200dk_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm920t at91rm9200dk NULL at91rm9200
+	@$(MKCONFIG) $(@:_config=) arm arm920t at91rm9200dk NULL at91rm9200
 
 cmc_pu2_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm920t cmc_pu2 NULL at91rm9200
+	@$(MKCONFIG) $(@:_config=) arm arm920t cmc_pu2 NULL at91rm9200
 
 csb637_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm920t csb637 NULL at91rm9200
+	@$(MKCONFIG) $(@:_config=) arm arm920t csb637 NULL at91rm9200
 
 mp2usb_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm920t mp2usb NULL at91rm9200
+	@$(MKCONFIG) $(@:_config=) arm arm920t mp2usb NULL at91rm9200
 
 
 ########################################################################
@@ -1605,34 +1730,35 @@
 	@board/integratorcp/split_by_variant.sh $@
 
 kb9202_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm920t kb9202 NULL at91rm9200
+	@$(MKCONFIG) $(@:_config=) arm arm920t kb9202 NULL at91rm9200
 
 lpd7a400_config \
 lpd7a404_config:	unconfig
-	@./mkconfig $(@:_config=) arm lh7a40x lpd7a40x
+	@$(MKCONFIG) $(@:_config=) arm lh7a40x lpd7a40x
 
 mx1ads_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm920t mx1ads NULL imx
+	@$(MKCONFIG) $(@:_config=) arm arm920t mx1ads NULL imx
 
 mx1fs2_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm920t mx1fs2 NULL imx
+	@$(MKCONFIG) $(@:_config=) arm arm920t mx1fs2 NULL imx
 
 netstar_32_config	\
 netstar_config:		unconfig
+	@mkdir -p $(obj)include
 	@if [ "$(findstring _32_,$@)" ] ; then \
 		echo "... 32MB SDRAM" ; \
-		echo "#define PHYS_SDRAM_1_SIZE SZ_32M" >>include/config.h ; \
+		echo "#define PHYS_SDRAM_1_SIZE SZ_32M" >>$(obj)include/config.h ; \
 	else \
 		echo "... 64MB SDRAM" ; \
-		echo "#define PHYS_SDRAM_1_SIZE SZ_64M" >>include/config.h ; \
+		echo "#define PHYS_SDRAM_1_SIZE SZ_64M" >>$(obj)include/config.h ; \
 	fi
-	@./mkconfig -a netstar arm arm925t netstar
+	@$(MKCONFIG) -a netstar arm arm925t netstar
 
 omap1510inn_config :	unconfig
-	@./mkconfig $(@:_config=) arm arm925t omap1510inn
+	@$(MKCONFIG) $(@:_config=) arm arm925t omap1510inn
 
 omap5912osk_config :	unconfig
-	@./mkconfig $(@:_config=) arm arm926ejs omap5912osk NULL omap
+	@$(MKCONFIG) $(@:_config=) arm arm926ejs omap5912osk NULL omap
 
 omap1610inn_config \
 omap1610inn_cs0boot_config \
@@ -1642,72 +1768,76 @@
 omap1610h2_cs0boot_config \
 omap1610h2_cs3boot_config \
 omap1610h2_cs_autoboot_config:	unconfig
+	@mkdir -p $(obj)include
 	@if [ "$(findstring _cs0boot_, $@)" ] ; then \
-		echo "#define CONFIG_CS0_BOOT" >> ./include/config.h ; \
+		echo "#define CONFIG_CS0_BOOT" >> .$(obj)/include/config.h ; \
 		echo "... configured for CS0 boot"; \
 	elif [ "$(findstring _cs_autoboot_, $@)" ] ; then \
-		echo "#define CONFIG_CS_AUTOBOOT" >> ./include/config.h ; \
+		echo "#define CONFIG_CS_AUTOBOOT" >> $(obj)./include/config.h ; \
 		echo "... configured for CS_AUTO boot"; \
 	else \
-		echo "#define CONFIG_CS3_BOOT" >> ./include/config.h ; \
+		echo "#define CONFIG_CS3_BOOT" >> $(obj)./include/config.h ; \
 		echo "... configured for CS3 boot"; \
 	fi;
-	@./mkconfig -a $(call xtract_omap1610xxx,$@) arm arm926ejs omap1610inn NULL omap
+	@$(MKCONFIG) -a $(call xtract_omap1610xxx,$@) arm arm926ejs omap1610inn NULL omap
 
 omap730p2_config \
 omap730p2_cs0boot_config \
 omap730p2_cs3boot_config :	unconfig
+	@mkdir -p $(obj)include
 	@if [ "$(findstring _cs0boot_, $@)" ] ; then \
-		echo "#define CONFIG_CS0_BOOT" >> ./include/config.h ; \
+		echo "#define CONFIG_CS0_BOOT" >> $(obj)include/config.h ; \
 		echo "... configured for CS0 boot"; \
 	else \
-		echo "#define CONFIG_CS3_BOOT" >> ./include/config.h ; \
+		echo "#define CONFIG_CS3_BOOT" >> $(obj)include/config.h ; \
 		echo "... configured for CS3 boot"; \
 	fi;
-	@./mkconfig -a $(call xtract_omap730p2,$@) arm arm926ejs omap730p2 NULL omap
+	@$(MKCONFIG) -a $(call xtract_omap730p2,$@) arm arm926ejs omap730p2 NULL omap
 
 sbc2410x_config: unconfig
-	@./mkconfig $(@:_config=) arm arm920t sbc2410x NULL s3c24x0
+	@$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0
 
 scb9328_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm920t scb9328 NULL imx
+	@$(MKCONFIG) $(@:_config=) arm arm920t scb9328 NULL imx
 
 smdk2400_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm920t smdk2400 NULL s3c24x0
+	@$(MKCONFIG) $(@:_config=) arm arm920t smdk2400 NULL s3c24x0
 
 smdk2410_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
+	@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
 
 SX1_config :		unconfig
-	@./mkconfig $(@:_config=) arm arm925t sx1
+	@$(MKCONFIG) $(@:_config=) arm arm925t sx1
 
 # TRAB default configuration:	8 MB Flash, 32 MB RAM
 trab_config \
 trab_bigram_config \
 trab_bigflash_config \
 trab_old_config:	unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@mkdir -p $(obj)board/trab
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring _bigram,$@)" ] || \
-		{ echo "#define CONFIG_FLASH_8MB"  >>include/config.h ; \
-		  echo "#define CONFIG_RAM_32MB"   >>include/config.h ; \
+		{ echo "#define CONFIG_FLASH_8MB"  >>$(obj)include/config.h ; \
+		  echo "#define CONFIG_RAM_32MB"   >>$(obj)include/config.h ; \
 		  echo "... with 8 MB Flash, 32 MB RAM" ; \
 		}
 	@[ -z "$(findstring _bigflash,$@)" ] || \
-		{ echo "#define CONFIG_FLASH_16MB" >>include/config.h ; \
-		  echo "#define CONFIG_RAM_16MB"   >>include/config.h ; \
+		{ echo "#define CONFIG_FLASH_16MB" >>$(obj)include/config.h ; \
+		  echo "#define CONFIG_RAM_16MB"   >>$(obj)include/config.h ; \
 		  echo "... with 16 MB Flash, 16 MB RAM" ; \
-		  echo "TEXT_BASE = 0x0CF40000" >board/trab/config.tmp ; \
+		  echo "TEXT_BASE = 0x0CF40000" >$(obj)board/trab/config.tmp ; \
 		}
 	@[ -z "$(findstring _old,$@)" ] || \
-		{ echo "#define CONFIG_FLASH_8MB"  >>include/config.h ; \
-		  echo "#define CONFIG_RAM_16MB"   >>include/config.h ; \
+		{ echo "#define CONFIG_FLASH_8MB"  >>$(obj)include/config.h ; \
+		  echo "#define CONFIG_RAM_16MB"   >>$(obj)include/config.h ; \
 		  echo "... with 8 MB Flash, 16 MB RAM" ; \
-		  echo "TEXT_BASE = 0x0CF40000" >board/trab/config.tmp ; \
+		  echo "TEXT_BASE = 0x0CF40000" >$(obj)board/trab/config.tmp ; \
 		}
-	@./mkconfig -a $(call xtract_trab,$@) arm arm920t trab NULL s3c24x0
+	@$(MKCONFIG) -a $(call xtract_trab,$@) arm arm920t trab NULL s3c24x0
 
 VCMA9_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm920t vcma9 mpl s3c24x0
+	@$(MKCONFIG) $(@:_config=) arm arm920t vcma9 mpl s3c24x0
 
 #========================================================================
 # ARM supplied Versatile development boards
@@ -1719,117 +1849,120 @@
 
 voiceblue_smallflash_config	\
 voiceblue_config:	unconfig
+	@mkdir -p $(obj)include
+	@mkdir -p $(obj)board/voiceblue
 	@if [ "$(findstring _smallflash_,$@)" ] ; then \
 		echo "... boot from lower flash bank" ; \
-		echo "#define VOICEBLUE_SMALL_FLASH" >>include/config.h ; \
-		echo "VOICEBLUE_SMALL_FLASH=y" >board/voiceblue/config.tmp ; \
+		echo "#define VOICEBLUE_SMALL_FLASH" >>$(obj)include/config.h ; \
+		echo "VOICEBLUE_SMALL_FLASH=y" >$(obj)board/voiceblue/config.tmp ; \
 	else \
 		echo "... boot from upper flash bank" ; \
-		>include/config.h ; \
-		echo "VOICEBLUE_SMALL_FLASH=n" >board/voiceblue/config.tmp ; \
+		>$(obj)include/config.h ; \
+		echo "VOICEBLUE_SMALL_FLASH=n" >$(obj)board/voiceblue/config.tmp ; \
 	fi
-	@./mkconfig -a voiceblue arm arm925t voiceblue
+	@$(MKCONFIG) -a voiceblue arm arm925t voiceblue
 
 cm4008_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm920t cm4008 NULL ks8695
+	@$(MKCONFIG) $(@:_config=) arm arm920t cm4008 NULL ks8695
 
 cm41xx_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm920t cm41xx NULL ks8695
+	@$(MKCONFIG) $(@:_config=) arm arm920t cm41xx NULL ks8695
 
 gth2_config		: 	unconfig
-	@ >include/config.h
-	@echo "#define CONFIG_GTH2 1" >>include/config.h
-	@./mkconfig -a gth2 mips mips gth2
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
+	@echo "#define CONFIG_GTH2 1" >>$(obj)include/config.h
+	@$(MKCONFIG) -a gth2 mips mips gth2
 
 #########################################################################
 ## S3C44B0 Systems
 #########################################################################
 
 B2_config	:	unconfig
-	@./mkconfig $(@:_config=) arm s3c44b0 B2 dave
+	@$(MKCONFIG) $(@:_config=) arm s3c44b0 B2 dave
 
 #########################################################################
 ## ARM720T Systems
 #########################################################################
 
 armadillo_config:	unconfig
-	@./mkconfig $(@:_config=) arm arm720t armadillo
+	@$(MKCONFIG) $(@:_config=) arm arm720t armadillo
 
 ep7312_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm720t ep7312
+	@$(MKCONFIG) $(@:_config=) arm arm720t ep7312
 
 impa7_config	:	unconfig
-	@./mkconfig $(@:_config=) arm arm720t impa7
+	@$(MKCONFIG) $(@:_config=) arm arm720t impa7
 
 modnet50_config :	unconfig
-	@./mkconfig $(@:_config=) arm arm720t modnet50
+	@$(MKCONFIG) $(@:_config=) arm arm720t modnet50
 
 evb4510_config :	unconfig
-	@./mkconfig $(@:_config=) arm arm720t evb4510
+	@$(MKCONFIG) $(@:_config=) arm arm720t evb4510
 
 #########################################################################
 ## XScale Systems
 #########################################################################
 
 adsvix_config	:	unconfig
-	@./mkconfig $(@:_config=) arm pxa adsvix
+	@$(MKCONFIG) $(@:_config=) arm pxa adsvix
 
 cerf250_config :	unconfig
-	@./mkconfig $(@:_config=) arm pxa cerf250
+	@$(MKCONFIG) $(@:_config=) arm pxa cerf250
 
 cradle_config	:	unconfig
-	@./mkconfig $(@:_config=) arm pxa cradle
+	@$(MKCONFIG) $(@:_config=) arm pxa cradle
 
 csb226_config	:	unconfig
-	@./mkconfig $(@:_config=) arm pxa csb226
+	@$(MKCONFIG) $(@:_config=) arm pxa csb226
 
 delta_config :
-	@./mkconfig $(@:_config=) arm pxa delta
+	@$(MKCONFIG) $(@:_config=) arm pxa delta
 
 innokom_config	:	unconfig
-	@./mkconfig $(@:_config=) arm pxa innokom
+	@$(MKCONFIG) $(@:_config=) arm pxa innokom
 
 ixdp425_config	:	unconfig
-	@./mkconfig $(@:_config=) arm ixp ixdp425
+	@$(MKCONFIG) $(@:_config=) arm ixp ixdp425
 
 ixdpg425_config	:	unconfig
-	@./mkconfig $(@:_config=) arm ixp ixdp425
+	@$(MKCONFIG) $(@:_config=) arm ixp ixdp425
 
 lubbock_config	:	unconfig
-	@./mkconfig $(@:_config=) arm pxa lubbock
+	@$(MKCONFIG) $(@:_config=) arm pxa lubbock
 
 pleb2_config	:	unconfig
-	@./mkconfig $(@:_config=) arm pxa pleb2
+	@$(MKCONFIG) $(@:_config=) arm pxa pleb2
 
 logodl_config	:	unconfig
-	@./mkconfig $(@:_config=) arm pxa logodl
+	@$(MKCONFIG) $(@:_config=) arm pxa logodl
 
 pdnb3_config	:	unconfig
-	@./mkconfig $(@:_config=) arm ixp pdnb3 prodrive
+	@$(MKCONFIG) $(@:_config=) arm ixp pdnb3 prodrive
 
 pxa255_idp_config:	unconfig
-	@./mkconfig $(@:_config=) arm pxa pxa255_idp
+	@$(MKCONFIG) $(@:_config=) arm pxa pxa255_idp
 
 wepep250_config	:	unconfig
-	@./mkconfig $(@:_config=) arm pxa wepep250
+	@$(MKCONFIG) $(@:_config=) arm pxa wepep250
 
 xaeniax_config	:	unconfig
-	@./mkconfig $(@:_config=) arm pxa xaeniax
+	@$(MKCONFIG) $(@:_config=) arm pxa xaeniax
 
 xm250_config	:	unconfig
-	@./mkconfig $(@:_config=) arm pxa xm250
+	@$(MKCONFIG) $(@:_config=) arm pxa xm250
 
 xsengine_config :	unconfig
-	@./mkconfig $(@:_config=) arm pxa xsengine
+	@$(MKCONFIG) $(@:_config=) arm pxa xsengine
 
 zylonite_config :
-	@./mkconfig $(@:_config=) arm pxa zylonite
+	@$(MKCONFIG) $(@:_config=) arm pxa zylonite
 
 #########################################################################
 ## ARM1136 Systems
 #########################################################################
 omap2420h4_config :    unconfig
-	@./mkconfig $(@:_config=) arm arm1136 omap2420h4
+	@$(MKCONFIG) $(@:_config=) arm arm1136 omap2420h4
 
 #========================================================================
 # i386
@@ -1838,13 +1971,13 @@
 ## AMD SC520 CDP
 #########################################################################
 sc520_cdp_config	:	unconfig
-	@./mkconfig $(@:_config=) i386 i386 sc520_cdp
+	@$(MKCONFIG) $(@:_config=) i386 i386 sc520_cdp
 
 sc520_spunk_config	:	unconfig
-	@./mkconfig $(@:_config=) i386 i386 sc520_spunk
+	@$(MKCONFIG) $(@:_config=) i386 i386 sc520_spunk
 
 sc520_spunk_rel_config	:	unconfig
-	@./mkconfig $(@:_config=) i386 i386 sc520_spunk
+	@$(MKCONFIG) $(@:_config=) i386 i386 sc520_spunk
 
 #========================================================================
 # MIPS
@@ -1859,63 +1992,70 @@
 incaip_133MHz_config	\
 incaip_150MHz_config	\
 incaip_config: unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring _100MHz,$@)" ] || \
-		{ echo "#define CPU_CLOCK_RATE 100000000" >>include/config.h ; \
+		{ echo "#define CPU_CLOCK_RATE 100000000" >>$(obj)include/config.h ; \
 		  echo "... with 100MHz system clock" ; \
 		}
 	@[ -z "$(findstring _133MHz,$@)" ] || \
-		{ echo "#define CPU_CLOCK_RATE 133000000" >>include/config.h ; \
+		{ echo "#define CPU_CLOCK_RATE 133000000" >>$(obj)include/config.h ; \
 		  echo "... with 133MHz system clock" ; \
 		}
 	@[ -z "$(findstring _150MHz,$@)" ] || \
-		{ echo "#define CPU_CLOCK_RATE 150000000" >>include/config.h ; \
+		{ echo "#define CPU_CLOCK_RATE 150000000" >>$(obj)include/config.h ; \
 		  echo "... with 150MHz system clock" ; \
 		}
-	@./mkconfig -a $(call xtract_incaip,$@) mips mips incaip
+	@$(MKCONFIG) -a $(call xtract_incaip,$@) mips mips incaip
 
 tb0229_config: unconfig
-	@./mkconfig $(@:_config=) mips mips tb0229
+	@$(MKCONFIG) $(@:_config=) mips mips tb0229
 
 #########################################################################
 ## MIPS32 AU1X00
 #########################################################################
 dbau1000_config		: 	unconfig
-	@ >include/config.h
-	@echo "#define CONFIG_DBAU1000 1" >>include/config.h
-	@./mkconfig -a dbau1x00 mips mips dbau1x00
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
+	@echo "#define CONFIG_DBAU1000 1" >>$(obj)include/config.h
+	@$(MKCONFIG) -a dbau1x00 mips mips dbau1x00
 
 dbau1100_config		: 	unconfig
-	@ >include/config.h
-	@echo "#define CONFIG_DBAU1100 1" >>include/config.h
-	@./mkconfig -a dbau1x00 mips mips dbau1x00
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
+	@echo "#define CONFIG_DBAU1100 1" >>$(obj)include/config.h
+	@$(MKCONFIG) -a dbau1x00 mips mips dbau1x00
 
 dbau1500_config		: 	unconfig
-	@ >include/config.h
-	@echo "#define CONFIG_DBAU1500 1" >>include/config.h
-	@./mkconfig -a dbau1x00 mips mips dbau1x00
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
+	@echo "#define CONFIG_DBAU1500 1" >>$(obj)include/config.h
+	@$(MKCONFIG) -a dbau1x00 mips mips dbau1x00
 
 dbau1550_config		:	unconfig
-	@ >include/config.h
-	@echo "#define CONFIG_DBAU1550 1" >>include/config.h
-	@./mkconfig -a dbau1x00 mips mips dbau1x00
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
+	@echo "#define CONFIG_DBAU1550 1" >>$(obj)include/config.h
+	@$(MKCONFIG) -a dbau1x00 mips mips dbau1x00
 
 dbau1550_el_config	:	unconfig
-	@ >include/config.h
-	@echo "#define CONFIG_DBAU1550 1" >>include/config.h
-	@./mkconfig -a dbau1x00 mips mips dbau1x00
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
+	@echo "#define CONFIG_DBAU1550 1" >>$(obj)include/config.h
+	@$(MKCONFIG) -a dbau1x00 mips mips dbau1x00
 
 pb1000_config		: 	unconfig
-	@ >include/config.h
-	@echo "#define CONFIG_PB1000 1" >>include/config.h
-	@./mkconfig -a pb1x00 mips mips pb1x00
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
+	@echo "#define CONFIG_PB1000 1" >>$(obj)include/config.h
+	@$(MKCONFIG) -a pb1x00 mips mips pb1x00
 
 #########################################################################
 ## MIPS64 5Kc
 #########################################################################
 
 purple_config :		unconfig
-	@./mkconfig $(@:_config=) mips mips purple
+	@$(MKCONFIG) $(@:_config=) mips mips purple
 
 #========================================================================
 # Nios
@@ -1927,80 +2067,83 @@
 DK1C20_safe_32_config		\
 DK1C20_standard_32_config	\
 DK1C20_config:	unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring _safe_32,$@)" ] || \
-		{ echo "#define CONFIG_NIOS_SAFE_32 1" >>include/config.h ; \
+		{ echo "#define CONFIG_NIOS_SAFE_32 1" >>$(obj)include/config.h ; \
 		  echo "... NIOS 'safe_32' configuration" ; \
 		}
 	@[ -z "$(findstring _standard_32,$@)" ] || \
-		{ echo "#define CONFIG_NIOS_STANDARD_32 1" >>include/config.h ; \
+		{ echo "#define CONFIG_NIOS_STANDARD_32 1" >>$(obj)include/config.h ; \
 		  echo "... NIOS 'standard_32' configuration" ; \
 		}
 	@[ -z "$(findstring DK1C20_config,$@)" ] || \
-		{ echo "#define CONFIG_NIOS_STANDARD_32 1" >>include/config.h ; \
+		{ echo "#define CONFIG_NIOS_STANDARD_32 1" >>$(obj)include/config.h ; \
 		  echo "... NIOS 'standard_32' configuration (DEFAULT)" ; \
 		}
-	@./mkconfig -a DK1C20 nios nios dk1c20 altera
+	@$(MKCONFIG) -a DK1C20 nios nios dk1c20 altera
 
 DK1S10_safe_32_config		\
 DK1S10_standard_32_config	\
 DK1S10_mtx_ldk_20_config	\
 DK1S10_config:	unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring _safe_32,$@)" ] || \
-		{ echo "#define CONFIG_NIOS_SAFE_32 1" >>include/config.h ; \
+		{ echo "#define CONFIG_NIOS_SAFE_32 1" >>$(obj)include/config.h ; \
 		  echo "... NIOS 'safe_32' configuration" ; \
 		}
 	@[ -z "$(findstring _standard_32,$@)" ] || \
-		{ echo "#define CONFIG_NIOS_STANDARD_32 1" >>include/config.h ; \
+		{ echo "#define CONFIG_NIOS_STANDARD_32 1" >>$(obj)include/config.h ; \
 		  echo "... NIOS 'standard_32' configuration" ; \
 		}
 	@[ -z "$(findstring _mtx_ldk_20,$@)" ] || \
-		{ echo "#define CONFIG_NIOS_MTX_LDK_20 1" >>include/config.h ; \
+		{ echo "#define CONFIG_NIOS_MTX_LDK_20 1" >>$(obj)include/config.h ; \
 		  echo "... NIOS 'mtx_ldk_20' configuration" ; \
 		}
 	@[ -z "$(findstring DK1S10_config,$@)" ] || \
-		{ echo "#define CONFIG_NIOS_STANDARD_32 1" >>include/config.h ; \
+		{ echo "#define CONFIG_NIOS_STANDARD_32 1" >>$(obj)include/config.h ; \
 		  echo "... NIOS 'standard_32' configuration (DEFAULT)" ; \
 		}
-	@./mkconfig -a DK1S10 nios nios dk1s10 altera
+	@$(MKCONFIG) -a DK1S10 nios nios dk1s10 altera
 
 ADNPESC1_DNPEVA2_base_32_config	\
 ADNPESC1_base_32_config		\
 ADNPESC1_config: unconfig
-	@ >include/config.h
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
 	@[ -z "$(findstring _DNPEVA2,$@)" ] || \
-		{ echo "#define CONFIG_DNPEVA2 1" >>include/config.h ; \
+		{ echo "#define CONFIG_DNPEVA2 1" >>$(obj)include/config.h ; \
 		  echo "... DNP/EVA2 configuration" ; \
 		}
 	@[ -z "$(findstring _base_32,$@)" ] || \
-		{ echo "#define CONFIG_NIOS_BASE_32 1" >>include/config.h ; \
+		{ echo "#define CONFIG_NIOS_BASE_32 1" >>$(obj)include/config.h ; \
 		  echo "... NIOS 'base_32' configuration" ; \
 		}
 	@[ -z "$(findstring ADNPESC1_config,$@)" ] || \
-		{ echo "#define CONFIG_NIOS_BASE_32 1" >>include/config.h ; \
+		{ echo "#define CONFIG_NIOS_BASE_32 1" >>$(obj)include/config.h ; \
 		  echo "... NIOS 'base_32' configuration (DEFAULT)" ; \
 		}
-	@./mkconfig -a ADNPESC1 nios nios adnpesc1 ssv
+	@$(MKCONFIG) -a ADNPESC1 nios nios adnpesc1 ssv
 
 #########################################################################
 ## Nios-II
 #########################################################################
 
 EP1C20_config : unconfig
-	@./mkconfig  EP1C20 nios2 nios2 ep1c20 altera
+	@$(MKCONFIG)  EP1C20 nios2 nios2 ep1c20 altera
 
 EP1S10_config : unconfig
-	@./mkconfig  EP1S10 nios2 nios2 ep1s10 altera
+	@$(MKCONFIG)  EP1S10 nios2 nios2 ep1s10 altera
 
 EP1S40_config : unconfig
-	@./mkconfig  EP1S40 nios2 nios2 ep1s40 altera
+	@$(MKCONFIG)  EP1S40 nios2 nios2 ep1s40 altera
 
 PK1C20_config : unconfig
-	@./mkconfig  PK1C20 nios2 nios2 pk1c20 psyent
+	@$(MKCONFIG)  PK1C20 nios2 nios2 pk1c20 psyent
 
 PCI5441_config : unconfig
-	@./mkconfig  PCI5441 nios2 nios2 pci5441 psyent
+	@$(MKCONFIG)  PCI5441 nios2 nios2 pci5441 psyent
 
 #========================================================================
 # MicroBlaze
@@ -2009,62 +2152,70 @@
 ## Microblaze
 #########################################################################
 suzaku_config:	unconfig
-	@ >include/config.h
-	@echo "#define CONFIG_SUZAKU 1" >> include/config.h
-	@./mkconfig -a $(@:_config=) microblaze microblaze suzaku AtmarkTechno
+	@mkdir -p $(obj)include
+	@ >$(obj)include/config.h
+	@echo "#define CONFIG_SUZAKU 1" >> $(obj)include/config.h
+	@$(MKCONFIG) -a $(@:_config=) microblaze microblaze suzaku AtmarkTechno
 
 #########################################################################
 ## Blackfin
 #########################################################################
 ezkit533_config	:	unconfig
-	@./mkconfig $(@:_config=) blackfin bf533 ezkit533
+	@$(MKCONFIG) $(@:_config=) blackfin bf533 ezkit533
 
 stamp_config	:	unconfig
-	@./mkconfig $(@:_config=) blackfin bf533 stamp
+	@$(MKCONFIG) $(@:_config=) blackfin bf533 stamp
 
 dspstamp_config	:	unconfig
-	@./mkconfig $(@:_config=) blackfin bf533 dsp_stamp
+	@$(MKCONFIG) $(@:_config=) blackfin bf533 dsp_stamp
 
 #########################################################################
 #########################################################################
 #########################################################################
 
 clean:
-	find . -type f \
+	find $(OBJTREE) -type f \
 		\( -name 'core' -o -name '*.bak' -o -name '*~' \
 		-o -name '*.o'  -o -name '*.a'  \) -print \
 		| xargs rm -f
-	rm -f examples/hello_world examples/timer \
-	      examples/eepro100_eeprom examples/sched \
-	      examples/mem_to_mem_idma2intr examples/82559_eeprom \
-	      examples/smc91111_eeprom \
-	      examples/test_burst
-	rm -f tools/img2srec tools/mkimage tools/envcrc tools/gen_eth_addr
-	rm -f tools/mpc86x_clk tools/ncb
-	rm -f tools/easylogo/easylogo tools/bmp_logo
-	rm -f tools/gdb/astest tools/gdb/gdbcont tools/gdb/gdbsend
-	rm -f tools/env/fw_printenv tools/env/fw_setenv
-	rm -f board/cray/L1/bootscript.c board/cray/L1/bootscript.image
-	rm -f board/netstar/eeprom board/netstar/crcek
-	rm -f board/netstar/*.srec board/netstar/*.bin
-	rm -f board/trab/trab_fkt board/voiceblue/eeprom
-	rm -f board/integratorap/u-boot.lds board/integratorcp/u-boot.lds
-	rm -f include/bmp_logo.h
+	rm -f $(obj)examples/hello_world $(obj)examples/timer \
+	      $(obj)examples/eepro100_eeprom $(obj)examples/sched \
+	      $(obj)examples/mem_to_mem_idma2intr $(obj)examples/82559_eeprom \
+	      $(obj)examples/smc91111_eeprom \
+	      $(obj)examples/test_burst
+	rm -f $(obj)tools/img2srec $(obj)tools/mkimage $(obj)tools/envcrc \
+		$(obj)tools/gen_eth_addr
+	rm -f $(obj)tools/mpc86x_clk $(obj)tools/ncb
+	rm -f $(obj)tools/easylogo/easylogo $(obj)tools/bmp_logo
+	rm -f $(obj)tools/gdb/astest $(obj)tools/gdb/gdbcont $(obj)tools/gdb/gdbsend
+	rm -f $(obj)tools/env/fw_printenv $(obj)tools/env/fw_setenv
+	rm -f $(obj)board/cray/L1/bootscript.c $(obj)board/cray/L1/bootscript.image
+	rm -f $(obj)board/netstar/eeprom $(obj)board/netstar/crcek $(obj)board/netstar/crcit
+	rm -f $(obj)board/netstar/*.srec $(obj)board/netstar/*.bin
+	rm -f $(obj)board/trab/trab_fkt $(obj)board/voiceblue/eeprom
+	rm -f $(obj)board/integratorap/u-boot.lds $(obj)board/integratorcp/u-boot.lds
+	rm -f $(obj)include/bmp_logo.h
 
 clobber:	clean
-	find . -type f \( -name .depend \
+	find $(OBJTREE) -type f \( -name .depend \
 		-o -name '*.srec' -o -name '*.bin' -o -name u-boot.img \) \
 		-print0 \
 		| xargs -0 rm -f
-	rm -f $(OBJS) *.bak tags TAGS include/version_autogenerated.h
-	rm -fr *.*~
-	rm -f u-boot u-boot.map u-boot.hex $(ALL)
-	rm -f tools/crc32.c tools/environment.c tools/env/crc32.c
-	rm -f tools/inca-swap-bytes cpu/mpc824x/bedbug_603e.c
-	rm -f include/asm/proc include/asm/arch include/asm
+	rm -f $(OBJS) $(obj)*.bak $(obj)ctags $(obj)etags $(obj)TAGS $(obj)include/version_autogenerated.h
+	rm -fr $(obj)*.*~
+	rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL)
+	rm -f $(obj)tools/crc32.c $(obj)tools/environment.c $(obj)tools/env/crc32.c
+	rm -f $(obj)tools/inca-swap-bytes $(obj)cpu/mpc824x/bedbug_603e.c
+	rm -f $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm
 
+ifeq ($(OBJTREE),$(SRCTREE))
+mrproper \
+distclean:	clobber unconfig
+else
 mrproper \
 distclean:	clobber unconfig
+	rm -rf $(OBJTREE)/*
+endif
 
 backup:
 	F=`basename $(TOPDIR)` ; cd .. ; \