HAVE_VENDOR_COMMON_LIB = $(if $(wildcard board/$(VENDOR)/common/Makefile),y,n)
 
-LIBS-y += lib/libgeneric.o
-LIBS-$(CONFIG_RSA) += lib/rsa/librsa.o
-LIBS-$(CONFIG_LZMA) += lib/lzma/liblzma.o
-LIBS-$(CONFIG_LZO) += lib/lzo/liblzo.o
-LIBS-$(CONFIG_ZLIB) += lib/zlib/libz.o
-LIBS-$(CONFIG_TIZEN) += lib/tizen/libtizen.o
-LIBS-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/lib$(VENDOR).o
-LIBS-y += $(CPUDIR)/lib$(CPU).o
+LIBS-y += lib/
+LIBS-$(CONFIG_RSA) += lib/rsa/
+LIBS-$(CONFIG_LZMA) += lib/lzma/
+LIBS-$(CONFIG_LZO) += lib/lzo/
+LIBS-$(CONFIG_ZLIB) += lib/zlib/
+LIBS-$(CONFIG_TIZEN) += lib/tizen/
+LIBS-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
+LIBS-y += $(CPUDIR)/
 ifdef SOC
-LIBS-y += $(CPUDIR)/$(SOC)/lib$(SOC).o
-endif
-LIBS-$(CONFIG_IXP4XX_NPE) += drivers/net/npe/libnpe.o
-LIBS-$(CONFIG_OF_EMBED) += dts/libdts.o
-LIBS-y += arch/$(ARCH)/lib/lib$(ARCH).o
-LIBS-y += fs/libfs.o \
-       fs/fat/libfat.o
-LIBS-y += net/libnet.o
-LIBS-y += disk/libdisk.o
-LIBS-y += drivers/libdrivers.o
-LIBS-y += drivers/dma/libdma.o
-LIBS-y += drivers/gpio/libgpio.o
-LIBS-y += drivers/i2c/libi2c.o
-LIBS-y += drivers/input/libinput.o
-LIBS-y += drivers/mmc/libmmc.o
-LIBS-y += drivers/mtd/libmtd.o
-LIBS-y += drivers/mtd/nand/libnand.o
-LIBS-y += drivers/mtd/onenand/libonenand.o
-LIBS-y += drivers/mtd/ubi/libubi.o
-LIBS-y += drivers/mtd/spi/libspi_flash.o
-LIBS-y += drivers/net/libnet.o
-LIBS-y += drivers/net/phy/libphy.o
-LIBS-y += drivers/pci/libpci.o
-LIBS-y += drivers/power/libpower.o \
-       drivers/power/fuel_gauge/libfuel_gauge.o \
-       drivers/power/mfd/libmfd.o \
-       drivers/power/pmic/libpmic.o \
-       drivers/power/battery/libbattery.o
-LIBS-y += drivers/spi/libspi.o
-LIBS-$(CONFIG_FMAN_ENET) += drivers/net/fm/libfm.o
-LIBS-y += drivers/serial/libserial.o
-LIBS-y += drivers/usb/eth/libusb_eth.o
-LIBS-y += drivers/usb/gadget/libusb_gadget.o
-LIBS-y += drivers/usb/host/libusb_host.o
-LIBS-y += drivers/usb/musb/libusb_musb.o
-LIBS-y += drivers/usb/musb-new/libusb_musb-new.o
-LIBS-y += drivers/usb/phy/libusb_phy.o
-LIBS-y += drivers/usb/ulpi/libusb_ulpi.o
-LIBS-y += common/libcommon.o
-LIBS-y += lib/libfdt/libfdt.o
-LIBS-y += api/libapi.o
-LIBS-y += post/libpost.o
-LIBS-y += test/libtest.o
+LIBS-y += $(CPUDIR)/$(SOC)/
+endif
+LIBS-$(CONFIG_IXP4XX_NPE) += drivers/net/npe/
+LIBS-$(CONFIG_OF_EMBED) += dts/
+LIBS-y += arch/$(ARCH)/lib/
+LIBS-y += fs/ \
+       fs/fat/
+LIBS-y += net/
+LIBS-y += disk/
+LIBS-y += drivers/
+LIBS-y += drivers/dma/
+LIBS-y += drivers/gpio/
+LIBS-y += drivers/i2c/
+LIBS-y += drivers/input/
+LIBS-y += drivers/mmc/
+LIBS-y += drivers/mtd/
+LIBS-y += drivers/mtd/nand/
+LIBS-y += drivers/mtd/onenand/
+LIBS-y += drivers/mtd/ubi/
+LIBS-y += drivers/mtd/spi/
+LIBS-y += drivers/net/
+LIBS-y += drivers/net/phy/
+LIBS-y += drivers/pci/
+LIBS-y += drivers/power/ \
+       drivers/power/fuel_gauge/ \
+       drivers/power/mfd/ \
+       drivers/power/pmic/ \
+       drivers/power/battery/
+LIBS-y += drivers/spi/
+LIBS-$(CONFIG_FMAN_ENET) += drivers/net/fm/
+LIBS-y += drivers/serial/
+LIBS-y += drivers/usb/eth/
+LIBS-y += drivers/usb/gadget/
+LIBS-y += drivers/usb/host/
+LIBS-y += drivers/usb/musb/
+LIBS-y += drivers/usb/musb-new/
+LIBS-y += drivers/usb/phy/
+LIBS-y += drivers/usb/ulpi/
+LIBS-y += common/
+LIBS-y += lib/libfdt/
+LIBS-y += api/
+LIBS-y += post/
+LIBS-y += test/
 
 ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35 mxs vf610))
-LIBS-y += arch/$(ARCH)/imx-common/libimx-common.o
+LIBS-y += arch/$(ARCH)/imx-common/
 endif
 
-LIBS-$(CONFIG_ARM) += arch/arm/cpu/libcpu.o
-LIBS-$(CONFIG_PPC) += arch/powerpc/cpu/libcpu.o
+LIBS-$(CONFIG_ARM) += arch/arm/cpu/
+LIBS-$(CONFIG_PPC) += arch/powerpc/cpu/
 
-LIBS-y += board/$(BOARDDIR)/lib$(BOARD).o
+LIBS-y += board/$(BOARDDIR)/
 
+LIBS-y := $(patsubst %/, %/built-in.o, $(LIBS-y))
 LIBS := $(addprefix $(obj),$(sort $(LIBS-y)))
 .PHONY : $(LIBS)
 
 
 $(LIBS):       depend $(SUBDIR_TOOLS)
                $(MAKE) $(build) $(dir $(subst $(obj),,$@))
-               mv $(dir $@)built-in.o $@
 
 $(SUBDIRS):    depend
                $(MAKE) -C $@ all
 
        {
                __data_start = .;
 #ifdef CONFIG_OF_EMBED
-               dts/libdts.o (.data)
+               dts/built-in.o (.data)
 #endif
                *(.data)
                __data_end = .;
 
 
     arch/powerpc/cpu/mpc8xx/start.o    (.text*)
     arch/powerpc/cpu/mpc8xx/traps.o    (.text*)
-    common/libcommon.o                 (.text*)
-    arch/powerpc/cpu/mpc8xx/libmpc8xx.o        (.text*)
-    board/LEOX/elpt860/libelpt860.o    (.text*)
-    arch/powerpc/lib/libpowerpc.o      (.text*)
+    common/built-in.o                  (.text*)
+    arch/powerpc/cpu/mpc8xx/built-in.o (.text*)
+    board/LEOX/elpt860/built-in.o      (.text*)
+    arch/powerpc/lib/built-in.o                (.text*)
 
     . = env_offset;
     common/env_embedded.o              (.text*)
 
        .text : {
                *(.__image_copy_start)
                arch/arm/cpu/ixp/start.o(.text*)
-               net/libnet.o(.text*)
-               board/actux1/libactux1.o(.text*)
-               arch/arm/cpu/ixp/libixp.o(.text*)
-               drivers/input/libinput.o(.text*)
+               net/built-in.o(.text*)
+               board/actux1/built-in.o(.text*)
+               arch/arm/cpu/ixp/built-in.o(.text*)
+               drivers/input/built-in.o(.text*)
 
                . = env_offset;
                common/env_embedded.o(.ppcenv)
 
        .text : {
                *(.__image_copy_start)
                arch/arm/cpu/ixp/start.o(.text*)
-               net/libnet.o(.text*)
-               board/actux2/libactux2.o(.text*)
-               arch/arm/cpu/ixp/libixp.o(.text*)
-               drivers/input/libinput.o(.text*)
+               net/built-in.o(.text*)
+               board/actux2/built-in.o(.text*)
+               arch/arm/cpu/ixp/built-in.o(.text*)
+               drivers/input/built-in.o(.text*)
 
                . = env_offset;
                common/env_embedded.o(.ppcenv)
 
        .text : {
                *(.__image_copy_start)
                arch/arm/cpu/ixp/start.o(.text*)
-               net/libnet.o(.text*)
-               board/actux3/libactux3.o(.text*)
-               arch/arm/cpu/ixp/libixp.o(.text*)
-               drivers/input/libinput.o(.text*)
+               net/built-in.o(.text*)
+               board/actux3/built-in.o(.text*)
+               arch/arm/cpu/ixp/built-in.o(.text*)
+               drivers/input/built-in.o(.text*)
 
                . = env_offset;
                common/env_embedded.o(.ppcenv)
 
        .text      :
        {
          arch/arm/cpu/arm926ejs/start.o                (.text*)
-         arch/arm/cpu/arm926ejs/davinci/libdavinci.o   (.text*)
-         drivers/mtd/nand/libnand.o                    (.text*)
+         arch/arm/cpu/arm926ejs/davinci/built-in.o     (.text*)
+         drivers/mtd/nand/built-in.o                   (.text*)
 
          *(.text*)
        }
 
        .text : {
                *(.__image_copy_start)
                arch/arm/cpu/ixp/start.o(.text*)
-               net/libnet.o(.text*)
-               board/dvlhost/libdvlhost.o(.text*)
-               arch/arm/cpu/ixp/libixp.o(.text*)
-               drivers/serial/libserial.o(.text*)
+               net/built-in.o(.text*)
+               board/dvlhost/built-in.o(.text*)
+               arch/arm/cpu/ixp/built-in.o(.text*)
+               drivers/serial/built-in.o(.text*)
 
                . = env_offset;
                common/env_embedded.o(.ppcenv)
 
 
     arch/powerpc/cpu/mpc8xx/start.o    (.text*)
     arch/powerpc/cpu/mpc8xx/traps.o    (.text*)
-    net/libnet.o                       (.text*)
-    board/esteem192e/libesteem192e.o   (.text*)
+    net/built-in.o                     (.text*)
+    board/esteem192e/built-in.o                (.text*)
 
     . = env_offset;
     common/env_embedded.o              (.text*)
 
   .text      :
   {
     arch/m68k/cpu/mcf5227x/start.o     (.text*)
-    arch/m68k/cpu/mcf5227x/libmcf5227x.o       (.text*)
-    arch/m68k/lib/libm68k.o            (.text*)
+    arch/m68k/cpu/mcf5227x/built-in.o  (.text*)
+    arch/m68k/lib/built-in.o           (.text*)
 
     *(.text*)
   }
 
   /* Read-only sections, merged into text segment: */
   .text      :
   {
-    arch/m68k/cpu/mcf532x/start.o              (.text*)
-    arch/m68k/cpu/mcf532x/libmcf532x.o (.text*)
-    arch/m68k/lib/libm68k.o            (.text*)
+    arch/m68k/cpu/mcf532x/start.o      (.text*)
+    arch/m68k/cpu/mcf532x/built-in.o   (.text*)
+    arch/m68k/lib/built-in.o           (.text*)
 
     . = DEFINED(env_offset) ? env_offset : .;
     common/env_embedded.o      (.text*)
 
          /* WARNING - the following is hand-optimized to fit within    */
          /* the sector layout of our flash chips!      XXX FIXME XXX   */
 
-         arch/arm/cpu/arm1136/start.o                  (.text*)
-         board/freescale/mx31ads/libmx31ads.o  (.text*)
-         arch/arm/lib/libarm.o                 (.text*)
-         net/libnet.o                          (.text*)
-         drivers/mtd/libmtd.o                  (.text*)
+         arch/arm/cpu/arm1136/start.o          (.text*)
+         board/freescale/mx31ads/built-in.o    (.text*)
+         arch/arm/lib/built-in.o               (.text*)
+         net/built-in.o                        (.text*)
+         drivers/mtd/built-in.o                (.text*)
 
          . = DEFINED(env_offset) ? env_offset : .;
          common/env_embedded.o(.text*)
 
 
     arch/powerpc/cpu/mpc8xx/start.o    (.text*)
     arch/powerpc/cpu/mpc8xx/traps.o    (.text*)
-    lib/libgeneric.o                   (.text*)
-    net/libnet.o                       (.text*)
-    arch/powerpc/cpu/mpc8xx/libmpc8xx.o        (.text*)
-    board/genietv/libgenietv.o         (.text*)
-    arch/powerpc/lib/libpowerpc.o      (.text*)
+    lib/built-in.o                     (.text*)
+    net/built-in.o                     (.text*)
+    arch/powerpc/cpu/mpc8xx/built-in.o (.text*)
+    board/genietv/built-in.o           (.text*)
+    arch/powerpc/lib/built-in.o                (.text*)
     *(.text.do_load_serial*)
     *(.text.do_mem_*)
     *(.text.do_bootm*)
 
     /* the sector layout of our flash chips!   XXX FIXME XXX   */
     arch/powerpc/cpu/mpc8xx/start.o    (.text*)
     arch/powerpc/cpu/mpc8xx/traps.o    (.text*)
-    board/hermes/libhermes.o           (.text*)
+    board/hermes/built-in.o            (.text*)
 
     . = env_offset;
     common/env_embedded.o              (.text*)
 
     /* the first two sectors (=8KB) of our S29GL flash chip */
     arch/powerpc/cpu/mpc5xxx/start.o   (.text*)
     arch/powerpc/cpu/mpc5xxx/traps.o   (.text*)
-    board/matrix_vision/common/libmatrix_vision.o (.text*)
+    board/matrix_vision/common/built-in.o      (.text*)
 
     /* This is only needed to force failure if size of above code will ever */
     /* increase and grow into reserved space. */
 
   .text      :
   {
     arch/powerpc/cpu/mpc824x/start.o           (.text*)
-    lib/libgeneric.o                           (.text*)
-    net/libnet.o                               (.text*)
-    drivers/pci/libpci.o                       (.text*)
-    arch/powerpc/cpu/mpc824x/libmpc824x.o      (.text*)
-    board/mvblue/libmvblue.o                   (.text*)
-    arch/powerpc/lib/libpowerpc.o              (.text*)
+    lib/built-in.o                             (.text*)
+    net/built-in.o                             (.text*)
+    drivers/pci/built-in.o                     (.text*)
+    arch/powerpc/cpu/mpc824x/built-in.o                (.text*)
+    board/mvblue/built-in.o                    (.text*)
+    arch/powerpc/lib/built-in.o                        (.text*)
 
     . = DEFINED(env_offset) ? env_offset : .;
     common/env_embedded.o      (.ppcenv*)
 
     arch/powerpc/cpu/mpc8xx/start.o    (.text*)
     arch/powerpc/cpu/mpc8xx/traps.o    (.text*)
 
-    lib/libgeneric.o                   (.text*)
-    net/libnet.o                       (.text*)
-    arch/powerpc/cpu/mpc8xx/libmpc8xx.o        (.text*)
-    arch/powerpc/lib/libpowerpc.o      (.text*)
+    lib/built-in.o                     (.text*)
+    net/built-in.o                     (.text*)
+    arch/powerpc/cpu/mpc8xx/built-in.o (.text*)
+    arch/powerpc/lib/built-in.o                (.text*)
 
     . = env_offset;
     common/env_embedded.o              (.text*)
 
 
     arch/powerpc/cpu/mpc8xx/start.o    (.text*)
     arch/powerpc/cpu/mpc8xx/traps.o    (.text*)
-    net/libnet.o                       (.text*)
-    arch/powerpc/cpu/mpc8xx/libmpc8xx.o        (.text*)
+    net/built-in.o                     (.text*)
+    arch/powerpc/cpu/mpc8xx/built-in.o (.text*)
     *(.text.v*printf)
 
     . = DEFINED(env_offset) ? env_offset : .;
 
     /* the sector layout of our flash chips!   XXX FIXME XXX   */
     arch/powerpc/cpu/mpc8xx/start.o    (.text*)
     arch/powerpc/cpu/mpc8xx/traps.o    (.text*)
-    lib/libgeneric.o                   (.text*)
-    net/libnet.o                       (.text*)
-    arch/powerpc/cpu/mpc8xx/libmpc8xx.o        (.text*)
-    arch/powerpc/lib/libpowerpc.o      (.text*)
-    board/svm_sc8xx/libsvm_sc8xx.o     (.text*)
+    lib/built-in.o                     (.text*)
+    net/built-in.o                     (.text*)
+    arch/powerpc/cpu/mpc8xx/built-in.o (.text*)
+    arch/powerpc/lib/built-in.o                (.text*)
+    board/svm_sc8xx/built-in.o         (.text*)
     *(.text.*printf)
     *(.text.do_mem_*)
     *(.text.flash*)
 
        {
                *(.__image_copy_start)
                CPUDIR/start.o (.text*)
-               board/ti/am335x/libam335x.o (.text*)
+               board/ti/am335x/built-in.o (.text*)
                *(.text*)
        }
 
 
 
     arch/powerpc/cpu/mpc8xx/start.o    (.text*)
     arch/powerpc/cpu/mpc8xx/traps.o    (.text*)
-    arch/powerpc/cpu/mpc8xx/libmpc8xx.o (.text*)
-    arch/powerpc/lib/libpowerpc.o      (.text*)
-    board/tqc/tqm8xx/libtqm8xx.o       (.text*)
-    disk/libdisk.o                     (.text*)
-    drivers/net/libnet.o               (.text*)
-    drivers/libdrivers.o               (.text.pcmcia_on)
-    drivers/libdrivers.o               (.text.pcmcia_hardware_enable)
+    arch/powerpc/cpu/mpc8xx/built-in.o (.text*)
+    arch/powerpc/lib/built-in.o                (.text*)
+    board/tqc/tqm8xx/built-in.o                (.text*)
+    disk/built-in.o                    (.text*)
+    drivers/net/built-in.o             (.text*)
+    drivers/built-in.o                 (.text.pcmcia_on)
+    drivers/built-in.o                 (.text.pcmcia_hardware_enable)
 
     . = DEFINED(env_offset) ? env_offset : .;
     common/env_embedded.o      (.ppcenv*)
 
        .text.0 :
        {
                arch/arm/cpu/pxa/start.o                (.text*)
-               board/vpac270/libvpac270.o              (.text*)
-               drivers/mtd/onenand/libonenand.o        (.text*)
+               board/vpac270/built-in.o                (.text*)
+               drivers/mtd/onenand/built-in.o          (.text*)
        }
 
 
 
  * it linked after the configuration sector.
  */
 # define LDS_BOARD_TEXT \
-       arch/blackfin/lib/libblackfin.o (.text*); \
-       arch/blackfin/cpu/libblackfin.o (.text*); \
+       arch/blackfin/lib/built-in.o (.text*); \
+       arch/blackfin/cpu/built-in.o (.text*); \
        . = DEFINED(env_offset) ? env_offset : .; \
        common/env_embedded.o (.text*);
 #endif
 
  * it linked after the configuration sector.
  */
 # define LDS_BOARD_TEXT \
-       arch/blackfin/lib/libblackfin.o (.text*); \
-       arch/blackfin/cpu/libblackfin.o (.text*); \
+       arch/blackfin/lib/built-in.o (.text*); \
+       arch/blackfin/cpu/built-in.o (.text*); \
        . = DEFINED(env_offset) ? env_offset : .; \
        common/env_embedded.o (.text*);
 #endif
 
  * it linked after the configuration sector.
  */
 # define LDS_BOARD_TEXT \
-       arch/blackfin/lib/libblackfin.o (.text*); \
-       arch/blackfin/cpu/libblackfin.o (.text*); \
+       arch/blackfin/lib/built-in.o (.text*); \
+       arch/blackfin/cpu/built-in.o (.text*); \
        . = DEFINED(env_offset) ? env_offset : .; \
        common/env_embedded.o (.text*);
 #endif
 
  * it linked after the configuration sector.
  */
 # define LDS_BOARD_TEXT \
-       arch/blackfin/lib/libblackfin.o (.text*); \
-       arch/blackfin/cpu/libblackfin.o (.text*); \
+       arch/blackfin/lib/built-in.o (.text*); \
+       arch/blackfin/cpu/built-in.o (.text*); \
        . = DEFINED(env_offset) ? env_offset : .; \
        common/env_embedded.o (.text*);
 #endif
 
  * it linked after the configuration sector.
  */
 # define LDS_BOARD_TEXT \
-       arch/blackfin/lib/libblackfin.o (.text*); \
-       arch/blackfin/cpu/libblackfin.o (.text*); \
+       arch/blackfin/lib/built-in.o (.text*); \
+       arch/blackfin/cpu/built-in.o (.text*); \
        . = DEFINED(env_offset) ? env_offset : .; \
        common/env_embedded.o (.text*);
 #endif
 
  * it linked after the configuration sector.
  */
 # define LDS_BOARD_TEXT \
-       arch/blackfin/lib/libblackfin.o (.text*); \
-       arch/blackfin/cpu/libblackfin.o (.text*); \
+       arch/blackfin/lib/built-in.o (.text*); \
+       arch/blackfin/cpu/built-in.o (.text*); \
        . = DEFINED(env_offset) ? env_offset : .; \
        common/env_embedded.o (.text*);
 #endif
 
  * it linked after the configuration sector.
  */
 # define LDS_BOARD_TEXT \
-       arch/blackfin/lib/libblackfin.o (.text*); \
-       arch/blackfin/cpu/libblackfin.o (.text*); \
+       arch/blackfin/lib/built-in.o (.text*); \
+       arch/blackfin/cpu/built-in.o (.text*); \
        . = DEFINED(env_offset) ? env_offset : .; \
        common/env_embedded.o (.text*);
 #endif
 
 
 #define ENV_IS_EMBEDDED
 #define LDS_BOARD_TEXT \
-       arch/blackfin/lib/libblackfin.o (.text*); \
-       arch/blackfin/cpu/libblackfin.o (.text*); \
+       arch/blackfin/lib/built-in.o (.text*); \
+       arch/blackfin/cpu/built-in.o (.text*); \
        . = DEFINED(env_offset) ? env_offset : .; \
        common/env_embedded.o (.text*);
 
 
  * it linked after the configuration sector.
  */
 # define LDS_BOARD_TEXT \
-       arch/blackfin/lib/libblackfin.o (.text*); \
-       arch/blackfin/cpu/libblackfin.o (.text*); \
+       arch/blackfin/lib/built-in.o (.text*); \
+       arch/blackfin/cpu/built-in.o (.text*); \
        . = DEFINED(env_offset) ? env_offset : .; \
        common/env_embedded.o (.text*);
 #endif
 
  * it linked after the configuration sector.
  */
 # define LDS_BOARD_TEXT \
-       arch/blackfin/lib/libblackfin.o (.text*); \
-       arch/blackfin/cpu/libblackfin.o (.text*); \
+       arch/blackfin/lib/built-in.o (.text*); \
+       arch/blackfin/cpu/built-in.o (.text*); \
        . = DEFINED(env_offset) ? env_offset : .; \
        common/env_embedded.o (.text*);
 #endif
 
 START += $(START_PATH)/resetvec.o
 endif
 
-LIBS-y += arch/$(ARCH)/lib/lib$(ARCH).o
+LIBS-y += arch/$(ARCH)/lib/
 
-LIBS-y += $(CPUDIR)/lib$(CPU).o
+LIBS-y += $(CPUDIR)/
 
 ifdef SOC
-LIBS-y += $(CPUDIR)/$(SOC)/lib$(SOC).o
-endif
-LIBS-y += board/$(BOARDDIR)/lib$(BOARD).o
-LIBS-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/lib$(VENDOR).o
-
-LIBS-$(CONFIG_SPL_FRAMEWORK) += common/spl/libspl.o
-LIBS-$(CONFIG_SPL_LIBCOMMON_SUPPORT) += common/libcommon.o
-LIBS-$(CONFIG_SPL_LIBDISK_SUPPORT) += disk/libdisk.o
-LIBS-$(CONFIG_SPL_I2C_SUPPORT) += drivers/i2c/libi2c.o
-LIBS-$(CONFIG_SPL_GPIO_SUPPORT) += drivers/gpio/libgpio.o
-LIBS-$(CONFIG_SPL_MMC_SUPPORT) += drivers/mmc/libmmc.o
-LIBS-$(CONFIG_SPL_SERIAL_SUPPORT) += drivers/serial/libserial.o
-LIBS-$(CONFIG_SPL_SPI_FLASH_SUPPORT) += drivers/mtd/spi/libspi_flash.o
-LIBS-$(CONFIG_SPL_SPI_SUPPORT) += drivers/spi/libspi.o
-LIBS-$(CONFIG_SPL_FAT_SUPPORT) += fs/fat/libfat.o
-LIBS-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/libgeneric.o
-LIBS-$(CONFIG_SPL_POWER_SUPPORT) += drivers/power/libpower.o \
-       drivers/power/pmic/libpmic.o
-LIBS-$(CONFIG_SPL_NAND_SUPPORT) += drivers/mtd/nand/libnand.o
-LIBS-$(CONFIG_SPL_ONENAND_SUPPORT) += drivers/mtd/onenand/libonenand.o
-LIBS-$(CONFIG_SPL_DMA_SUPPORT) += drivers/dma/libdma.o
-LIBS-$(CONFIG_SPL_POST_MEM_SUPPORT) += post/drivers/memory.o
-LIBS-$(CONFIG_SPL_NET_SUPPORT) += net/libnet.o
-LIBS-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/libnet.o
-LIBS-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/phy/libphy.o
-LIBS-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/net/phy/libphy.o
-LIBS-$(CONFIG_SPL_MUSB_NEW_SUPPORT) += drivers/usb/musb-new/libusb_musb-new.o
-LIBS-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/usb/gadget/libusb_gadget.o
-LIBS-$(CONFIG_SPL_WATCHDOG_SUPPORT) += drivers/watchdog/libwatchdog.o
+LIBS-y += $(CPUDIR)/$(SOC)/
+endif
+LIBS-y += board/$(BOARDDIR)/
+LIBS-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
+
+LIBS-$(CONFIG_SPL_FRAMEWORK) += common/spl/
+LIBS-$(CONFIG_SPL_LIBCOMMON_SUPPORT) += common/
+LIBS-$(CONFIG_SPL_LIBDISK_SUPPORT) += disk/
+LIBS-$(CONFIG_SPL_I2C_SUPPORT) += drivers/i2c/
+LIBS-$(CONFIG_SPL_GPIO_SUPPORT) += drivers/gpio/
+LIBS-$(CONFIG_SPL_MMC_SUPPORT) += drivers/mmc/
+LIBS-$(CONFIG_SPL_SERIAL_SUPPORT) += drivers/serial/
+LIBS-$(CONFIG_SPL_SPI_FLASH_SUPPORT) += drivers/mtd/spi/
+LIBS-$(CONFIG_SPL_SPI_SUPPORT) += drivers/spi/
+LIBS-$(CONFIG_SPL_FAT_SUPPORT) += fs/fat/
+LIBS-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/
+LIBS-$(CONFIG_SPL_POWER_SUPPORT) += drivers/power/ \
+       drivers/power/pmic/
+LIBS-$(CONFIG_SPL_NAND_SUPPORT) += drivers/mtd/nand/
+LIBS-$(CONFIG_SPL_ONENAND_SUPPORT) += drivers/mtd/onenand/
+LIBS-$(CONFIG_SPL_DMA_SUPPORT) += drivers/dma/
+LIBS-$(CONFIG_SPL_POST_MEM_SUPPORT) += post/drivers/
+LIBS-$(CONFIG_SPL_NET_SUPPORT) += net/
+LIBS-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/
+LIBS-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/phy/
+LIBS-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/net/phy/
+LIBS-$(CONFIG_SPL_MUSB_NEW_SUPPORT) += drivers/usb/musb-new/
+LIBS-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/usb/gadget/
+LIBS-$(CONFIG_SPL_WATCHDOG_SUPPORT) += drivers/watchdog/
 
 ifneq (,$(CONFIG_MX23)$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35))
-LIBS-y += arch/$(ARCH)/imx-common/libimx-common.o
+LIBS-y += arch/$(ARCH)/imx-common/
 endif
 
-LIBS-$(CONFIG_ARM) += arch/arm/cpu/libcpu.o
-LIBS-$(CONFIG_PPC) += arch/powerpc/cpu/libcpu.o
+LIBS-$(CONFIG_ARM) += arch/arm/cpu/
+LIBS-$(CONFIG_PPC) += arch/powerpc/cpu/
 
 ifneq ($(CONFIG_MX23)$(CONFIG_MX35),)
-LIBS-y += arch/$(ARCH)/imx-common/libimx-common.o
+LIBS-y += arch/$(ARCH)/imx-common/
 endif
 
+LIBS-y := $(patsubst %/, %/built-in.o, $(LIBS-y))
+
 # Add GCC lib
 ifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
 PLATFORM_LIBGCC = $(SPLTREE)/arch/$(ARCH)/lib/libgcc.o
 
 $(LIBS):       depend
        $(MAKE) $(build) $(SRCTREE)$(dir $(subst $(SPLTREE),,$@))
-       mv $(dir $@)built-in.o $@
 
 $(obj)u-boot-spl.lds: $(LDSCRIPT) depend
        $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(obj). -ansi -D__ASSEMBLY__ -P - < $< > $@