2 # (C) Copyright 2000-2011
3 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
6 # Daniel Schwierzeck, daniel.schwierzeck@googlemail.com.
9 # Texas Instruments Incorporated - http://www.ti.com/
10 # Aneesh V <aneesh@ti.com>
12 # SPDX-License-Identifier: GPL-2.0+
14 # Based on top-level Makefile.
19 # Create output directory if not already present
20 _dummy
:= $(shell [ -d
$(obj
) ] || mkdir
-p
$(obj
))
22 include $(srctree
)/scripts
/Kbuild.
include
25 export CONFIG_SPL_BUILD
27 KBUILD_CPPFLAGS
+= -DCONFIG_SPL_BUILD
28 ifeq ($(CONFIG_TPL_BUILD
),y
)
29 KBUILD_CPPFLAGS
+= -DCONFIG_TPL_BUILD
32 # Enable garbage collection of un-used sections for SPL
33 KBUILD_CFLAGS
+= -ffunction-sections
-fdata-sections
34 LDFLAGS_FINAL
+= --gc-sections
36 ifeq ($(CONFIG_TPL_BUILD
),y
)
37 export CONFIG_TPL_BUILD
43 include include/config.mk
45 ifeq ($(CONFIG_TPL_BUILD
),y
)
46 -include include/tpl-autoconf.mk
48 -include include/spl-autoconf.mk
51 include $(TOPDIR
)/config.mk
54 c_flags
:= $(KBUILD_CFLAGS
) $(KBUILD_CPPFLAGS
) $(CPPFLAGS
) $(UBOOTINCLUDE
) $(NOSTDINC_FLAGS
)
56 # Auto-generate the spl-autoconf.mk file (which is included by all makefiles for SPL)
57 quiet_cmd_autoconf
= GEN
$@
59 $(CPP
) $(c_flags
) -DDO_DEPS_ONLY
-dM
$(srctree
)/include/common.h
> $@.tmp
&& \
60 sed
-n
-f
$(srctree
)/tools
/scripts
/define2mk.sed
$@.tmp
> $@
; \
63 include/tpl-autoconf.mk
: include/config.h
66 include/spl-autoconf.mk
: include/config.h
69 HAVE_VENDOR_COMMON_LIB
= $(if
$(wildcard $(SRCTREE
)/board
/$(VENDOR
)/common
/Makefile
),y
,n
)
71 ifdef CONFIG_SPL_START_S_PATH
72 START_PATH
:= $(CONFIG_SPL_START_S_PATH
:"%"=%)
74 START_PATH
:= $(CPUDIR
)
77 head-y
:= $(START_PATH
)/start.o
78 head-
$(CONFIG_X86
) += $(START_PATH
)/start16.o
$(START_PATH
)/resetvec.o
79 head-
$(CONFIG_4xx
) += $(START_PATH
)/resetvec.o
80 head-
$(CONFIG_MPC85xx
) += $(START_PATH
)/resetvec.o
82 LIBS-y
+= arch
/$(ARCH
)/lib
/
87 LIBS-y
+= $(CPUDIR
)/$(SOC
)/
89 LIBS-y
+= board
/$(BOARDDIR
)/
90 LIBS-
$(HAVE_VENDOR_COMMON_LIB
) += board
/$(VENDOR
)/common
/
92 LIBS-
$(CONFIG_SPL_FRAMEWORK
) += common
/spl
/
93 LIBS-
$(CONFIG_SPL_LIBCOMMON_SUPPORT
) += common
/
94 LIBS-
$(CONFIG_SPL_LIBDISK_SUPPORT
) += disk
/
95 LIBS-
$(CONFIG_SPL_I2C_SUPPORT
) += drivers
/i2c
/
96 LIBS-
$(CONFIG_SPL_GPIO_SUPPORT
) += drivers
/gpio
/
97 LIBS-
$(CONFIG_SPL_MMC_SUPPORT
) += drivers
/mmc
/
98 LIBS-
$(CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT
) += drivers
/ddr
/fsl
/
99 LIBS-
$(CONFIG_SPL_SERIAL_SUPPORT
) += drivers
/serial
/
100 LIBS-
$(CONFIG_SPL_SPI_FLASH_SUPPORT
) += drivers
/mtd
/spi
/
101 LIBS-
$(CONFIG_SPL_SPI_SUPPORT
) += drivers
/spi
/
103 LIBS-
$(CONFIG_SPL_LIBGENERIC_SUPPORT
) += lib
/
104 LIBS-
$(CONFIG_SPL_POWER_SUPPORT
) += drivers
/power
/ \
106 LIBS-
$(if
$(CONFIG_CMD_NAND
),$(CONFIG_SPL_NAND_SUPPORT
)) += drivers
/mtd
/nand
/
107 LIBS-
$(CONFIG_SPL_DRIVERS_MISC_SUPPORT
) += drivers
/misc
/
108 LIBS-
$(CONFIG_SPL_ONENAND_SUPPORT
) += drivers
/mtd
/onenand
/
109 LIBS-
$(CONFIG_SPL_DMA_SUPPORT
) += drivers
/dma
/
110 LIBS-
$(CONFIG_SPL_POST_MEM_SUPPORT
) += post
/drivers
/
111 LIBS-
$(CONFIG_SPL_NET_SUPPORT
) += net
/
112 LIBS-
$(CONFIG_SPL_ETH_SUPPORT
) += drivers
/net
/
113 LIBS-
$(CONFIG_SPL_ETH_SUPPORT
) += drivers
/net
/phy
/
114 LIBS-
$(CONFIG_SPL_USBETH_SUPPORT
) += drivers
/net
/phy
/
115 LIBS-
$(CONFIG_SPL_MUSB_NEW_SUPPORT
) += drivers
/usb
/musb-new
/
116 LIBS-
$(CONFIG_SPL_USBETH_SUPPORT
) += drivers
/usb
/gadget
/
117 LIBS-
$(CONFIG_SPL_WATCHDOG_SUPPORT
) += drivers
/watchdog
/
118 LIBS-
$(CONFIG_SPL_USB_HOST_SUPPORT
) += drivers
/usb
/host
/
119 LIBS-
$(CONFIG_OMAP_USB_PHY
) += drivers
/usb
/phy
/
120 LIBS-
$(CONFIG_SPL_SATA_SUPPORT
) += drivers
/block
/
122 ifneq (,$(CONFIG_MX23
)$(CONFIG_MX35
)$(filter $(SOC
), mx25 mx27 mx5 mx6 mx31 mx35
))
123 LIBS-y
+= arch
/$(ARCH
)/imx-common
/
126 LIBS-
$(CONFIG_ARM
) += arch
/arm
/cpu
/
127 LIBS-
$(CONFIG_PPC
) += arch
/powerpc
/cpu
/
129 LIBS-y
:= $(patsubst %/, %/built-in.o
, $(LIBS-y
))
132 ifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
133 PLATFORM_LIBS
:= $(SPLTREE
)/arch
/$(ARCH
)/lib
/lib.a
136 LIBS-y
:= $(sort $(LIBS-y
))
141 START
:= $(addprefix $(obj
)/,$(head-y
))
142 LIBS
:= $(addprefix $(obj
)/,$(LIBS-y
))
145 ifdef CONFIG_SPL_LDSCRIPT
146 # need to strip off double quotes
147 LDSCRIPT
:= $(addprefix $(SRCTREE
)/,$(CONFIG_SPL_LDSCRIPT
:"%"=%))
150 ifeq ($(wildcard $(LDSCRIPT
)),)
151 LDSCRIPT
:= $(TOPDIR
)/board
/$(BOARDDIR
)/u-boot-spl.lds
153 ifeq ($(wildcard $(LDSCRIPT
)),)
154 LDSCRIPT
:= $(TOPDIR
)/$(CPUDIR
)/u-boot-spl.lds
156 ifeq ($(wildcard $(LDSCRIPT
)),)
157 LDSCRIPT
:= $(TOPDIR
)/arch
/$(ARCH
)/cpu
/u-boot-spl.lds
159 ifeq ($(wildcard $(LDSCRIPT
)),)
160 $(error could not find linker script
)
163 # Special flags for CPP when processing the linker script.
164 # Pass the version down so we can handle backwards compatibility
167 -include $(TOPDIR
)/include/u-boot
/u-boot.lds.h \
168 -include $(OBJTREE
)/include/config.h \
170 $(shell $(LD
) --version | \
171 sed
-ne
's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p')
173 $(OBJTREE
)/MLO
: $(obj
)/u-boot-spl.bin
174 $(OBJTREE
)/tools
/mkimage
-T omapimage \
175 -a
$(CONFIG_SPL_TEXT_BASE
) -d
$< $@
177 $(OBJTREE
)/MLO.byteswap
: $(obj
)/u-boot-spl.bin
178 $(OBJTREE
)/tools
/mkimage
-T omapimage
-n byteswap \
179 -a
$(CONFIG_SPL_TEXT_BASE
) -d
$< $@
181 $(objtree
)/SPL
: $(obj
)/u-boot-spl.bin
182 $(MAKE
) $(build
)=spl
/arch
/arm
/imx-common
$@
184 ALL-y
+= $(obj
)/$(SPL_BIN
).bin
187 ALL-y
+= $(obj
)/$(BOARD
)-spl.bin
193 ifdef CONFIG_VAR_SIZE_SPL
194 VAR_SIZE_PARAM
= --vs
198 $(obj
)/$(BOARD
)-spl.bin
: $(obj
)/u-boot-spl.bin
199 $(if
$(wildcard $(OBJTREE
)/spl
/board
/samsung
/$(BOARD
)/tools
/mk
$(BOARD
)spl
),\
200 $(OBJTREE
)/spl
/board
/samsung
/$(BOARD
)/tools
/mk
$(BOARD
)spl
,\
201 $(OBJTREE
)/tools
/mkexynosspl
) $(VAR_SIZE_PARAM
) $< $@
204 $(obj
)/$(SPL_BIN
).bin
: $(obj
)/$(SPL_BIN
)
205 $(OBJCOPY
) $(OBJCFLAGS
) $(SPL_OBJCFLAGS
) -O binary
$< $@
207 LDFLAGS_
$(SPL_BIN
) += -T u-boot-spl.lds
$(LDFLAGS_FINAL
)
208 ifneq ($(CONFIG_SPL_TEXT_BASE
),)
209 LDFLAGS_
$(SPL_BIN
) += -Ttext
$(CONFIG_SPL_TEXT_BASE
)
213 cd
$(obj
) && $(LD
) $(LDFLAGS
) $(LDFLAGS_
$(@F
)) $(__START
) \
214 --start-group
$(__LIBS
) --end-group
$(PLATFORM_LIBS
) \
215 -Map
$(SPL_BIN
).map
-o
$(SPL_BIN
)
217 $(obj
)/$(SPL_BIN
): $(START
) $(LIBS
) $(obj
)/u-boot-spl.lds
224 $(Q
)$(MAKE
) $(build
)=$(patsubst %/,%,$(dir $@
))
227 cpp_flags
:= $(KBUILD_CPPFLAGS
) $(CPPFLAGS
) $(UBOOTINCLUDE
) $(NOSTDINC_FLAGS
)
229 $(obj
)/u-boot-spl.lds
: $(LDSCRIPT
) FORCE
230 $(CPP
) $(cpp_flags
) $(LDPPFLAGS
) -I
$(obj
).
-ansi
-D__ASSEMBLY__
-P
- < $< > $@
235 # Declare the contents of the .PHONY variable as phony. We keep that
236 # information in a variable so we can use it in if_changed and friends.