Index: rules.mk
===================================================================
--- rules.mk	(revision 10371)
+++ rules.mk	(working copy)
@@ -8,6 +8,7 @@
 ifneq ($(__rules_inc),1)
 __rules_inc=1
 
+
 ifeq ($(DUMP),)
   -include $(TOPDIR)/.config
 endif
@@ -23,6 +24,11 @@
 endef
 #"))
 
+BUILD_BASE:=$(TOPDIR)
+BIN_DIR_BASE:=$(BUILD_BASE)/bin
+BUILD_DIR_BASE:=$(BUILD_BASE)/build_dir
+STAGING_DIR_BASE:=$(BUILD_BASE)/staging_dir
+
 ARCH:=$(call qstrip,$(shell echo $(CONFIG_ARCH) | sed -e 's/i[3-9]86/i386/'))
 BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD))
 TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION))
@@ -33,20 +39,21 @@
 OPTIMIZE_FOR_CPU=$(ARCH)
 
 DL_DIR:=$(if $(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(TOPDIR)/dl)
-BIN_DIR:=$(TOPDIR)/bin
 INCLUDE_DIR:=$(TOPDIR)/include
 SCRIPT_DIR:=$(TOPDIR)/scripts
-BUILD_DIR_BASE:=$(TOPDIR)/build_dir
+
 BUILD_DIR:=$(BUILD_DIR_BASE)/$(ARCH)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
+BIN_DIR:=$(BIN_DIR_BASE)
 BUILD_DIR_HOST:=$(BUILD_DIR_BASE)/host
 BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/toolchain-$(ARCH)_gcc$(GCCV)
-STAGING_DIR:=$(TOPDIR)/staging_dir/$(ARCH)
-STAGING_DIR_HOST:=$(TOPDIR)/staging_dir/host
-TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/toolchain-$(ARCH)_gcc$(GCCV)
-PACKAGE_DIR:=$(BIN_DIR)/packages/$(TARGET)
+STAGING_DIR:=$(STAGING_DIR_BASE)/$(ARCH)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
+STAGING_DIR_HOST:=$(STAGING_DIR_BASE)/host
+TOOLCHAIN_DIR:=$(STAGING_DIR_BASE)/toolchain-$(ARCH)_gcc$(GCCV)
+PACKAGE_DIR:=$(BIN_DIR)/packages$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
 STAMP_DIR:=$(BUILD_DIR)/stamp
 STAMP_DIR_HOST=$(BUILD_DIR_HOST)/stamp
-TARGET_DIR:=$(BUILD_DIR)/root-$(BOARD)
+TARGET_DIR_BASE?=$(if $(call qstrip,$(CONFIG_TARGET_DIR_BASE)),$(call qstrip,$(CONFIG_TARGET_DIR_BASE)),$(BUILD_DIR))
+TARGET_DIR:=$(TARGET_DIR_BASE)/root-$(BOARD)
 IPKG_STATE_DIR:=$(TARGET_DIR)/usr/lib/ipkg
 
 ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
