1*4882a593Smuzhiyun# 2*4882a593Smuzhiyun# (C) Copyright 2000-2011 3*4882a593Smuzhiyun# Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun# (C) Copyright 2011 6*4882a593Smuzhiyun# Daniel Schwierzeck, daniel.schwierzeck@googlemail.com. 7*4882a593Smuzhiyun# 8*4882a593Smuzhiyun# (C) Copyright 2011 9*4882a593Smuzhiyun# Texas Instruments Incorporated - http://www.ti.com/ 10*4882a593Smuzhiyun# Aneesh V <aneesh@ti.com> 11*4882a593Smuzhiyun# 12*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0+ 13*4882a593Smuzhiyun# 14*4882a593Smuzhiyun# Based on top-level Makefile. 15*4882a593Smuzhiyun# 16*4882a593Smuzhiyun 17*4882a593Smuzhiyunsrc := $(obj) 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun# Create output directory if not already present 20*4882a593Smuzhiyun_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj)) 21*4882a593Smuzhiyun 22*4882a593Smuzhiyuninclude $(srctree)/scripts/Kbuild.include 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun-include include/config/auto.conf 25*4882a593Smuzhiyun-include $(obj)/include/autoconf.mk 26*4882a593Smuzhiyun 27*4882a593SmuzhiyunKBUILD_CPPFLAGS += -DCONFIG_SPL_BUILD 28*4882a593Smuzhiyunifeq ($(CONFIG_TPL_BUILD),y) 29*4882a593SmuzhiyunKBUILD_CPPFLAGS += -DCONFIG_TPL_BUILD 30*4882a593Smuzhiyunendif 31*4882a593Smuzhiyun 32*4882a593Smuzhiyunifeq ($(CONFIG_TPL_BUILD),y) 33*4882a593SmuzhiyunSPL_BIN := u-boot-tpl 34*4882a593Smuzhiyunelse 35*4882a593SmuzhiyunSPL_BIN := u-boot-spl 36*4882a593Smuzhiyunendif 37*4882a593Smuzhiyun 38*4882a593Smuzhiyunifdef CONFIG_SPL_BUILD 39*4882a593SmuzhiyunSPL_ := SPL_ 40*4882a593Smuzhiyunifeq ($(CONFIG_TPL_BUILD),y) 41*4882a593SmuzhiyunSPL_TPL_ := TPL_ 42*4882a593Smuzhiyunelse 43*4882a593SmuzhiyunSPL_TPL_ := SPL_ 44*4882a593Smuzhiyunendif 45*4882a593Smuzhiyunelse 46*4882a593SmuzhiyunSPL_ := 47*4882a593SmuzhiyunSPL_TPL_ := 48*4882a593Smuzhiyunendif 49*4882a593Smuzhiyun 50*4882a593Smuzhiyuninclude $(srctree)/config.mk 51*4882a593Smuzhiyuninclude $(srctree)/arch/$(ARCH)/Makefile 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun# Enable garbage collection of un-used sections for SPL 54*4882a593SmuzhiyunKBUILD_CFLAGS += -ffunction-sections -fdata-sections 55*4882a593SmuzhiyunLDFLAGS_FINAL += --gc-sections 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun# FIX ME 58*4882a593Smuzhiyuncpp_flags := $(KBUILD_CPPFLAGS) $(PLATFORM_CPPFLAGS) $(UBOOTINCLUDE) \ 59*4882a593Smuzhiyun $(NOSTDINC_FLAGS) 60*4882a593Smuzhiyunc_flags := $(KBUILD_CFLAGS) $(cpp_flags) 61*4882a593Smuzhiyun 62*4882a593SmuzhiyunHAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(srctree)/board/$(VENDOR)/common/Makefile),y,n) 63*4882a593Smuzhiyun 64*4882a593Smuzhiyunlibs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/) 65*4882a593Smuzhiyunlibs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/ 66*4882a593Smuzhiyun 67*4882a593Smuzhiyunifeq ($(CONFIG_TPL_BUILD),y) 68*4882a593Smuzhiyunifndef CONFIG_TPL_TINY_FRAMEWORK 69*4882a593Smuzhiyunlibs-$(CONFIG_SPL_FRAMEWORK) += common/spl/ 70*4882a593Smuzhiyunendif 71*4882a593Smuzhiyunelse 72*4882a593Smuzhiyunlibs-$(CONFIG_SPL_FRAMEWORK) += common/spl/ 73*4882a593Smuzhiyunendif 74*4882a593Smuzhiyun 75*4882a593Smuzhiyunlibs-y += common/init/ 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun# Special handling for a few options which support SPL/TPL 78*4882a593Smuzhiyunifeq ($(CONFIG_TPL_BUILD),y) 79*4882a593Smuzhiyunlibs-$(CONFIG_TPL_LIBCOMMON_SUPPORT) += common/ cmd/ env/ 80*4882a593Smuzhiyunlibs-$(CONFIG_TPL_LIBGENERIC_SUPPORT) += lib/ 81*4882a593Smuzhiyunelse 82*4882a593Smuzhiyunlibs-$(CONFIG_SPL_LIBCOMMON_SUPPORT) += common/ cmd/ env/ 83*4882a593Smuzhiyunlibs-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/ 84*4882a593Smuzhiyunendif 85*4882a593Smuzhiyun 86*4882a593Smuzhiyunlibs-$(CONFIG_SPL_LIBDISK_SUPPORT) += disk/ 87*4882a593Smuzhiyunifneq ($(CONFIG_SPL_DECOMP_HEADER),y) 88*4882a593Smuzhiyunlibs-y += drivers/ 89*4882a593Smuzhiyunendif 90*4882a593Smuzhiyunlibs-$(CONFIG_SPL_USB_GADGET) += drivers/usb/dwc3/ 91*4882a593Smuzhiyunlibs-$(CONFIG_SPL_USB_GADGET) += drivers/usb/cdns3/ 92*4882a593Smuzhiyunlibs-y += dts/ 93*4882a593Smuzhiyunlibs-y += fs/ 94*4882a593Smuzhiyunlibs-$(CONFIG_SPL_POST_MEM_SUPPORT) += post/drivers/ 95*4882a593Smuzhiyunlibs-$(CONFIG_SPL_NET_SUPPORT) += net/ 96*4882a593Smuzhiyun 97*4882a593Smuzhiyunhead-y := $(addprefix $(obj)/,$(head-y)) 98*4882a593Smuzhiyunlibs-y := $(addprefix $(obj)/,$(libs-y)) 99*4882a593Smuzhiyunu-boot-spl-dirs := $(patsubst %/,%,$(filter %/, $(libs-y))) 100*4882a593Smuzhiyun 101*4882a593Smuzhiyunlibs-y := $(patsubst %/, %/built-in.o, $(libs-y)) 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun# Add GCC lib 104*4882a593Smuzhiyunifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y) 105*4882a593SmuzhiyunPLATFORM_LIBGCC = arch/$(ARCH)/lib/lib.a 106*4882a593SmuzhiyunPLATFORM_LIBS := $(filter-out %/lib.a, $(filter-out -lgcc, $(PLATFORM_LIBS))) $(PLATFORM_LIBGCC) 107*4882a593Smuzhiyunendif 108*4882a593Smuzhiyun 109*4882a593Smuzhiyunu-boot-spl-init := $(head-y) 110*4882a593Smuzhiyunu-boot-spl-main := $(libs-y) 111*4882a593Smuzhiyunifdef CONFIG_$(SPL_TPL_)OF_PLATDATA 112*4882a593Smuzhiyunu-boot-spl-platdata := $(obj)/dts/dt-platdata.o 113*4882a593Smuzhiyunendif 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun# Linker Script 116*4882a593Smuzhiyun# First test whether there's a linker-script for the specific stage defined... 117*4882a593Smuzhiyunifneq ($(CONFIG_$(SPL_TPL_)LDSCRIPT),) 118*4882a593Smuzhiyun# need to strip off double quotes 119*4882a593SmuzhiyunLDSCRIPT := $(addprefix $(srctree)/,$(CONFIG_$(SPL_TPL_)LDSCRIPT:"%"=%)) 120*4882a593Smuzhiyunelse 121*4882a593Smuzhiyun# ...then fall back to the generic SPL linker-script 122*4882a593Smuzhiyunifneq ($(CONFIG_SPL_LDSCRIPT),) 123*4882a593Smuzhiyun# need to strip off double quotes 124*4882a593SmuzhiyunLDSCRIPT := $(addprefix $(srctree)/,$(CONFIG_SPL_LDSCRIPT:"%"=%)) 125*4882a593Smuzhiyunendif 126*4882a593Smuzhiyunendif 127*4882a593Smuzhiyun 128*4882a593Smuzhiyunifeq ($(wildcard $(LDSCRIPT)),) 129*4882a593Smuzhiyun LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot-spl.lds 130*4882a593Smuzhiyunendif 131*4882a593Smuzhiyunifeq ($(wildcard $(LDSCRIPT)),) 132*4882a593Smuzhiyun LDSCRIPT := $(srctree)/$(CPUDIR)/u-boot-spl.lds 133*4882a593Smuzhiyunendif 134*4882a593Smuzhiyunifeq ($(wildcard $(LDSCRIPT)),) 135*4882a593Smuzhiyun LDSCRIPT := $(srctree)/arch/$(ARCH)/cpu/u-boot-spl.lds 136*4882a593Smuzhiyunendif 137*4882a593Smuzhiyunifeq ($(wildcard $(LDSCRIPT)),) 138*4882a593Smuzhiyun$(error could not find linker script) 139*4882a593Smuzhiyunendif 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun# Special flags for CPP when processing the linker script. 142*4882a593Smuzhiyun# Pass the version down so we can handle backwards compatibility 143*4882a593Smuzhiyun# on the fly. 144*4882a593SmuzhiyunLDPPFLAGS += \ 145*4882a593Smuzhiyun -include $(srctree)/include/u-boot/u-boot.lds.h \ 146*4882a593Smuzhiyun -include $(objtree)/include/config.h \ 147*4882a593Smuzhiyun -DCPUDIR=$(CPUDIR) \ 148*4882a593Smuzhiyun $(shell $(LD) --version | \ 149*4882a593Smuzhiyun sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p') 150*4882a593Smuzhiyun 151*4882a593SmuzhiyunMKIMAGEOUTPUT ?= /dev/null 152*4882a593Smuzhiyun 153*4882a593Smuzhiyunquiet_cmd_mkimage = MKIMAGE $@ 154*4882a593Smuzhiyuncmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \ 155*4882a593Smuzhiyun $(if $(KBUILD_VERBOSE:1=), >$(MKIMAGEOUTPUT)) 156*4882a593Smuzhiyun 157*4882a593SmuzhiyunMKIMAGEFLAGS_MLO = -T omapimage -a $(CONFIG_SPL_TEXT_BASE) 158*4882a593Smuzhiyun 159*4882a593SmuzhiyunMKIMAGEFLAGS_MLO.byteswap = -T omapimage -n byteswap -a $(CONFIG_SPL_TEXT_BASE) 160*4882a593Smuzhiyun 161*4882a593SmuzhiyunMLO MLO.byteswap: $(obj)/u-boot-spl.bin FORCE 162*4882a593Smuzhiyun $(call if_changed,mkimage) 163*4882a593Smuzhiyun 164*4882a593Smuzhiyunifeq ($(CONFIG_SYS_SOC),"at91") 165*4882a593SmuzhiyunMKIMAGEFLAGS_boot.bin = -T atmelimage 166*4882a593Smuzhiyun 167*4882a593Smuzhiyunifeq ($(CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER),y) 168*4882a593SmuzhiyunMKIMAGEFLAGS_boot.bin += -n $(shell $(obj)/../tools/atmel_pmecc_params) 169*4882a593Smuzhiyun 170*4882a593Smuzhiyunboot.bin: $(obj)/../tools/atmel_pmecc_params 171*4882a593Smuzhiyunendif 172*4882a593Smuzhiyun 173*4882a593Smuzhiyunboot.bin: $(obj)/u-boot-spl.bin FORCE 174*4882a593Smuzhiyun $(call if_changed,mkimage) 175*4882a593Smuzhiyunelse 176*4882a593Smuzhiyunifdef CONFIG_ARCH_ZYNQ 177*4882a593SmuzhiyunMKIMAGEFLAGS_boot.bin = -T zynqimage -R $(srctree)/$(CONFIG_BOOT_INIT_FILE) 178*4882a593Smuzhiyunendif 179*4882a593Smuzhiyunifdef CONFIG_ARCH_ZYNQMP 180*4882a593SmuzhiyunMKIMAGEFLAGS_boot.bin = -T zynqmpimage -R $(srctree)/$(CONFIG_BOOT_INIT_FILE) \ 181*4882a593Smuzhiyun -n $(srctree)/$(CONFIG_PMUFW_INIT_FILE) 182*4882a593Smuzhiyunendif 183*4882a593Smuzhiyun 184*4882a593Smuzhiyunspl/boot.bin: $(obj)/u-boot-spl.bin FORCE 185*4882a593Smuzhiyun $(call if_changed,mkimage) 186*4882a593Smuzhiyunendif 187*4882a593Smuzhiyun 188*4882a593SmuzhiyunALL-y += $(obj)/$(SPL_BIN).bin 189*4882a593Smuzhiyun 190*4882a593Smuzhiyunifdef CONFIG_SAMSUNG 191*4882a593SmuzhiyunALL-y += $(obj)/$(BOARD)-spl.bin 192*4882a593Smuzhiyunendif 193*4882a593Smuzhiyun 194*4882a593Smuzhiyunifdef CONFIG_ARCH_SOCFPGA 195*4882a593SmuzhiyunALL-y += $(obj)/$(SPL_BIN).sfp 196*4882a593Smuzhiyunendif 197*4882a593Smuzhiyun 198*4882a593Smuzhiyunifdef CONFIG_ARCH_SUNXI 199*4882a593SmuzhiyunALL-y += $(obj)/sunxi-spl.bin 200*4882a593Smuzhiyun 201*4882a593Smuzhiyunifdef CONFIG_NAND_SUNXI 202*4882a593SmuzhiyunALL-y += $(obj)/sunxi-spl-with-ecc.bin 203*4882a593Smuzhiyunendif 204*4882a593Smuzhiyunendif 205*4882a593Smuzhiyun 206*4882a593Smuzhiyunifeq ($(CONFIG_SYS_SOC),"at91") 207*4882a593SmuzhiyunALL-y += boot.bin 208*4882a593Smuzhiyunendif 209*4882a593Smuzhiyun 210*4882a593SmuzhiyunALL-$(CONFIG_SPL_X86_16BIT_INIT) += $(obj)/u-boot-x86-16bit-spl.bin 211*4882a593Smuzhiyun 212*4882a593SmuzhiyunALL-$(CONFIG_ARCH_ZYNQ) += $(obj)/boot.bin 213*4882a593SmuzhiyunALL-$(CONFIG_ARCH_ZYNQMP) += $(obj)/boot.bin 214*4882a593Smuzhiyun 215*4882a593Smuzhiyunall: $(ALL-y) 216*4882a593Smuzhiyun 217*4882a593Smuzhiyunquiet_cmd_cat = CAT $@ 218*4882a593Smuzhiyuncmd_cat = cat $(filter-out $(PHONY), $^) > $@ 219*4882a593Smuzhiyun 220*4882a593Smuzhiyunquiet_cmd_copy = COPY $@ 221*4882a593Smuzhiyun cmd_copy = cp $< $@ 222*4882a593Smuzhiyun 223*4882a593Smuzhiyunifneq ($(CONFIG_SPL_MULTI_DTB_FIT),y) 224*4882a593SmuzhiyunFINAL_DTB_CONTAINER = $(obj)/$(SPL_BIN).dtb 225*4882a593Smuzhiyunelse ifeq ($(CONFIG_SPL_MULTI_DTB_FIT_LZO),y) 226*4882a593SmuzhiyunFINAL_DTB_CONTAINER = $(obj)/$(SPL_BIN).multidtb.fit.lzo 227*4882a593Smuzhiyunelse ifeq ($(CONFIG_SPL_MULTI_DTB_FIT_GZIP),y) 228*4882a593SmuzhiyunFINAL_DTB_CONTAINER = $(obj)/$(SPL_BIN).multidtb.fit.gz 229*4882a593Smuzhiyunelse 230*4882a593SmuzhiyunFINAL_DTB_CONTAINER = $(obj)/$(SPL_BIN).multidtb.fit 231*4882a593Smuzhiyunendif 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun 234*4882a593Smuzhiyunifeq ($(CONFIG_$(SPL_TPL_)OF_CONTROL)$(CONFIG_OF_SEPARATE)$(CONFIG_$(SPL_TPL_)OF_PLATDATA),yy) 235*4882a593Smuzhiyun$(obj)/$(SPL_BIN)-dtb.bin: $(obj)/$(SPL_BIN)-nodtb.bin \ 236*4882a593Smuzhiyun $(if $(CONFIG_SPL_SEPARATE_BSS),,$(obj)/$(SPL_BIN)-pad.bin) \ 237*4882a593Smuzhiyun $(FINAL_DTB_CONTAINER) FORCE 238*4882a593Smuzhiyun $(call if_changed,cat) 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun$(obj)/$(SPL_BIN).bin: $(obj)/$(SPL_BIN)-dtb.bin FORCE 241*4882a593Smuzhiyun $(call if_changed,copy) 242*4882a593Smuzhiyunelse 243*4882a593Smuzhiyun$(obj)/$(SPL_BIN).bin: $(obj)/$(SPL_BIN)-nodtb.bin FORCE 244*4882a593Smuzhiyun $(call if_changed,copy) 245*4882a593Smuzhiyunendif 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun# Create a file that pads from the end of u-boot-spl-nodtb.bin to bss_end 248*4882a593Smuzhiyun$(obj)/$(SPL_BIN)-pad.bin: $(obj)/$(SPL_BIN) 249*4882a593Smuzhiyun @bss_size_str=$(shell $(NM) $< | awk 'BEGIN {size = 0} /__bss_size/ {size = $$1} END {print "ibase=16; " toupper(size)}' | bc); \ 250*4882a593Smuzhiyun dd if=/dev/zero of=$@ bs=1 count=$${bss_size_str} 2>/dev/null; 251*4882a593Smuzhiyun 252*4882a593Smuzhiyunifeq ($(CONFIG_TPL_BUILD),y) 253*4882a593Smuzhiyun$(obj)/$(SPL_BIN).dtb: dts/dt-tpl.dtb FORCE 254*4882a593Smuzhiyun $(call if_changed,copy) 255*4882a593Smuzhiyunelse 256*4882a593Smuzhiyun$(obj)/$(SPL_BIN).dtb: dts/dt-spl.dtb FORCE 257*4882a593Smuzhiyun $(call if_changed,copy) 258*4882a593Smuzhiyunendif 259*4882a593Smuzhiyun 260*4882a593Smuzhiyunpythonpath = PYTHONPATH=scripts/dtc/pylibfdt 261*4882a593Smuzhiyun 262*4882a593Smuzhiyunquiet_cmd_dtocc = DTOC C $@ 263*4882a593Smuzhiyuncmd_dtocc = $(pythonpath) $(srctree)/tools/dtoc/dtoc -d $(obj)/$(SPL_BIN).dtb -o $@ platdata 264*4882a593Smuzhiyun 265*4882a593Smuzhiyunquiet_cmd_dtoch = DTOC H $@ 266*4882a593Smuzhiyuncmd_dtoch = $(pythonpath) $(srctree)/tools/dtoc/dtoc -d $(obj)/$(SPL_BIN).dtb -o $@ struct 267*4882a593Smuzhiyun 268*4882a593Smuzhiyunquiet_cmd_plat = PLAT $@ 269*4882a593Smuzhiyuncmd_plat = $(CC) $(c_flags) -c $< -o $@ 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun$(obj)/dts/dt-platdata.o: $(obj)/dts/dt-platdata.c \ 272*4882a593Smuzhiyun include/generated/dt-structs-gen.h 273*4882a593Smuzhiyun $(call if_changed,plat) 274*4882a593Smuzhiyun 275*4882a593SmuzhiyunPHONY += dts_dir 276*4882a593Smuzhiyundts_dir: 277*4882a593Smuzhiyun $(shell [ -d $(obj)/dts ] || mkdir -p $(obj)/dts) 278*4882a593Smuzhiyun 279*4882a593Smuzhiyuninclude/generated/dt-structs-gen.h: $(obj)/$(SPL_BIN).dtb dts_dir FORCE 280*4882a593Smuzhiyun $(call if_changed,dtoch) 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun$(obj)/dts/dt-platdata.c: $(obj)/$(SPL_BIN).dtb dts_dir FORCE 283*4882a593Smuzhiyun $(call if_changed,dtocc) 284*4882a593Smuzhiyun 285*4882a593Smuzhiyunifdef CONFIG_SAMSUNG 286*4882a593Smuzhiyunifdef CONFIG_VAR_SIZE_SPL 287*4882a593SmuzhiyunVAR_SIZE_PARAM = --vs 288*4882a593Smuzhiyunelse 289*4882a593SmuzhiyunVAR_SIZE_PARAM = 290*4882a593Smuzhiyunendif 291*4882a593Smuzhiyun$(obj)/$(BOARD)-spl.bin: $(obj)/u-boot-spl.bin 292*4882a593Smuzhiyun $(if $(wildcard $(objtree)/spl/board/samsung/$(BOARD)/tools/mk$(BOARD)spl),\ 293*4882a593Smuzhiyun $(objtree)/spl/board/samsung/$(BOARD)/tools/mk$(BOARD)spl,\ 294*4882a593Smuzhiyun $(objtree)/tools/mkexynosspl) $(VAR_SIZE_PARAM) $< $@ 295*4882a593Smuzhiyunendif 296*4882a593Smuzhiyun 297*4882a593Smuzhiyunquiet_cmd_objcopy = OBJCOPY $@ 298*4882a593Smuzhiyuncmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@ 299*4882a593Smuzhiyun 300*4882a593SmuzhiyunOBJCOPYFLAGS_$(SPL_BIN)-nodtb.bin = $(SPL_OBJCFLAGS) -O binary \ 301*4882a593Smuzhiyun $(if $(CONFIG_SPL_X86_16BIT_INIT),-R .start16 -R .resetvec) 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun$(obj)/$(SPL_BIN)-nodtb.bin: $(obj)/$(SPL_BIN) FORCE 304*4882a593Smuzhiyun $(call if_changed,objcopy) 305*4882a593Smuzhiyun 306*4882a593SmuzhiyunOBJCOPYFLAGS_u-boot-x86-16bit-spl.bin := -O binary -j .start16 -j .resetvec 307*4882a593Smuzhiyun$(obj)/u-boot-x86-16bit-spl.bin: $(obj)/u-boot-spl FORCE 308*4882a593Smuzhiyun $(call if_changed,objcopy) 309*4882a593Smuzhiyun 310*4882a593SmuzhiyunLDFLAGS_$(SPL_BIN) += -T u-boot-spl.lds $(LDFLAGS_FINAL) 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun# Avoid 'Not enough room for program headers' error on binutils 2.28 onwards. 313*4882a593SmuzhiyunLDFLAGS_$(SPL_BIN) += $(call ld-option, --no-dynamic-linker) 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun# First try the best-match (i.e. SPL_TEXT_BASE for SPL, TPL_TEXT_BASE for TPL) 316*4882a593Smuzhiyunifneq ($(CONFIG_$(SPL_TPL_)TEXT_BASE),) 317*4882a593SmuzhiyunLDFLAGS_$(SPL_BIN) += -Ttext $(CONFIG_$(SPL_TPL_)TEXT_BASE) 318*4882a593Smuzhiyunelse 319*4882a593Smuzhiyun# And then fall back to just testing for SPL_TEXT_BASE, even if in TPL mode 320*4882a593Smuzhiyunifneq ($(CONFIG_SPL_TEXT_BASE),) 321*4882a593SmuzhiyunLDFLAGS_$(SPL_BIN) += -Ttext $(CONFIG_SPL_TEXT_BASE) 322*4882a593Smuzhiyunendif 323*4882a593Smuzhiyunendif 324*4882a593Smuzhiyun 325*4882a593SmuzhiyunMKIMAGEFLAGS_$(SPL_BIN).sfp = -T socfpgaimage 326*4882a593Smuzhiyun$(obj)/$(SPL_BIN).sfp: $(obj)/$(SPL_BIN).bin FORCE 327*4882a593Smuzhiyun $(call if_changed,mkimage) 328*4882a593Smuzhiyun 329*4882a593Smuzhiyunquiet_cmd_mksunxiboot = MKSUNXI $@ 330*4882a593Smuzhiyuncmd_mksunxiboot = $(objtree)/tools/mksunxiboot \ 331*4882a593Smuzhiyun --default-dt $(CONFIG_DEFAULT_DEVICE_TREE) $< $@ 332*4882a593Smuzhiyun$(obj)/sunxi-spl.bin: $(obj)/$(SPL_BIN).bin FORCE 333*4882a593Smuzhiyun $(call if_changed,mksunxiboot) 334*4882a593Smuzhiyun 335*4882a593Smuzhiyunquiet_cmd_sunxi_spl_image_builder = SUNXI_SPL_IMAGE_BUILDER $@ 336*4882a593Smuzhiyuncmd_sunxi_spl_image_builder = $(objtree)/tools/sunxi-spl-image-builder \ 337*4882a593Smuzhiyun -c $(CONFIG_NAND_SUNXI_SPL_ECC_STRENGTH)/$(CONFIG_NAND_SUNXI_SPL_ECC_SIZE) \ 338*4882a593Smuzhiyun -p $(CONFIG_SYS_NAND_PAGE_SIZE) \ 339*4882a593Smuzhiyun -o $(CONFIG_SYS_NAND_OOBSIZE) \ 340*4882a593Smuzhiyun -u $(CONFIG_NAND_SUNXI_SPL_USABLE_PAGE_SIZE) \ 341*4882a593Smuzhiyun -e $(CONFIG_SYS_NAND_BLOCK_SIZE) \ 342*4882a593Smuzhiyun -s -b $< $@ 343*4882a593Smuzhiyun$(obj)/sunxi-spl-with-ecc.bin: $(obj)/sunxi-spl.bin 344*4882a593Smuzhiyun $(call if_changed,sunxi_spl_image_builder) 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun# Rule to link u-boot-spl 347*4882a593Smuzhiyun# May be overridden by arch/$(ARCH)/config.mk 348*4882a593Smuzhiyunquiet_cmd_u-boot-spl ?= LD $@ 349*4882a593Smuzhiyun cmd_u-boot-spl ?= (cd $(obj) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \ 350*4882a593Smuzhiyun $(patsubst $(obj)/%,%,$(u-boot-spl-init)) --start-group \ 351*4882a593Smuzhiyun $(patsubst $(obj)/%,%,$(u-boot-spl-main)) \ 352*4882a593Smuzhiyun $(patsubst $(obj)/%,%,$(u-boot-spl-platdata)) \ 353*4882a593Smuzhiyun --end-group \ 354*4882a593Smuzhiyun $(PLATFORM_LIBS) -Map $(SPL_BIN).map -o $(SPL_BIN) && \ 355*4882a593Smuzhiyun $(OBJDUMP) -t $(SPL_BIN) > $(SPL_BIN).sym) 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun$(obj)/$(SPL_BIN): $(u-boot-spl-platdata) $(u-boot-spl-init) \ 358*4882a593Smuzhiyun $(u-boot-spl-main) $(obj)/u-boot-spl.lds FORCE 359*4882a593Smuzhiyun $(call if_changed,u-boot-spl) 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun$(sort $(u-boot-spl-init) $(u-boot-spl-main)): $(u-boot-spl-dirs) ; 362*4882a593Smuzhiyun 363*4882a593SmuzhiyunPHONY += $(u-boot-spl-dirs) 364*4882a593Smuzhiyun$(u-boot-spl-dirs): $(u-boot-spl-platdata) 365*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=$@ 366*4882a593Smuzhiyun 367*4882a593Smuzhiyunquiet_cmd_cpp_lds = LDS $@ 368*4882a593Smuzhiyuncmd_cpp_lds = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) -ansi \ 369*4882a593Smuzhiyun -D__ASSEMBLY__ -x assembler-with-cpp -P -o $@ $< 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun$(obj)/u-boot-spl.lds: $(LDSCRIPT) FORCE 372*4882a593Smuzhiyun $(call if_changed_dep,cpp_lds) 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun# read all saved command lines 375*4882a593Smuzhiyun 376*4882a593Smuzhiyuntargets := $(wildcard $(sort $(targets))) 377*4882a593Smuzhiyuncmd_files := $(wildcard $(obj)/.*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd)) 378*4882a593Smuzhiyun 379*4882a593Smuzhiyunifneq ($(cmd_files),) 380*4882a593Smuzhiyun $(cmd_files): ; # Do not try to update included dependency files 381*4882a593Smuzhiyun include $(cmd_files) 382*4882a593Smuzhiyunendif 383*4882a593Smuzhiyun 384*4882a593SmuzhiyunPHONY += FORCE 385*4882a593SmuzhiyunFORCE: 386*4882a593Smuzhiyun 387*4882a593SmuzhiyunPHONY += dtbs 388*4882a593Smuzhiyundtbs: 389*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=dts dtbs 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun# Declare the contents of the .PHONY variable as phony. We keep that 392*4882a593Smuzhiyun# information in a variable so we can use it in if_changed and friends. 393*4882a593Smuzhiyun.PHONY: $(PHONY) 394*4882a593Smuzhiyun 395*4882a593SmuzhiyunSHRUNK_ARCH_DTB = $(patsubst %,$(obj)/dts/%.dtb,$(subst ",,$(CONFIG_SPL_OF_LIST))) 396*4882a593Smuzhiyun.SECONDEXPANSION: 397*4882a593Smuzhiyun$(SHRUNK_ARCH_DTB): $$(patsubst $(obj)/dts/%, arch/$(ARCH)/dts/%, $$@) 398*4882a593Smuzhiyun $(call if_changed,fdtgrep) 399*4882a593Smuzhiyun 400*4882a593SmuzhiyunMKIMAGEFLAGS_$(SPL_BIN).multidtb.fit = -f auto -A $(ARCH) -T firmware -C none -O u-boot \ 401*4882a593Smuzhiyun -n "Multi DTB fit image for $(SPL_BIN)" -E \ 402*4882a593Smuzhiyun $(patsubst %,-b %,$(SHRUNK_ARCH_DTB)) 403*4882a593Smuzhiyun 404*4882a593Smuzhiyun$(obj)/$(SPL_BIN).multidtb.fit: /dev/null $(SHRUNK_ARCH_DTB) FORCE 405*4882a593Smuzhiyun $(call if_changed,mkimage) 406*4882a593Smuzhiyun 407*4882a593Smuzhiyun$(obj)/$(SPL_BIN).multidtb.fit.gz: $(obj)/$(SPL_BIN).multidtb.fit 408*4882a593Smuzhiyun @gzip -kf9 $< > $@ 409*4882a593Smuzhiyun 410*4882a593Smuzhiyun$(obj)/$(SPL_BIN).multidtb.fit.lzo: $(obj)/$(SPL_BIN).multidtb.fit 411*4882a593Smuzhiyun @lzop -f9 $< > $@ 412