Commit f4dc714aaa2d86b84724ec01fb848da63aa63666

Authored by Scott Wood
Committed by Albert ARIBAUD
1 parent 8137af19e7

arm64: Turn u-boot.bin back into an ELF file after relocate-rela

While performing relocations on u-boot.bin should be good enough for
booting on real hardware, some simulators insist on booting an ELF file
(and yet don't perform ELF relocations), so convert the relocated
binary back into an ELF file.  This can go away in the future if we
change relocate-rela to operate directly on the ELF file, or if and
when we stop caring about a simulator with this restriction.

Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: David Feng <fenghua@phytium.com.cn>

Showing 1 changed file with 13 additions and 0 deletions Inline Diff

1 # 1 #
2 # (C) Copyright 2000-2013 2 # (C) Copyright 2000-2013
3 # Wolfgang Denk, DENX Software Engineering, wd@denx.de. 3 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4 # 4 #
5 # SPDX-License-Identifier: GPL-2.0+ 5 # SPDX-License-Identifier: GPL-2.0+
6 # 6 #
7 7
8 VERSION = 2014 8 VERSION = 2014
9 PATCHLEVEL = 01 9 PATCHLEVEL = 01
10 SUBLEVEL = 10 SUBLEVEL =
11 EXTRAVERSION = -rc1 11 EXTRAVERSION = -rc1
12 ifneq "$(SUBLEVEL)" "" 12 ifneq "$(SUBLEVEL)" ""
13 U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) 13 U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
14 else 14 else
15 U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL)$(EXTRAVERSION) 15 U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL)$(EXTRAVERSION)
16 endif 16 endif
17 TIMESTAMP_FILE = $(obj)include/generated/timestamp_autogenerated.h 17 TIMESTAMP_FILE = $(obj)include/generated/timestamp_autogenerated.h
18 VERSION_FILE = $(obj)include/generated/version_autogenerated.h 18 VERSION_FILE = $(obj)include/generated/version_autogenerated.h
19 19
20 HOSTARCH := $(shell uname -m | \ 20 HOSTARCH := $(shell uname -m | \
21 sed -e s/i.86/x86/ \ 21 sed -e s/i.86/x86/ \
22 -e s/sun4u/sparc64/ \ 22 -e s/sun4u/sparc64/ \
23 -e s/arm.*/arm/ \ 23 -e s/arm.*/arm/ \
24 -e s/sa110/arm/ \ 24 -e s/sa110/arm/ \
25 -e s/ppc64/powerpc/ \ 25 -e s/ppc64/powerpc/ \
26 -e s/ppc/powerpc/ \ 26 -e s/ppc/powerpc/ \
27 -e s/macppc/powerpc/\ 27 -e s/macppc/powerpc/\
28 -e s/sh.*/sh/) 28 -e s/sh.*/sh/)
29 29
30 HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \ 30 HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
31 sed -e 's/\(cygwin\).*/cygwin/') 31 sed -e 's/\(cygwin\).*/cygwin/')
32 32
33 export HOSTARCH HOSTOS 33 export HOSTARCH HOSTOS
34 34
35 # Deal with colliding definitions from tcsh etc. 35 # Deal with colliding definitions from tcsh etc.
36 VENDOR= 36 VENDOR=
37 37
38 ######################################################################### 38 #########################################################################
39 # Allow for silent builds 39 # Allow for silent builds
40 ifeq (,$(findstring s,$(MAKEFLAGS))) 40 ifeq (,$(findstring s,$(MAKEFLAGS)))
41 XECHO = echo 41 XECHO = echo
42 else 42 else
43 XECHO = : 43 XECHO = :
44 endif 44 endif
45 45
46 ######################################################################### 46 #########################################################################
47 # 47 #
48 # U-boot build supports generating object files in a separate external 48 # U-boot build supports generating object files in a separate external
49 # directory. Two use cases are supported: 49 # directory. Two use cases are supported:
50 # 50 #
51 # 1) Add O= to the make command line 51 # 1) Add O= to the make command line
52 # 'make O=/tmp/build all' 52 # 'make O=/tmp/build all'
53 # 53 #
54 # 2) Set environment variable BUILD_DIR to point to the desired location 54 # 2) Set environment variable BUILD_DIR to point to the desired location
55 # 'export BUILD_DIR=/tmp/build' 55 # 'export BUILD_DIR=/tmp/build'
56 # 'make' 56 # 'make'
57 # 57 #
58 # The second approach can also be used with a MAKEALL script 58 # The second approach can also be used with a MAKEALL script
59 # 'export BUILD_DIR=/tmp/build' 59 # 'export BUILD_DIR=/tmp/build'
60 # './MAKEALL' 60 # './MAKEALL'
61 # 61 #
62 # Command line 'O=' setting overrides BUILD_DIR environment variable. 62 # Command line 'O=' setting overrides BUILD_DIR environment variable.
63 # 63 #
64 # When none of the above methods is used the local build is performed and 64 # When none of the above methods is used the local build is performed and
65 # the object files are placed in the source directory. 65 # the object files are placed in the source directory.
66 # 66 #
67 67
68 ifeq ("$(origin O)", "command line") 68 ifeq ("$(origin O)", "command line")
69 BUILD_DIR := $(O) 69 BUILD_DIR := $(O)
70 endif 70 endif
71 71
72 # Call a source code checker (by default, "sparse") as part of the 72 # Call a source code checker (by default, "sparse") as part of the
73 # C compilation. 73 # C compilation.
74 # 74 #
75 # Use 'make C=1' to enable checking of re-compiled files. 75 # Use 'make C=1' to enable checking of re-compiled files.
76 # 76 #
77 # See the linux kernel file "Documentation/sparse.txt" for more details, 77 # See the linux kernel file "Documentation/sparse.txt" for more details,
78 # including where to get the "sparse" utility. 78 # including where to get the "sparse" utility.
79 79
80 ifdef C 80 ifdef C
81 ifeq ("$(origin C)", "command line") 81 ifeq ("$(origin C)", "command line")
82 CHECKSRC := $(C) 82 CHECKSRC := $(C)
83 endif 83 endif
84 endif 84 endif
85 ifndef CHECKSRC 85 ifndef CHECKSRC
86 CHECKSRC = 0 86 CHECKSRC = 0
87 endif 87 endif
88 export CHECKSRC 88 export CHECKSRC
89 89
90 ifneq ($(BUILD_DIR),) 90 ifneq ($(BUILD_DIR),)
91 saved-output := $(BUILD_DIR) 91 saved-output := $(BUILD_DIR)
92 92
93 # Attempt to create a output directory. 93 # Attempt to create a output directory.
94 $(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}) 94 $(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR})
95 95
96 # Verify if it was successful. 96 # Verify if it was successful.
97 BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd) 97 BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd)
98 $(if $(BUILD_DIR),,$(error output directory "$(saved-output)" does not exist)) 98 $(if $(BUILD_DIR),,$(error output directory "$(saved-output)" does not exist))
99 endif # ifneq ($(BUILD_DIR),) 99 endif # ifneq ($(BUILD_DIR),)
100 100
101 OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR)) 101 OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
102 SPLTREE := $(OBJTREE)/spl 102 SPLTREE := $(OBJTREE)/spl
103 TPLTREE := $(OBJTREE)/tpl 103 TPLTREE := $(OBJTREE)/tpl
104 SRCTREE := $(CURDIR) 104 SRCTREE := $(CURDIR)
105 TOPDIR := $(SRCTREE) 105 TOPDIR := $(SRCTREE)
106 LNDIR := $(OBJTREE) 106 LNDIR := $(OBJTREE)
107 export TOPDIR SRCTREE OBJTREE SPLTREE TPLTREE 107 export TOPDIR SRCTREE OBJTREE SPLTREE TPLTREE
108 108
109 MKCONFIG := $(SRCTREE)/mkconfig 109 MKCONFIG := $(SRCTREE)/mkconfig
110 export MKCONFIG 110 export MKCONFIG
111 111
112 ifneq ($(OBJTREE),$(SRCTREE)) 112 ifneq ($(OBJTREE),$(SRCTREE))
113 REMOTE_BUILD := 1 113 REMOTE_BUILD := 1
114 export REMOTE_BUILD 114 export REMOTE_BUILD
115 endif 115 endif
116 116
117 # $(obj) and (src) are defined in config.mk but here in main Makefile 117 # $(obj) and (src) are defined in config.mk but here in main Makefile
118 # we also need them before config.mk is included which is the case for 118 # we also need them before config.mk is included which is the case for
119 # some targets like unconfig, clean, clobber, distclean, etc. 119 # some targets like unconfig, clean, clobber, distclean, etc.
120 ifneq ($(OBJTREE),$(SRCTREE)) 120 ifneq ($(OBJTREE),$(SRCTREE))
121 obj := $(OBJTREE)/ 121 obj := $(OBJTREE)/
122 src := $(SRCTREE)/ 122 src := $(SRCTREE)/
123 else 123 else
124 obj := 124 obj :=
125 src := 125 src :=
126 endif 126 endif
127 export obj src 127 export obj src
128 128
129 # Make sure CDPATH settings don't interfere 129 # Make sure CDPATH settings don't interfere
130 unexport CDPATH 130 unexport CDPATH
131 131
132 ######################################################################### 132 #########################################################################
133 133
134 # The "tools" are needed early, so put this first 134 # The "tools" are needed early, so put this first
135 # Don't include stuff already done in $(LIBS) 135 # Don't include stuff already done in $(LIBS)
136 # The "examples" conditionally depend on U-Boot (say, when USE_PRIVATE_LIBGCC 136 # The "examples" conditionally depend on U-Boot (say, when USE_PRIVATE_LIBGCC
137 # is "yes"), so compile examples after U-Boot is compiled. 137 # is "yes"), so compile examples after U-Boot is compiled.
138 SUBDIR_TOOLS = tools 138 SUBDIR_TOOLS = tools
139 SUBDIRS = $(SUBDIR_TOOLS) 139 SUBDIRS = $(SUBDIR_TOOLS)
140 140
141 .PHONY : $(SUBDIRS) $(VERSION_FILE) $(TIMESTAMP_FILE) 141 .PHONY : $(SUBDIRS) $(VERSION_FILE) $(TIMESTAMP_FILE)
142 142
143 ifeq ($(obj)include/config.mk,$(wildcard $(obj)include/config.mk)) 143 ifeq ($(obj)include/config.mk,$(wildcard $(obj)include/config.mk))
144 144
145 # Include autoconf.mk before config.mk so that the config options are available 145 # Include autoconf.mk before config.mk so that the config options are available
146 # to all top level build files. We need the dummy all: target to prevent the 146 # to all top level build files. We need the dummy all: target to prevent the
147 # dependency target in autoconf.mk.dep from being the default. 147 # dependency target in autoconf.mk.dep from being the default.
148 all: 148 all:
149 sinclude $(obj)include/autoconf.mk.dep 149 sinclude $(obj)include/autoconf.mk.dep
150 sinclude $(obj)include/autoconf.mk 150 sinclude $(obj)include/autoconf.mk
151 151
152 SUBDIR_EXAMPLES-y := examples/standalone 152 SUBDIR_EXAMPLES-y := examples/standalone
153 SUBDIR_EXAMPLES-$(CONFIG_API) += examples/api 153 SUBDIR_EXAMPLES-$(CONFIG_API) += examples/api
154 ifndef CONFIG_SANDBOX 154 ifndef CONFIG_SANDBOX
155 SUBDIRS += $(SUBDIR_EXAMPLES-y) 155 SUBDIRS += $(SUBDIR_EXAMPLES-y)
156 endif 156 endif
157 157
158 # load ARCH, BOARD, and CPU configuration 158 # load ARCH, BOARD, and CPU configuration
159 include $(obj)include/config.mk 159 include $(obj)include/config.mk
160 export ARCH CPU BOARD VENDOR SOC 160 export ARCH CPU BOARD VENDOR SOC
161 161
162 # set default to nothing for native builds 162 # set default to nothing for native builds
163 ifeq ($(HOSTARCH),$(ARCH)) 163 ifeq ($(HOSTARCH),$(ARCH))
164 CROSS_COMPILE ?= 164 CROSS_COMPILE ?=
165 endif 165 endif
166 166
167 # load other configuration 167 # load other configuration
168 include $(TOPDIR)/config.mk 168 include $(TOPDIR)/config.mk
169 169
170 # Targets which don't build the source code 170 # Targets which don't build the source code
171 NON_BUILD_TARGETS = backup clean clobber distclean mkproper tidy unconfig 171 NON_BUILD_TARGETS = backup clean clobber distclean mkproper tidy unconfig
172 172
173 # Only do the generic board check when actually building, not configuring 173 # Only do the generic board check when actually building, not configuring
174 ifeq ($(filter $(NON_BUILD_TARGETS),$(MAKECMDGOALS)),) 174 ifeq ($(filter $(NON_BUILD_TARGETS),$(MAKECMDGOALS)),)
175 ifeq ($(findstring _config,$(MAKECMDGOALS)),) 175 ifeq ($(findstring _config,$(MAKECMDGOALS)),)
176 $(CHECK_GENERIC_BOARD) 176 $(CHECK_GENERIC_BOARD)
177 endif 177 endif
178 endif 178 endif
179 179
180 # If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use 180 # If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use
181 # that (or fail if absent). Otherwise, search for a linker script in a 181 # that (or fail if absent). Otherwise, search for a linker script in a
182 # standard location. 182 # standard location.
183 183
184 LDSCRIPT_MAKEFILE_DIR = $(dir $(LDSCRIPT)) 184 LDSCRIPT_MAKEFILE_DIR = $(dir $(LDSCRIPT))
185 185
186 ifndef LDSCRIPT 186 ifndef LDSCRIPT
187 #LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug 187 #LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug
188 ifdef CONFIG_SYS_LDSCRIPT 188 ifdef CONFIG_SYS_LDSCRIPT
189 # need to strip off double quotes 189 # need to strip off double quotes
190 LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT)) 190 LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
191 endif 191 endif
192 endif 192 endif
193 193
194 # If there is no specified link script, we look in a number of places for it 194 # If there is no specified link script, we look in a number of places for it
195 ifndef LDSCRIPT 195 ifndef LDSCRIPT
196 ifeq ($(CONFIG_NAND_U_BOOT),y) 196 ifeq ($(CONFIG_NAND_U_BOOT),y)
197 LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds 197 LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
198 ifeq ($(wildcard $(LDSCRIPT)),) 198 ifeq ($(wildcard $(LDSCRIPT)),)
199 LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot-nand.lds 199 LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot-nand.lds
200 endif 200 endif
201 endif 201 endif
202 ifeq ($(wildcard $(LDSCRIPT)),) 202 ifeq ($(wildcard $(LDSCRIPT)),)
203 LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds 203 LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
204 endif 204 endif
205 ifeq ($(wildcard $(LDSCRIPT)),) 205 ifeq ($(wildcard $(LDSCRIPT)),)
206 LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot.lds 206 LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot.lds
207 endif 207 endif
208 ifeq ($(wildcard $(LDSCRIPT)),) 208 ifeq ($(wildcard $(LDSCRIPT)),)
209 LDSCRIPT := $(TOPDIR)/arch/$(ARCH)/cpu/u-boot.lds 209 LDSCRIPT := $(TOPDIR)/arch/$(ARCH)/cpu/u-boot.lds
210 # We don't expect a Makefile here 210 # We don't expect a Makefile here
211 LDSCRIPT_MAKEFILE_DIR = 211 LDSCRIPT_MAKEFILE_DIR =
212 endif 212 endif
213 ifeq ($(wildcard $(LDSCRIPT)),) 213 ifeq ($(wildcard $(LDSCRIPT)),)
214 $(error could not find linker script) 214 $(error could not find linker script)
215 endif 215 endif
216 endif 216 endif
217 217
218 ######################################################################### 218 #########################################################################
219 # U-Boot objects....order is important (i.e. start must be first) 219 # U-Boot objects....order is important (i.e. start must be first)
220 220
221 OBJS = $(CPUDIR)/start.o 221 OBJS = $(CPUDIR)/start.o
222 ifeq ($(CPU),ppc4xx) 222 ifeq ($(CPU),ppc4xx)
223 OBJS += $(CPUDIR)/resetvec.o 223 OBJS += $(CPUDIR)/resetvec.o
224 endif 224 endif
225 ifeq ($(CPU),mpc85xx) 225 ifeq ($(CPU),mpc85xx)
226 OBJS += $(CPUDIR)/resetvec.o 226 OBJS += $(CPUDIR)/resetvec.o
227 endif 227 endif
228 228
229 OBJS := $(addprefix $(obj),$(OBJS)) 229 OBJS := $(addprefix $(obj),$(OBJS))
230 230
231 HAVE_VENDOR_COMMON_LIB = $(if $(wildcard board/$(VENDOR)/common/Makefile),y,n) 231 HAVE_VENDOR_COMMON_LIB = $(if $(wildcard board/$(VENDOR)/common/Makefile),y,n)
232 232
233 LIBS-y += lib/ 233 LIBS-y += lib/
234 LIBS-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/ 234 LIBS-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
235 LIBS-y += $(CPUDIR)/ 235 LIBS-y += $(CPUDIR)/
236 ifdef SOC 236 ifdef SOC
237 LIBS-y += $(CPUDIR)/$(SOC)/ 237 LIBS-y += $(CPUDIR)/$(SOC)/
238 endif 238 endif
239 LIBS-$(CONFIG_IXP4XX_NPE) += drivers/net/npe/ 239 LIBS-$(CONFIG_IXP4XX_NPE) += drivers/net/npe/
240 LIBS-$(CONFIG_OF_EMBED) += dts/ 240 LIBS-$(CONFIG_OF_EMBED) += dts/
241 LIBS-y += arch/$(ARCH)/lib/ 241 LIBS-y += arch/$(ARCH)/lib/
242 LIBS-y += fs/ 242 LIBS-y += fs/
243 LIBS-y += net/ 243 LIBS-y += net/
244 LIBS-y += disk/ 244 LIBS-y += disk/
245 LIBS-y += drivers/ 245 LIBS-y += drivers/
246 LIBS-y += drivers/dma/ 246 LIBS-y += drivers/dma/
247 LIBS-y += drivers/gpio/ 247 LIBS-y += drivers/gpio/
248 LIBS-y += drivers/i2c/ 248 LIBS-y += drivers/i2c/
249 LIBS-y += drivers/input/ 249 LIBS-y += drivers/input/
250 LIBS-y += drivers/mmc/ 250 LIBS-y += drivers/mmc/
251 LIBS-y += drivers/mtd/ 251 LIBS-y += drivers/mtd/
252 LIBS-y += drivers/mtd/nand/ 252 LIBS-y += drivers/mtd/nand/
253 LIBS-y += drivers/mtd/onenand/ 253 LIBS-y += drivers/mtd/onenand/
254 LIBS-y += drivers/mtd/ubi/ 254 LIBS-y += drivers/mtd/ubi/
255 LIBS-y += drivers/mtd/spi/ 255 LIBS-y += drivers/mtd/spi/
256 LIBS-y += drivers/net/ 256 LIBS-y += drivers/net/
257 LIBS-y += drivers/net/phy/ 257 LIBS-y += drivers/net/phy/
258 LIBS-y += drivers/pci/ 258 LIBS-y += drivers/pci/
259 LIBS-y += drivers/power/ \ 259 LIBS-y += drivers/power/ \
260 drivers/power/fuel_gauge/ \ 260 drivers/power/fuel_gauge/ \
261 drivers/power/mfd/ \ 261 drivers/power/mfd/ \
262 drivers/power/pmic/ \ 262 drivers/power/pmic/ \
263 drivers/power/battery/ 263 drivers/power/battery/
264 LIBS-y += drivers/spi/ 264 LIBS-y += drivers/spi/
265 LIBS-$(CONFIG_FMAN_ENET) += drivers/net/fm/ 265 LIBS-$(CONFIG_FMAN_ENET) += drivers/net/fm/
266 LIBS-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/ 266 LIBS-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
267 LIBS-y += drivers/serial/ 267 LIBS-y += drivers/serial/
268 LIBS-y += drivers/usb/eth/ 268 LIBS-y += drivers/usb/eth/
269 LIBS-y += drivers/usb/gadget/ 269 LIBS-y += drivers/usb/gadget/
270 LIBS-y += drivers/usb/host/ 270 LIBS-y += drivers/usb/host/
271 LIBS-y += drivers/usb/musb/ 271 LIBS-y += drivers/usb/musb/
272 LIBS-y += drivers/usb/musb-new/ 272 LIBS-y += drivers/usb/musb-new/
273 LIBS-y += drivers/usb/phy/ 273 LIBS-y += drivers/usb/phy/
274 LIBS-y += drivers/usb/ulpi/ 274 LIBS-y += drivers/usb/ulpi/
275 LIBS-y += common/ 275 LIBS-y += common/
276 LIBS-y += lib/libfdt/ 276 LIBS-y += lib/libfdt/
277 LIBS-$(CONFIG_API) += api/ 277 LIBS-$(CONFIG_API) += api/
278 LIBS-y += post/ 278 LIBS-y += post/
279 LIBS-y += test/ 279 LIBS-y += test/
280 280
281 ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35 mxs vf610)) 281 ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35 mxs vf610))
282 LIBS-y += arch/$(ARCH)/imx-common/ 282 LIBS-y += arch/$(ARCH)/imx-common/
283 endif 283 endif
284 284
285 LIBS-$(CONFIG_ARM) += arch/arm/cpu/ 285 LIBS-$(CONFIG_ARM) += arch/arm/cpu/
286 LIBS-$(CONFIG_PPC) += arch/powerpc/cpu/ 286 LIBS-$(CONFIG_PPC) += arch/powerpc/cpu/
287 287
288 LIBS-y += board/$(BOARDDIR)/ 288 LIBS-y += board/$(BOARDDIR)/
289 289
290 LIBS-y := $(patsubst %/, %/built-in.o, $(LIBS-y)) 290 LIBS-y := $(patsubst %/, %/built-in.o, $(LIBS-y))
291 LIBS := $(addprefix $(obj),$(sort $(LIBS-y))) 291 LIBS := $(addprefix $(obj),$(sort $(LIBS-y)))
292 .PHONY : $(LIBS) 292 .PHONY : $(LIBS)
293 293
294 # Add GCC lib 294 # Add GCC lib
295 ifdef USE_PRIVATE_LIBGCC 295 ifdef USE_PRIVATE_LIBGCC
296 ifeq ("$(USE_PRIVATE_LIBGCC)", "yes") 296 ifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
297 PLATFORM_LIBGCC = $(OBJTREE)/arch/$(ARCH)/lib/libgcc.o 297 PLATFORM_LIBGCC = $(OBJTREE)/arch/$(ARCH)/lib/libgcc.o
298 else 298 else
299 PLATFORM_LIBGCC = -L $(USE_PRIVATE_LIBGCC) -lgcc 299 PLATFORM_LIBGCC = -L $(USE_PRIVATE_LIBGCC) -lgcc
300 endif 300 endif
301 else 301 else
302 PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc 302 PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc
303 endif 303 endif
304 PLATFORM_LIBS += $(PLATFORM_LIBGCC) 304 PLATFORM_LIBS += $(PLATFORM_LIBGCC)
305 export PLATFORM_LIBS 305 export PLATFORM_LIBS
306 306
307 # Special flags for CPP when processing the linker script. 307 # Special flags for CPP when processing the linker script.
308 # Pass the version down so we can handle backwards compatibility 308 # Pass the version down so we can handle backwards compatibility
309 # on the fly. 309 # on the fly.
310 LDPPFLAGS += \ 310 LDPPFLAGS += \
311 -include $(TOPDIR)/include/u-boot/u-boot.lds.h \ 311 -include $(TOPDIR)/include/u-boot/u-boot.lds.h \
312 -DCPUDIR=$(CPUDIR) \ 312 -DCPUDIR=$(CPUDIR) \
313 $(shell $(LD) --version | \ 313 $(shell $(LD) --version | \
314 sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p') 314 sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p')
315 315
316 __OBJS := $(subst $(obj),,$(OBJS)) 316 __OBJS := $(subst $(obj),,$(OBJS))
317 __LIBS := $(subst $(obj),,$(LIBS)) 317 __LIBS := $(subst $(obj),,$(LIBS))
318 318
319 ######################################################################### 319 #########################################################################
320 ######################################################################### 320 #########################################################################
321 321
322 ifneq ($(CONFIG_BOARD_SIZE_LIMIT),) 322 ifneq ($(CONFIG_BOARD_SIZE_LIMIT),)
323 BOARD_SIZE_CHECK = \ 323 BOARD_SIZE_CHECK = \
324 @actual=`wc -c $@ | awk '{print $$1}'`; \ 324 @actual=`wc -c $@ | awk '{print $$1}'`; \
325 limit=`printf "%d" $(CONFIG_BOARD_SIZE_LIMIT)`; \ 325 limit=`printf "%d" $(CONFIG_BOARD_SIZE_LIMIT)`; \
326 if test $$actual -gt $$limit; then \ 326 if test $$actual -gt $$limit; then \
327 echo "$@ exceeds file size limit:" >&2 ; \ 327 echo "$@ exceeds file size limit:" >&2 ; \
328 echo " limit: $$limit bytes" >&2 ; \ 328 echo " limit: $$limit bytes" >&2 ; \
329 echo " actual: $$actual bytes" >&2 ; \ 329 echo " actual: $$actual bytes" >&2 ; \
330 echo " excess: $$((actual - limit)) bytes" >&2; \ 330 echo " excess: $$((actual - limit)) bytes" >&2; \
331 exit 1; \ 331 exit 1; \
332 fi 332 fi
333 else 333 else
334 BOARD_SIZE_CHECK = 334 BOARD_SIZE_CHECK =
335 endif 335 endif
336 336
337 # Statically apply RELA-style relocations (currently arm64 only) 337 # Statically apply RELA-style relocations (currently arm64 only)
338 ifneq ($(CONFIG_STATIC_RELA),) 338 ifneq ($(CONFIG_STATIC_RELA),)
339 # $(1) is u-boot ELF, $(2) is u-boot bin, $(3) is text base 339 # $(1) is u-boot ELF, $(2) is u-boot bin, $(3) is text base
340 DO_STATIC_RELA = \ 340 DO_STATIC_RELA = \
341 start=$$($(NM) $(1) | grep __rel_dyn_start | cut -f 1 -d ' '); \ 341 start=$$($(NM) $(1) | grep __rel_dyn_start | cut -f 1 -d ' '); \
342 end=$$($(NM) $(1) | grep __rel_dyn_end | cut -f 1 -d ' '); \ 342 end=$$($(NM) $(1) | grep __rel_dyn_end | cut -f 1 -d ' '); \
343 $(obj)tools/relocate-rela $(2) $(3) $$start $$end 343 $(obj)tools/relocate-rela $(2) $(3) $$start $$end
344 else 344 else
345 DO_STATIC_RELA = 345 DO_STATIC_RELA =
346 endif 346 endif
347 347
348 # Always append ALL so that arch config.mk's can add custom ones 348 # Always append ALL so that arch config.mk's can add custom ones
349 ALL-y += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map 349 ALL-y += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map
350 350
351 ALL-$(CONFIG_NAND_U_BOOT) += $(obj)u-boot-nand.bin 351 ALL-$(CONFIG_NAND_U_BOOT) += $(obj)u-boot-nand.bin
352 ALL-$(CONFIG_ONENAND_U_BOOT) += $(obj)u-boot-onenand.bin 352 ALL-$(CONFIG_ONENAND_U_BOOT) += $(obj)u-boot-onenand.bin
353 ALL-$(CONFIG_RAMBOOT_PBL) += $(obj)u-boot.pbl 353 ALL-$(CONFIG_RAMBOOT_PBL) += $(obj)u-boot.pbl
354 ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin 354 ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin
355 ALL-$(CONFIG_SPL_FRAMEWORK) += $(obj)u-boot.img 355 ALL-$(CONFIG_SPL_FRAMEWORK) += $(obj)u-boot.img
356 ALL-$(CONFIG_TPL) += $(obj)tpl/u-boot-tpl.bin 356 ALL-$(CONFIG_TPL) += $(obj)tpl/u-boot-tpl.bin
357 ALL-$(CONFIG_OF_SEPARATE) += $(obj)u-boot.dtb $(obj)u-boot-dtb.bin 357 ALL-$(CONFIG_OF_SEPARATE) += $(obj)u-boot.dtb $(obj)u-boot-dtb.bin
358 ifneq ($(CONFIG_SPL_TARGET),) 358 ifneq ($(CONFIG_SPL_TARGET),)
359 ALL-$(CONFIG_SPL) += $(obj)$(subst ",,$(CONFIG_SPL_TARGET)) 359 ALL-$(CONFIG_SPL) += $(obj)$(subst ",,$(CONFIG_SPL_TARGET))
360 endif 360 endif
361 ALL-$(CONFIG_REMAKE_ELF) += $(obj)u-boot.elf
361 362
362 # enable combined SPL/u-boot/dtb rules for tegra 363 # enable combined SPL/u-boot/dtb rules for tegra
363 ifneq ($(CONFIG_TEGRA),) 364 ifneq ($(CONFIG_TEGRA),)
364 ifeq ($(CONFIG_SPL),y) 365 ifeq ($(CONFIG_SPL),y)
365 ifeq ($(CONFIG_OF_SEPARATE),y) 366 ifeq ($(CONFIG_OF_SEPARATE),y)
366 ALL-y += $(obj)u-boot-dtb-tegra.bin 367 ALL-y += $(obj)u-boot-dtb-tegra.bin
367 else 368 else
368 ALL-y += $(obj)u-boot-nodtb-tegra.bin 369 ALL-y += $(obj)u-boot-nodtb-tegra.bin
369 endif 370 endif
370 endif 371 endif
371 endif 372 endif
372 373
373 build := -f $(TOPDIR)/scripts/Makefile.build -C 374 build := -f $(TOPDIR)/scripts/Makefile.build -C
374 375
375 all: $(ALL-y) $(SUBDIR_EXAMPLES-y) 376 all: $(ALL-y) $(SUBDIR_EXAMPLES-y)
376 377
377 $(obj)u-boot.dtb: checkdtc $(obj)u-boot 378 $(obj)u-boot.dtb: checkdtc $(obj)u-boot
378 $(MAKE) $(build) dts binary 379 $(MAKE) $(build) dts binary
379 mv $(obj)dts/dt.dtb $@ 380 mv $(obj)dts/dt.dtb $@
380 381
381 $(obj)u-boot-dtb.bin: $(obj)u-boot.bin $(obj)u-boot.dtb 382 $(obj)u-boot-dtb.bin: $(obj)u-boot.bin $(obj)u-boot.dtb
382 cat $^ >$@ 383 cat $^ >$@
383 384
384 $(obj)u-boot.hex: $(obj)u-boot 385 $(obj)u-boot.hex: $(obj)u-boot
385 $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ 386 $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@
386 387
387 $(obj)u-boot.srec: $(obj)u-boot 388 $(obj)u-boot.srec: $(obj)u-boot
388 $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ 389 $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@
389 390
390 $(obj)u-boot.bin: $(obj)u-boot 391 $(obj)u-boot.bin: $(obj)u-boot
391 $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@ 392 $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
392 $(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE)) 393 $(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
393 $(BOARD_SIZE_CHECK) 394 $(BOARD_SIZE_CHECK)
394 395
395 $(obj)u-boot.ldr: $(obj)u-boot 396 $(obj)u-boot.ldr: $(obj)u-boot
396 $(CREATE_LDR_ENV) 397 $(CREATE_LDR_ENV)
397 $(LDR) -T $(CONFIG_BFIN_CPU) -c $@ $< $(LDR_FLAGS) 398 $(LDR) -T $(CONFIG_BFIN_CPU) -c $@ $< $(LDR_FLAGS)
398 $(BOARD_SIZE_CHECK) 399 $(BOARD_SIZE_CHECK)
399 400
400 $(obj)u-boot.ldr.hex: $(obj)u-boot.ldr 401 $(obj)u-boot.ldr.hex: $(obj)u-boot.ldr
401 $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ -I binary 402 $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ -I binary
402 403
403 $(obj)u-boot.ldr.srec: $(obj)u-boot.ldr 404 $(obj)u-boot.ldr.srec: $(obj)u-boot.ldr
404 $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ -I binary 405 $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ -I binary
405 406
406 # 407 #
407 # U-Boot entry point, needed for booting of full-blown U-Boot 408 # U-Boot entry point, needed for booting of full-blown U-Boot
408 # from the SPL U-Boot version. 409 # from the SPL U-Boot version.
409 # 410 #
410 ifndef CONFIG_SYS_UBOOT_START 411 ifndef CONFIG_SYS_UBOOT_START
411 CONFIG_SYS_UBOOT_START := 0 412 CONFIG_SYS_UBOOT_START := 0
412 endif 413 endif
413 414
414 $(obj)u-boot.img: $(obj)u-boot.bin 415 $(obj)u-boot.img: $(obj)u-boot.bin
415 $(obj)tools/mkimage -A $(ARCH) -T firmware -C none \ 416 $(obj)tools/mkimage -A $(ARCH) -T firmware -C none \
416 -O u-boot -a $(CONFIG_SYS_TEXT_BASE) \ 417 -O u-boot -a $(CONFIG_SYS_TEXT_BASE) \
417 -e $(CONFIG_SYS_UBOOT_START) \ 418 -e $(CONFIG_SYS_UBOOT_START) \
418 -n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \ 419 -n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \
419 sed -e 's/"[ ]*$$/ for $(BOARD) board"/') \ 420 sed -e 's/"[ ]*$$/ for $(BOARD) board"/') \
420 -d $< $@ 421 -d $< $@
421 422
422 $(obj)u-boot.imx: $(obj)u-boot.bin depend 423 $(obj)u-boot.imx: $(obj)u-boot.bin depend
423 $(MAKE) $(build) $(SRCTREE)/arch/arm/imx-common $(OBJTREE)/u-boot.imx 424 $(MAKE) $(build) $(SRCTREE)/arch/arm/imx-common $(OBJTREE)/u-boot.imx
424 425
425 $(obj)u-boot.kwb: $(obj)u-boot.bin 426 $(obj)u-boot.kwb: $(obj)u-boot.bin
426 $(obj)tools/mkimage -n $(CONFIG_SYS_KWD_CONFIG) -T kwbimage \ 427 $(obj)tools/mkimage -n $(CONFIG_SYS_KWD_CONFIG) -T kwbimage \
427 -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) -d $< $@ 428 -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) -d $< $@
428 429
429 $(obj)u-boot.pbl: $(obj)u-boot.bin 430 $(obj)u-boot.pbl: $(obj)u-boot.bin
430 $(obj)tools/mkimage -n $(CONFIG_PBLRCW_CONFIG) \ 431 $(obj)tools/mkimage -n $(CONFIG_PBLRCW_CONFIG) \
431 -R $(CONFIG_PBLPBI_CONFIG) -T pblimage \ 432 -R $(CONFIG_PBLPBI_CONFIG) -T pblimage \
432 -d $< $@ 433 -d $< $@
433 434
434 $(obj)u-boot.sha1: $(obj)u-boot.bin 435 $(obj)u-boot.sha1: $(obj)u-boot.bin
435 $(obj)tools/ubsha1 $(obj)u-boot.bin 436 $(obj)tools/ubsha1 $(obj)u-boot.bin
436 437
437 $(obj)u-boot.dis: $(obj)u-boot 438 $(obj)u-boot.dis: $(obj)u-boot
438 $(OBJDUMP) -d $< > $@ 439 $(OBJDUMP) -d $< > $@
439 440
440 # $@ is output, $(1) and $(2) are inputs, $(3) is padded intermediate, 441 # $@ is output, $(1) and $(2) are inputs, $(3) is padded intermediate,
441 # $(4) is pad-to 442 # $(4) is pad-to
442 SPL_PAD_APPEND = \ 443 SPL_PAD_APPEND = \
443 $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(4) -I binary -O binary \ 444 $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(4) -I binary -O binary \
444 $(1) $(obj)$(3); \ 445 $(1) $(obj)$(3); \
445 cat $(obj)$(3) $(2) > $@; \ 446 cat $(obj)$(3) $(2) > $@; \
446 rm $(obj)$(3) 447 rm $(obj)$(3)
447 448
448 ifdef CONFIG_TPL 449 ifdef CONFIG_TPL
449 SPL_PAYLOAD := $(obj)tpl/u-boot-with-tpl.bin 450 SPL_PAYLOAD := $(obj)tpl/u-boot-with-tpl.bin
450 else 451 else
451 SPL_PAYLOAD := $(obj)u-boot.bin 452 SPL_PAYLOAD := $(obj)u-boot.bin
452 endif 453 endif
453 454
454 $(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(SPL_PAYLOAD) 455 $(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(SPL_PAYLOAD)
455 $(call SPL_PAD_APPEND,$<,$(SPL_PAYLOAD),spl/u-boot-spl-pad.bin,$(CONFIG_SPL_PAD_TO)) 456 $(call SPL_PAD_APPEND,$<,$(SPL_PAYLOAD),spl/u-boot-spl-pad.bin,$(CONFIG_SPL_PAD_TO))
456 457
457 $(obj)tpl/u-boot-with-tpl.bin: $(obj)tpl/u-boot-tpl.bin $(obj)u-boot.bin 458 $(obj)tpl/u-boot-with-tpl.bin: $(obj)tpl/u-boot-tpl.bin $(obj)u-boot.bin
458 $(call SPL_PAD_APPEND,$<,$(obj)u-boot.bin,tpl/u-boot-tpl-pad.bin,$(CONFIG_TPL_PAD_TO)) 459 $(call SPL_PAD_APPEND,$<,$(obj)u-boot.bin,tpl/u-boot-tpl-pad.bin,$(CONFIG_TPL_PAD_TO))
459 460
460 $(obj)u-boot-with-spl.imx: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin 461 $(obj)u-boot-with-spl.imx: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
461 $(MAKE) $(build) $(SRCTREE)/arch/arm/imx-common \ 462 $(MAKE) $(build) $(SRCTREE)/arch/arm/imx-common \
462 $(OBJTREE)/u-boot-with-spl.imx 463 $(OBJTREE)/u-boot-with-spl.imx
463 464
464 $(obj)u-boot-with-nand-spl.imx: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin 465 $(obj)u-boot-with-nand-spl.imx: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
465 $(MAKE) $(build) $(SRCTREE)/arch/arm/imx-common \ 466 $(MAKE) $(build) $(SRCTREE)/arch/arm/imx-common \
466 $(OBJTREE)/u-boot-with-nand-spl.imx 467 $(OBJTREE)/u-boot-with-nand-spl.imx
467 468
468 $(obj)u-boot.ubl: $(obj)u-boot-with-spl.bin 469 $(obj)u-boot.ubl: $(obj)u-boot-with-spl.bin
469 $(obj)tools/mkimage -n $(UBL_CONFIG) -T ublimage \ 470 $(obj)tools/mkimage -n $(UBL_CONFIG) -T ublimage \
470 -e $(CONFIG_SYS_TEXT_BASE) -d $< $(obj)u-boot.ubl 471 -e $(CONFIG_SYS_TEXT_BASE) -d $< $(obj)u-boot.ubl
471 472
472 $(obj)u-boot.ais: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img 473 $(obj)u-boot.ais: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
473 $(obj)tools/mkimage -s -n $(if $(CONFIG_AIS_CONFIG_FILE),$(CONFIG_AIS_CONFIG_FILE),"/dev/null") \ 474 $(obj)tools/mkimage -s -n $(if $(CONFIG_AIS_CONFIG_FILE),$(CONFIG_AIS_CONFIG_FILE),"/dev/null") \
474 -T aisimage \ 475 -T aisimage \
475 -e $(CONFIG_SPL_TEXT_BASE) \ 476 -e $(CONFIG_SPL_TEXT_BASE) \
476 -d $(obj)spl/u-boot-spl.bin \ 477 -d $(obj)spl/u-boot-spl.bin \
477 $(obj)spl/u-boot-spl.ais 478 $(obj)spl/u-boot-spl.ais
478 $(OBJCOPY) ${OBJCFLAGS} -I binary \ 479 $(OBJCOPY) ${OBJCFLAGS} -I binary \
479 --pad-to=$(CONFIG_SPL_MAX_SIZE) -O binary \ 480 --pad-to=$(CONFIG_SPL_MAX_SIZE) -O binary \
480 $(obj)spl/u-boot-spl.ais $(obj)spl/u-boot-spl-pad.ais 481 $(obj)spl/u-boot-spl.ais $(obj)spl/u-boot-spl-pad.ais
481 cat $(obj)spl/u-boot-spl-pad.ais $(obj)u-boot.img > \ 482 cat $(obj)spl/u-boot-spl-pad.ais $(obj)u-boot.img > \
482 $(obj)u-boot.ais 483 $(obj)u-boot.ais
483 484
484 485
485 $(obj)u-boot.sb: $(obj)u-boot.bin $(obj)spl/u-boot-spl.bin 486 $(obj)u-boot.sb: $(obj)u-boot.bin $(obj)spl/u-boot-spl.bin
486 $(MAKE) $(build) $(SRCTREE)/$(CPUDIR)/$(SOC)/ $(OBJTREE)/u-boot.sb 487 $(MAKE) $(build) $(SRCTREE)/$(CPUDIR)/$(SOC)/ $(OBJTREE)/u-boot.sb
487 488
488 # On x600 (SPEAr600) U-Boot is appended to U-Boot SPL. 489 # On x600 (SPEAr600) U-Boot is appended to U-Boot SPL.
489 # Both images are created using mkimage (crc etc), so that the ROM 490 # Both images are created using mkimage (crc etc), so that the ROM
490 # bootloader can check its integrity. Padding needs to be done to the 491 # bootloader can check its integrity. Padding needs to be done to the
491 # SPL image (with mkimage header) and not the binary. Otherwise the resulting image 492 # SPL image (with mkimage header) and not the binary. Otherwise the resulting image
492 # which is loaded/copied by the ROM bootloader to SRAM doesn't fit. 493 # which is loaded/copied by the ROM bootloader to SRAM doesn't fit.
493 # The resulting image containing both U-Boot images is called u-boot.spr 494 # The resulting image containing both U-Boot images is called u-boot.spr
494 $(obj)u-boot.spr: $(obj)u-boot.img $(obj)spl/u-boot-spl.bin 495 $(obj)u-boot.spr: $(obj)u-boot.img $(obj)spl/u-boot-spl.bin
495 $(obj)tools/mkimage -A $(ARCH) -T firmware -C none \ 496 $(obj)tools/mkimage -A $(ARCH) -T firmware -C none \
496 -a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n XLOADER \ 497 -a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n XLOADER \
497 -d $(obj)spl/u-boot-spl.bin $(obj)spl/u-boot-spl.img 498 -d $(obj)spl/u-boot-spl.bin $(obj)spl/u-boot-spl.img
498 tr "\000" "\377" < /dev/zero | dd ibs=1 count=$(CONFIG_SPL_PAD_TO) \ 499 tr "\000" "\377" < /dev/zero | dd ibs=1 count=$(CONFIG_SPL_PAD_TO) \
499 of=$(obj)spl/u-boot-spl-pad.img 2>/dev/null 500 of=$(obj)spl/u-boot-spl-pad.img 2>/dev/null
500 dd if=$(obj)spl/u-boot-spl.img of=$(obj)spl/u-boot-spl-pad.img \ 501 dd if=$(obj)spl/u-boot-spl.img of=$(obj)spl/u-boot-spl-pad.img \
501 conv=notrunc 2>/dev/null 502 conv=notrunc 2>/dev/null
502 cat $(obj)spl/u-boot-spl-pad.img $(obj)u-boot.img > $@ 503 cat $(obj)spl/u-boot-spl-pad.img $(obj)u-boot.img > $@
503 504
504 ifneq ($(CONFIG_TEGRA),) 505 ifneq ($(CONFIG_TEGRA),)
505 $(obj)u-boot-nodtb-tegra.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin 506 $(obj)u-boot-nodtb-tegra.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
506 $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SYS_TEXT_BASE) -O binary $(obj)spl/u-boot-spl $(obj)spl/u-boot-spl-pad.bin 507 $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SYS_TEXT_BASE) -O binary $(obj)spl/u-boot-spl $(obj)spl/u-boot-spl-pad.bin
507 cat $(obj)spl/u-boot-spl-pad.bin $(obj)u-boot.bin > $@ 508 cat $(obj)spl/u-boot-spl-pad.bin $(obj)u-boot.bin > $@
508 rm $(obj)spl/u-boot-spl-pad.bin 509 rm $(obj)spl/u-boot-spl-pad.bin
509 510
510 ifeq ($(CONFIG_OF_SEPARATE),y) 511 ifeq ($(CONFIG_OF_SEPARATE),y)
511 $(obj)u-boot-dtb-tegra.bin: $(obj)u-boot-nodtb-tegra.bin $(obj)u-boot.dtb 512 $(obj)u-boot-dtb-tegra.bin: $(obj)u-boot-nodtb-tegra.bin $(obj)u-boot.dtb
512 cat $(obj)u-boot-nodtb-tegra.bin $(obj)u-boot.dtb > $@ 513 cat $(obj)u-boot-nodtb-tegra.bin $(obj)u-boot.dtb > $@
513 endif 514 endif
514 endif 515 endif
515 516
516 $(obj)u-boot-img.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img 517 $(obj)u-boot-img.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
517 cat $(obj)spl/u-boot-spl.bin $(obj)u-boot.img > $@ 518 cat $(obj)spl/u-boot-spl.bin $(obj)u-boot.img > $@
518 519
519 # PPC4xx needs the SPL at the end of the image, since the reset vector 520 # PPC4xx needs the SPL at the end of the image, since the reset vector
520 # is located at 0xfffffffc. So we can't use the "u-boot-img.bin" target 521 # is located at 0xfffffffc. So we can't use the "u-boot-img.bin" target
521 # and need to introduce a new build target with the full blown U-Boot 522 # and need to introduce a new build target with the full blown U-Boot
522 # at the start padded up to the start of the SPL image. And then concat 523 # at the start padded up to the start of the SPL image. And then concat
523 # the SPL image to the end. 524 # the SPL image to the end.
524 $(obj)u-boot-img-spl-at-end.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img 525 $(obj)u-boot-img-spl-at-end.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
525 tr "\000" "\377" < /dev/zero | dd ibs=1 count=$(CONFIG_UBOOT_PAD_TO) \ 526 tr "\000" "\377" < /dev/zero | dd ibs=1 count=$(CONFIG_UBOOT_PAD_TO) \
526 of=$(obj)u-boot-pad.img 2>/dev/null 527 of=$(obj)u-boot-pad.img 2>/dev/null
527 dd if=$(obj)u-boot.img of=$(obj)u-boot-pad.img \ 528 dd if=$(obj)u-boot.img of=$(obj)u-boot-pad.img \
528 conv=notrunc 2>/dev/null 529 conv=notrunc 2>/dev/null
529 cat $(obj)u-boot-pad.img $(obj)spl/u-boot-spl.bin > $@ 530 cat $(obj)u-boot-pad.img $(obj)spl/u-boot-spl.bin > $@
531
532 # Create a new ELF from a raw binary file. This is useful for arm64
533 # where static relocation needs to be performed on the raw binary,
534 # but certain simulators only accept an ELF file (but don't do the
535 # relocation).
536 # FIXME refactor dts/Makefile to share target/arch detection
537 $(obj)u-boot.elf: $(obj)u-boot.bin
538 @$(OBJCOPY) -B aarch64 -I binary -O elf64-littleaarch64 \
539 $< $(obj)u-boot-elf.o
540 @$(LD) $(obj)u-boot-elf.o -o $@ \
541 --defsym=_start=$(CONFIG_SYS_TEXT_BASE) \
542 -Ttext=$(CONFIG_SYS_TEXT_BASE)
530 543
531 ifeq ($(CONFIG_SANDBOX),y) 544 ifeq ($(CONFIG_SANDBOX),y)
532 GEN_UBOOT = \ 545 GEN_UBOOT = \
533 cd $(LNDIR) && $(CC) $(SYMS) -T $(obj)u-boot.lds \ 546 cd $(LNDIR) && $(CC) $(SYMS) -T $(obj)u-boot.lds \
534 -Wl,--start-group $(__LIBS) -Wl,--end-group \ 547 -Wl,--start-group $(__LIBS) -Wl,--end-group \
535 $(PLATFORM_LIBS) -Wl,-Map -Wl,u-boot.map -o u-boot 548 $(PLATFORM_LIBS) -Wl,-Map -Wl,u-boot.map -o u-boot
536 else 549 else
537 GEN_UBOOT = \ 550 GEN_UBOOT = \
538 cd $(LNDIR) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \ 551 cd $(LNDIR) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \
539 $(__OBJS) \ 552 $(__OBJS) \
540 --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \ 553 --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
541 -Map u-boot.map -o u-boot 554 -Map u-boot.map -o u-boot
542 endif 555 endif
543 556
544 $(obj)u-boot: depend \ 557 $(obj)u-boot: depend \
545 $(SUBDIR_TOOLS) $(OBJS) $(LIBS) $(LDSCRIPT) $(obj)u-boot.lds 558 $(SUBDIR_TOOLS) $(OBJS) $(LIBS) $(LDSCRIPT) $(obj)u-boot.lds
546 $(GEN_UBOOT) 559 $(GEN_UBOOT)
547 ifeq ($(CONFIG_KALLSYMS),y) 560 ifeq ($(CONFIG_KALLSYMS),y)
548 smap=`$(call SYSTEM_MAP,$(obj)u-boot) | \ 561 smap=`$(call SYSTEM_MAP,$(obj)u-boot) | \
549 awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \ 562 awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \
550 $(CC) $(CFLAGS) -DSYSTEM_MAP="\"$${smap}\"" \ 563 $(CC) $(CFLAGS) -DSYSTEM_MAP="\"$${smap}\"" \
551 -c common/system_map.c -o $(obj)common/system_map.o 564 -c common/system_map.c -o $(obj)common/system_map.o
552 $(GEN_UBOOT) $(obj)common/system_map.o 565 $(GEN_UBOOT) $(obj)common/system_map.o
553 endif 566 endif
554 567
555 $(OBJS): 568 $(OBJS):
556 @: 569 @:
557 570
558 $(LIBS): depend $(SUBDIR_TOOLS) 571 $(LIBS): depend $(SUBDIR_TOOLS)
559 $(MAKE) $(build) $(dir $(subst $(obj),,$@)) 572 $(MAKE) $(build) $(dir $(subst $(obj),,$@))
560 573
561 $(SUBDIRS): depend 574 $(SUBDIRS): depend
562 $(MAKE) -C $@ all 575 $(MAKE) -C $@ all
563 576
564 $(SUBDIR_EXAMPLES-y): $(obj)u-boot 577 $(SUBDIR_EXAMPLES-y): $(obj)u-boot
565 578
566 $(LDSCRIPT): depend 579 $(LDSCRIPT): depend
567 $(MAKE) -C $(dir $@) $(notdir $@) 580 $(MAKE) -C $(dir $@) $(notdir $@)
568 581
569 $(obj)u-boot.lds: $(LDSCRIPT) 582 $(obj)u-boot.lds: $(LDSCRIPT)
570 $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$< >$@ 583 $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$< >$@
571 584
572 nand_spl: $(TIMESTAMP_FILE) $(VERSION_FILE) depend 585 nand_spl: $(TIMESTAMP_FILE) $(VERSION_FILE) depend
573 $(MAKE) -C nand_spl/board/$(BOARDDIR) all 586 $(MAKE) -C nand_spl/board/$(BOARDDIR) all
574 587
575 $(obj)u-boot-nand.bin: nand_spl $(obj)u-boot.bin 588 $(obj)u-boot-nand.bin: nand_spl $(obj)u-boot.bin
576 cat $(obj)nand_spl/u-boot-spl-16k.bin $(obj)u-boot.bin > $(obj)u-boot-nand.bin 589 cat $(obj)nand_spl/u-boot-spl-16k.bin $(obj)u-boot.bin > $(obj)u-boot-nand.bin
577 590
578 $(obj)spl/u-boot-spl.bin: $(SUBDIR_TOOLS) depend 591 $(obj)spl/u-boot-spl.bin: $(SUBDIR_TOOLS) depend
579 $(MAKE) -C spl all 592 $(MAKE) -C spl all
580 593
581 $(obj)tpl/u-boot-tpl.bin: $(SUBDIR_TOOLS) depend 594 $(obj)tpl/u-boot-tpl.bin: $(SUBDIR_TOOLS) depend
582 $(MAKE) -C spl all CONFIG_TPL_BUILD=y 595 $(MAKE) -C spl all CONFIG_TPL_BUILD=y
583 596
584 # Explicitly make _depend in subdirs containing multiple targets to prevent 597 # Explicitly make _depend in subdirs containing multiple targets to prevent
585 # parallel sub-makes creating .depend files simultaneously. 598 # parallel sub-makes creating .depend files simultaneously.
586 depend dep: $(TIMESTAMP_FILE) $(VERSION_FILE) \ 599 depend dep: $(TIMESTAMP_FILE) $(VERSION_FILE) \
587 $(obj)include/spl-autoconf.mk \ 600 $(obj)include/spl-autoconf.mk \
588 $(obj)include/tpl-autoconf.mk \ 601 $(obj)include/tpl-autoconf.mk \
589 $(obj)include/autoconf.mk \ 602 $(obj)include/autoconf.mk \
590 $(obj)include/generated/generic-asm-offsets.h \ 603 $(obj)include/generated/generic-asm-offsets.h \
591 $(obj)include/generated/asm-offsets.h 604 $(obj)include/generated/asm-offsets.h
592 605
593 TAG_SUBDIRS = $(SUBDIRS) 606 TAG_SUBDIRS = $(SUBDIRS)
594 TAG_SUBDIRS += $(dir $(__LIBS)) 607 TAG_SUBDIRS += $(dir $(__LIBS))
595 TAG_SUBDIRS += include 608 TAG_SUBDIRS += include
596 609
597 FIND := find 610 FIND := find
598 FINDFLAGS := -L 611 FINDFLAGS := -L
599 612
600 checkstack: 613 checkstack:
601 $(CROSS_COMPILE)objdump -d $(obj)u-boot \ 614 $(CROSS_COMPILE)objdump -d $(obj)u-boot \
602 `$(FIND) $(obj) -name u-boot-spl -print` | \ 615 `$(FIND) $(obj) -name u-boot-spl -print` | \
603 perl $(src)tools/checkstack.pl $(ARCH) 616 perl $(src)tools/checkstack.pl $(ARCH)
604 617
605 tags ctags: 618 tags ctags:
606 ctags -w -o $(obj)ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \ 619 ctags -w -o $(obj)ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
607 -name '*.[chS]' -print` 620 -name '*.[chS]' -print`
608 621
609 etags: 622 etags:
610 etags -a -o $(obj)etags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \ 623 etags -a -o $(obj)etags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
611 -name '*.[chS]' -print` 624 -name '*.[chS]' -print`
612 cscope: 625 cscope:
613 $(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) -name '*.[chS]' -print > \ 626 $(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) -name '*.[chS]' -print > \
614 cscope.files 627 cscope.files
615 cscope -b -q -k 628 cscope -b -q -k
616 629
617 SYSTEM_MAP = \ 630 SYSTEM_MAP = \
618 $(NM) $1 | \ 631 $(NM) $1 | \
619 grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \ 632 grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
620 LC_ALL=C sort 633 LC_ALL=C sort
621 $(obj)System.map: $(obj)u-boot 634 $(obj)System.map: $(obj)u-boot
622 @$(call SYSTEM_MAP,$<) > $@ 635 @$(call SYSTEM_MAP,$<) > $@
623 636
624 checkthumb: 637 checkthumb:
625 @if test $(call cc-version) -lt 0404; then \ 638 @if test $(call cc-version) -lt 0404; then \
626 echo -n '*** Your GCC does not produce working '; \ 639 echo -n '*** Your GCC does not produce working '; \
627 echo 'binaries in THUMB mode.'; \ 640 echo 'binaries in THUMB mode.'; \
628 echo '*** Your board is configured for THUMB mode.'; \ 641 echo '*** Your board is configured for THUMB mode.'; \
629 false; \ 642 false; \
630 fi 643 fi
631 644
632 # GCC 3.x is reported to have problems generating the type of relocation 645 # GCC 3.x is reported to have problems generating the type of relocation
633 # that U-Boot wants. 646 # that U-Boot wants.
634 # See http://lists.denx.de/pipermail/u-boot/2012-September/135156.html 647 # See http://lists.denx.de/pipermail/u-boot/2012-September/135156.html
635 checkgcc4: 648 checkgcc4:
636 @if test $(call cc-version) -lt 0400; then \ 649 @if test $(call cc-version) -lt 0400; then \
637 echo -n '*** Your GCC is too old, please upgrade to GCC 4.x or newer'; \ 650 echo -n '*** Your GCC is too old, please upgrade to GCC 4.x or newer'; \
638 false; \ 651 false; \
639 fi 652 fi
640 653
641 checkdtc: 654 checkdtc:
642 @if test $(call dtc-version) -lt 0104; then \ 655 @if test $(call dtc-version) -lt 0104; then \
643 echo '*** Your dtc is too old, please upgrade to dtc 1.4 or newer'; \ 656 echo '*** Your dtc is too old, please upgrade to dtc 1.4 or newer'; \
644 false; \ 657 false; \
645 fi 658 fi
646 659
647 # 660 #
648 # Auto-generate the autoconf.mk file (which is included by all makefiles) 661 # Auto-generate the autoconf.mk file (which is included by all makefiles)
649 # 662 #
650 # This target actually generates 2 files; autoconf.mk and autoconf.mk.dep. 663 # This target actually generates 2 files; autoconf.mk and autoconf.mk.dep.
651 # the dep file is only include in this top level makefile to determine when 664 # the dep file is only include in this top level makefile to determine when
652 # to regenerate the autoconf.mk file. 665 # to regenerate the autoconf.mk file.
653 $(obj)include/autoconf.mk.dep: $(obj)include/config.h include/common.h 666 $(obj)include/autoconf.mk.dep: $(obj)include/config.h include/common.h
654 @$(XECHO) Generating $@ ; \ 667 @$(XECHO) Generating $@ ; \
655 set -e ; \ 668 set -e ; \
656 : Generate the dependancies ; \ 669 : Generate the dependancies ; \
657 $(CC) -x c -DDO_DEPS_ONLY -M $(CFLAGS) $(CPPFLAGS) \ 670 $(CC) -x c -DDO_DEPS_ONLY -M $(CFLAGS) $(CPPFLAGS) \
658 -MQ $(obj)include/autoconf.mk include/common.h > $@ 671 -MQ $(obj)include/autoconf.mk include/common.h > $@
659 672
660 $(obj)include/autoconf.mk: $(obj)include/config.h 673 $(obj)include/autoconf.mk: $(obj)include/config.h
661 @$(XECHO) Generating $@ ; \ 674 @$(XECHO) Generating $@ ; \
662 set -e ; \ 675 set -e ; \
663 : Extract the config macros ; \ 676 : Extract the config macros ; \
664 $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \ 677 $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \
665 sed -n -f tools/scripts/define2mk.sed > $@.tmp && \ 678 sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
666 mv $@.tmp $@ 679 mv $@.tmp $@
667 680
668 # Auto-generate the spl-autoconf.mk file (which is included by all makefiles for SPL) 681 # Auto-generate the spl-autoconf.mk file (which is included by all makefiles for SPL)
669 $(obj)include/tpl-autoconf.mk: $(obj)include/config.h 682 $(obj)include/tpl-autoconf.mk: $(obj)include/config.h
670 @$(XECHO) Generating $@ ; \ 683 @$(XECHO) Generating $@ ; \
671 set -e ; \ 684 set -e ; \
672 : Extract the config macros ; \ 685 : Extract the config macros ; \
673 $(CPP) $(CFLAGS) -DCONFIG_TPL_BUILD -DCONFIG_SPL_BUILD\ 686 $(CPP) $(CFLAGS) -DCONFIG_TPL_BUILD -DCONFIG_SPL_BUILD\
674 -DDO_DEPS_ONLY -dM include/common.h | \ 687 -DDO_DEPS_ONLY -dM include/common.h | \
675 sed -n -f tools/scripts/define2mk.sed > $@.tmp && \ 688 sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
676 mv $@.tmp $@ 689 mv $@.tmp $@
677 690
678 $(obj)include/spl-autoconf.mk: $(obj)include/config.h 691 $(obj)include/spl-autoconf.mk: $(obj)include/config.h
679 @$(XECHO) Generating $@ ; \ 692 @$(XECHO) Generating $@ ; \
680 set -e ; \ 693 set -e ; \
681 : Extract the config macros ; \ 694 : Extract the config macros ; \
682 $(CPP) $(CFLAGS) -DCONFIG_SPL_BUILD -DDO_DEPS_ONLY -dM include/common.h | \ 695 $(CPP) $(CFLAGS) -DCONFIG_SPL_BUILD -DDO_DEPS_ONLY -dM include/common.h | \
683 sed -n -f tools/scripts/define2mk.sed > $@.tmp && \ 696 sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
684 mv $@.tmp $@ 697 mv $@.tmp $@
685 698
686 $(obj)include/generated/generic-asm-offsets.h: $(obj)include/autoconf.mk.dep \ 699 $(obj)include/generated/generic-asm-offsets.h: $(obj)include/autoconf.mk.dep \
687 $(obj)include/spl-autoconf.mk \ 700 $(obj)include/spl-autoconf.mk \
688 $(obj)include/tpl-autoconf.mk \ 701 $(obj)include/tpl-autoconf.mk \
689 $(obj)lib/asm-offsets.s 702 $(obj)lib/asm-offsets.s
690 @$(XECHO) Generating $@ 703 @$(XECHO) Generating $@
691 tools/scripts/make-asm-offsets $(obj)lib/asm-offsets.s $@ 704 tools/scripts/make-asm-offsets $(obj)lib/asm-offsets.s $@
692 705
693 $(obj)lib/asm-offsets.s: $(obj)include/autoconf.mk.dep \ 706 $(obj)lib/asm-offsets.s: $(obj)include/autoconf.mk.dep \
694 $(obj)include/spl-autoconf.mk \ 707 $(obj)include/spl-autoconf.mk \
695 $(obj)include/tpl-autoconf.mk \ 708 $(obj)include/tpl-autoconf.mk \
696 $(src)lib/asm-offsets.c 709 $(src)lib/asm-offsets.c
697 @mkdir -p $(obj)lib 710 @mkdir -p $(obj)lib
698 $(CC) -DDO_DEPS_ONLY \ 711 $(CC) -DDO_DEPS_ONLY \
699 $(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) \ 712 $(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) \
700 -o $@ $(src)lib/asm-offsets.c -c -S 713 -o $@ $(src)lib/asm-offsets.c -c -S
701 714
702 $(obj)include/generated/asm-offsets.h: $(obj)include/autoconf.mk.dep \ 715 $(obj)include/generated/asm-offsets.h: $(obj)include/autoconf.mk.dep \
703 $(obj)include/spl-autoconf.mk \ 716 $(obj)include/spl-autoconf.mk \
704 $(obj)include/tpl-autoconf.mk \ 717 $(obj)include/tpl-autoconf.mk \
705 $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s 718 $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s
706 @$(XECHO) Generating $@ 719 @$(XECHO) Generating $@
707 tools/scripts/make-asm-offsets $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s $@ 720 tools/scripts/make-asm-offsets $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s $@
708 721
709 $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s: $(obj)include/autoconf.mk.dep \ 722 $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s: $(obj)include/autoconf.mk.dep \
710 $(obj)include/spl-autoconf.mk \ 723 $(obj)include/spl-autoconf.mk \
711 $(obj)include/tpl-autoconf.mk 724 $(obj)include/tpl-autoconf.mk
712 @mkdir -p $(obj)$(CPUDIR)/$(SOC) 725 @mkdir -p $(obj)$(CPUDIR)/$(SOC)
713 if [ -f $(src)$(CPUDIR)/$(SOC)/asm-offsets.c ];then \ 726 if [ -f $(src)$(CPUDIR)/$(SOC)/asm-offsets.c ];then \
714 $(CC) -DDO_DEPS_ONLY \ 727 $(CC) -DDO_DEPS_ONLY \
715 $(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) \ 728 $(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) \
716 -o $@ $(src)$(CPUDIR)/$(SOC)/asm-offsets.c -c -S; \ 729 -o $@ $(src)$(CPUDIR)/$(SOC)/asm-offsets.c -c -S; \
717 else \ 730 else \
718 touch $@; \ 731 touch $@; \
719 fi 732 fi
720 733
721 ######################################################################### 734 #########################################################################
722 else # !config.mk 735 else # !config.mk
723 all $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin \ 736 all $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin \
724 $(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot \ 737 $(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot \
725 $(filter-out tools,$(SUBDIRS)) \ 738 $(filter-out tools,$(SUBDIRS)) \
726 depend dep tags ctags etags cscope $(obj)System.map: 739 depend dep tags ctags etags cscope $(obj)System.map:
727 @echo "System not configured - see README" >&2 740 @echo "System not configured - see README" >&2
728 @ exit 1 741 @ exit 1
729 742
730 tools: $(VERSION_FILE) $(TIMESTAMP_FILE) 743 tools: $(VERSION_FILE) $(TIMESTAMP_FILE)
731 $(MAKE) -C $@ all 744 $(MAKE) -C $@ all
732 endif # config.mk 745 endif # config.mk
733 746
734 # ARM relocations should all be R_ARM_RELATIVE. 747 # ARM relocations should all be R_ARM_RELATIVE.
735 checkarmreloc: $(obj)u-boot 748 checkarmreloc: $(obj)u-boot
736 @if test "R_ARM_RELATIVE" != \ 749 @if test "R_ARM_RELATIVE" != \
737 "`$(CROSS_COMPILE)readelf -r $< | cut -d ' ' -f 4 | grep R_ARM | sort -u`"; \ 750 "`$(CROSS_COMPILE)readelf -r $< | cut -d ' ' -f 4 | grep R_ARM | sort -u`"; \
738 then echo "$< contains relocations other than \ 751 then echo "$< contains relocations other than \
739 R_ARM_RELATIVE"; false; fi 752 R_ARM_RELATIVE"; false; fi
740 753
741 $(VERSION_FILE): 754 $(VERSION_FILE):
742 @mkdir -p $(dir $(VERSION_FILE)) 755 @mkdir -p $(dir $(VERSION_FILE))
743 @( localvers='$(shell $(TOPDIR)/tools/setlocalversion $(TOPDIR))' ; \ 756 @( localvers='$(shell $(TOPDIR)/tools/setlocalversion $(TOPDIR))' ; \
744 printf '#define PLAIN_VERSION "%s%s"\n' \ 757 printf '#define PLAIN_VERSION "%s%s"\n' \
745 "$(U_BOOT_VERSION)" "$${localvers}" ; \ 758 "$(U_BOOT_VERSION)" "$${localvers}" ; \
746 printf '#define U_BOOT_VERSION "U-Boot %s%s"\n' \ 759 printf '#define U_BOOT_VERSION "U-Boot %s%s"\n' \
747 "$(U_BOOT_VERSION)" "$${localvers}" ; \ 760 "$(U_BOOT_VERSION)" "$${localvers}" ; \
748 ) > $@.tmp 761 ) > $@.tmp
749 @( printf '#define CC_VERSION_STRING "%s"\n' \ 762 @( printf '#define CC_VERSION_STRING "%s"\n' \
750 '$(shell $(CC) --version | head -n 1)' )>> $@.tmp 763 '$(shell $(CC) --version | head -n 1)' )>> $@.tmp
751 @( printf '#define LD_VERSION_STRING "%s"\n' \ 764 @( printf '#define LD_VERSION_STRING "%s"\n' \
752 '$(shell $(LD) -v | head -n 1)' )>> $@.tmp 765 '$(shell $(LD) -v | head -n 1)' )>> $@.tmp
753 @cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@ 766 @cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@
754 767
755 $(TIMESTAMP_FILE): 768 $(TIMESTAMP_FILE):
756 @mkdir -p $(dir $(TIMESTAMP_FILE)) 769 @mkdir -p $(dir $(TIMESTAMP_FILE))
757 @LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"' > $@.tmp 770 @LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"' > $@.tmp
758 @LC_ALL=C date +'#define U_BOOT_TIME "%T"' >> $@.tmp 771 @LC_ALL=C date +'#define U_BOOT_TIME "%T"' >> $@.tmp
759 @cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@ 772 @cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@
760 773
761 easylogo env gdb: 774 easylogo env gdb:
762 $(MAKE) -C tools/$@ all MTD_VERSION=${MTD_VERSION} 775 $(MAKE) -C tools/$@ all MTD_VERSION=${MTD_VERSION}
763 gdbtools: gdb 776 gdbtools: gdb
764 777
765 xmldocs pdfdocs psdocs htmldocs mandocs: tools/kernel-doc/docproc 778 xmldocs pdfdocs psdocs htmldocs mandocs: tools/kernel-doc/docproc
766 $(MAKE) U_BOOT_VERSION=$(U_BOOT_VERSION) -C doc/DocBook/ $@ 779 $(MAKE) U_BOOT_VERSION=$(U_BOOT_VERSION) -C doc/DocBook/ $@
767 780
768 tools-all: easylogo env gdb $(VERSION_FILE) $(TIMESTAMP_FILE) 781 tools-all: easylogo env gdb $(VERSION_FILE) $(TIMESTAMP_FILE)
769 $(MAKE) -C tools HOST_TOOLS_ALL=y 782 $(MAKE) -C tools HOST_TOOLS_ALL=y
770 783
771 .PHONY : CHANGELOG 784 .PHONY : CHANGELOG
772 CHANGELOG: 785 CHANGELOG:
773 git log --no-merges U-Boot-1_1_5.. | \ 786 git log --no-merges U-Boot-1_1_5.. | \
774 unexpand -a | sed -e 's/\s\s*$$//' > $@ 787 unexpand -a | sed -e 's/\s\s*$$//' > $@
775 788
776 include/license.h: tools/bin2header COPYING 789 include/license.h: tools/bin2header COPYING
777 cat COPYING | gzip -9 -c | ./tools/bin2header license_gzip > include/license.h 790 cat COPYING | gzip -9 -c | ./tools/bin2header license_gzip > include/license.h
778 ######################################################################### 791 #########################################################################
779 792
780 unconfig: 793 unconfig:
781 @rm -f $(obj)include/config.h $(obj)include/config.mk \ 794 @rm -f $(obj)include/config.h $(obj)include/config.mk \
782 $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \ 795 $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \
783 $(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep \ 796 $(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep \
784 $(obj)include/spl-autoconf.mk \ 797 $(obj)include/spl-autoconf.mk \
785 $(obj)include/tpl-autoconf.mk 798 $(obj)include/tpl-autoconf.mk
786 799
787 %_config:: unconfig 800 %_config:: unconfig
788 @$(MKCONFIG) -A $(@:_config=) 801 @$(MKCONFIG) -A $(@:_config=)
789 802
790 sinclude $(obj).boards.depend 803 sinclude $(obj).boards.depend
791 $(obj).boards.depend: boards.cfg 804 $(obj).boards.depend: boards.cfg
792 @awk '(NF && $$1 !~ /^#/) { print $$7 ": " $$7 "_config; $$(MAKE)" }' $< > $@ 805 @awk '(NF && $$1 !~ /^#/) { print $$7 ": " $$7 "_config; $$(MAKE)" }' $< > $@
793 806
794 ######################################################################### 807 #########################################################################
795 ######################################################################### 808 #########################################################################
796 809
797 clean: 810 clean:
798 @rm -f $(obj)examples/standalone/82559_eeprom \ 811 @rm -f $(obj)examples/standalone/82559_eeprom \
799 $(obj)examples/standalone/atmel_df_pow2 \ 812 $(obj)examples/standalone/atmel_df_pow2 \
800 $(obj)examples/standalone/eepro100_eeprom \ 813 $(obj)examples/standalone/eepro100_eeprom \
801 $(obj)examples/standalone/hello_world \ 814 $(obj)examples/standalone/hello_world \
802 $(obj)examples/standalone/interrupt \ 815 $(obj)examples/standalone/interrupt \
803 $(obj)examples/standalone/mem_to_mem_idma2intr \ 816 $(obj)examples/standalone/mem_to_mem_idma2intr \
804 $(obj)examples/standalone/sched \ 817 $(obj)examples/standalone/sched \
805 $(obj)examples/standalone/smc911{11,x}_eeprom \ 818 $(obj)examples/standalone/smc911{11,x}_eeprom \
806 $(obj)examples/standalone/test_burst \ 819 $(obj)examples/standalone/test_burst \
807 $(obj)examples/standalone/timer 820 $(obj)examples/standalone/timer
808 @rm -f $(obj)examples/api/demo{,.bin} 821 @rm -f $(obj)examples/api/demo{,.bin}
809 @rm -f $(obj)tools/bmp_logo $(obj)tools/easylogo/easylogo \ 822 @rm -f $(obj)tools/bmp_logo $(obj)tools/easylogo/easylogo \
810 $(obj)tools/env/{fw_printenv,fw_setenv} \ 823 $(obj)tools/env/{fw_printenv,fw_setenv} \
811 $(obj)tools/envcrc \ 824 $(obj)tools/envcrc \
812 $(obj)tools/gdb/{astest,gdbcont,gdbsend} \ 825 $(obj)tools/gdb/{astest,gdbcont,gdbsend} \
813 $(obj)tools/gen_eth_addr $(obj)tools/img2srec \ 826 $(obj)tools/gen_eth_addr $(obj)tools/img2srec \
814 $(obj)tools/mk{env,}image $(obj)tools/mpc86x_clk \ 827 $(obj)tools/mk{env,}image $(obj)tools/mpc86x_clk \
815 $(obj)tools/mk{$(BOARD),}spl \ 828 $(obj)tools/mk{$(BOARD),}spl \
816 $(obj)tools/mxsboot \ 829 $(obj)tools/mxsboot \
817 $(obj)tools/ncb $(obj)tools/ubsha1 \ 830 $(obj)tools/ncb $(obj)tools/ubsha1 \
818 $(obj)tools/kernel-doc/docproc \ 831 $(obj)tools/kernel-doc/docproc \
819 $(obj)tools/proftool 832 $(obj)tools/proftool
820 @rm -f $(obj)board/cray/L1/{bootscript.c,bootscript.image} \ 833 @rm -f $(obj)board/cray/L1/{bootscript.c,bootscript.image} \
821 $(obj)board/matrix_vision/*/bootscript.img \ 834 $(obj)board/matrix_vision/*/bootscript.img \
822 $(obj)board/voiceblue/eeprom \ 835 $(obj)board/voiceblue/eeprom \
823 $(obj)u-boot.lds \ 836 $(obj)u-boot.lds \
824 $(obj)arch/blackfin/cpu/init.{lds,elf} 837 $(obj)arch/blackfin/cpu/init.{lds,elf}
825 @rm -f $(obj)include/bmp_logo.h 838 @rm -f $(obj)include/bmp_logo.h
826 @rm -f $(obj)include/bmp_logo_data.h 839 @rm -f $(obj)include/bmp_logo_data.h
827 @rm -f $(obj)lib/asm-offsets.s 840 @rm -f $(obj)lib/asm-offsets.s
828 @rm -f $(obj)include/generated/asm-offsets.h 841 @rm -f $(obj)include/generated/asm-offsets.h
829 @rm -f $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s 842 @rm -f $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s
830 @rm -f $(TIMESTAMP_FILE) $(VERSION_FILE) 843 @rm -f $(TIMESTAMP_FILE) $(VERSION_FILE)
831 @$(MAKE) -s -C doc/DocBook/ cleandocs 844 @$(MAKE) -s -C doc/DocBook/ cleandocs
832 @find $(OBJTREE) -type f \ 845 @find $(OBJTREE) -type f \
833 \( -name 'core' -o -name '*.bak' -o -name '*~' -o -name '*.su' \ 846 \( -name 'core' -o -name '*.bak' -o -name '*~' -o -name '*.su' \
834 -o -name '*.o' -o -name '*.a' -o -name '*.exe' \ 847 -o -name '*.o' -o -name '*.a' -o -name '*.exe' \
835 -o -name '*.cfgtmp' \) -print \ 848 -o -name '*.cfgtmp' \) -print \
836 | xargs rm -f 849 | xargs rm -f
837 850
838 # Removes everything not needed for testing u-boot 851 # Removes everything not needed for testing u-boot
839 tidy: clean 852 tidy: clean
840 @find $(OBJTREE) -type f \( -name '*.depend*' \) -print | xargs rm -f 853 @find $(OBJTREE) -type f \( -name '*.depend*' \) -print | xargs rm -f
841 854
842 clobber: tidy 855 clobber: tidy
843 @find $(OBJTREE) -type f \( -name '*.srec' \ 856 @find $(OBJTREE) -type f \( -name '*.srec' \
844 -o -name '*.bin' -o -name u-boot.img \) \ 857 -o -name '*.bin' -o -name u-boot.img \) \
845 -print0 | xargs -0 rm -f 858 -print0 | xargs -0 rm -f
846 @rm -f $(OBJS) $(obj)*.bak $(obj)ctags $(obj)etags $(obj)TAGS \ 859 @rm -f $(OBJS) $(obj)*.bak $(obj)ctags $(obj)etags $(obj)TAGS \
847 $(obj)cscope.* $(obj)*.*~ 860 $(obj)cscope.* $(obj)*.*~
848 @rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL-y) 861 @rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL-y)
849 @rm -f $(obj)u-boot.kwb 862 @rm -f $(obj)u-boot.kwb
850 @rm -f $(obj)u-boot.pbl 863 @rm -f $(obj)u-boot.pbl
851 @rm -f $(obj)u-boot.imx 864 @rm -f $(obj)u-boot.imx
852 @rm -f $(obj)u-boot-with-spl.imx 865 @rm -f $(obj)u-boot-with-spl.imx
853 @rm -f $(obj)u-boot-with-nand-spl.imx 866 @rm -f $(obj)u-boot-with-nand-spl.imx
854 @rm -f $(obj)u-boot.ubl 867 @rm -f $(obj)u-boot.ubl
855 @rm -f $(obj)u-boot.ais 868 @rm -f $(obj)u-boot.ais
856 @rm -f $(obj)u-boot.dtb 869 @rm -f $(obj)u-boot.dtb
857 @rm -f $(obj)u-boot.sb 870 @rm -f $(obj)u-boot.sb
858 @rm -f $(obj)u-boot.bd 871 @rm -f $(obj)u-boot.bd
859 @rm -f $(obj)u-boot.spr 872 @rm -f $(obj)u-boot.spr
860 @rm -f $(obj)nand_spl/{u-boot.{lds,lst},System.map} 873 @rm -f $(obj)nand_spl/{u-boot.{lds,lst},System.map}
861 @rm -f $(obj)nand_spl/{u-boot-nand_spl.lds,u-boot-spl,u-boot-spl.map} 874 @rm -f $(obj)nand_spl/{u-boot-nand_spl.lds,u-boot-spl,u-boot-spl.map}
862 @rm -f $(obj)spl/{u-boot-spl,u-boot-spl.bin,u-boot-spl.map} 875 @rm -f $(obj)spl/{u-boot-spl,u-boot-spl.bin,u-boot-spl.map}
863 @rm -f $(obj)spl/u-boot-spl.lds 876 @rm -f $(obj)spl/u-boot-spl.lds
864 @rm -f $(obj)tpl/{u-boot-tpl,u-boot-tpl.bin,u-boot-tpl.map} 877 @rm -f $(obj)tpl/{u-boot-tpl,u-boot-tpl.bin,u-boot-tpl.map}
865 @rm -f $(obj)tpl/u-boot-spl.lds 878 @rm -f $(obj)tpl/u-boot-spl.lds
866 @rm -f $(obj)MLO MLO.byteswap 879 @rm -f $(obj)MLO MLO.byteswap
867 @rm -f $(obj)SPL 880 @rm -f $(obj)SPL
868 @rm -f $(obj)tools/xway-swap-bytes 881 @rm -f $(obj)tools/xway-swap-bytes
869 @rm -fr $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm 882 @rm -fr $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm
870 @rm -fr $(obj)include/generated 883 @rm -fr $(obj)include/generated
871 @[ ! -d $(obj)nand_spl ] || find $(obj)nand_spl -name "*" -type l -print | xargs rm -f 884 @[ ! -d $(obj)nand_spl ] || find $(obj)nand_spl -name "*" -type l -print | xargs rm -f
872 @rm -f $(obj)dts/*.tmp 885 @rm -f $(obj)dts/*.tmp
873 @rm -f $(obj)spl/u-boot-spl{,-pad}.ais 886 @rm -f $(obj)spl/u-boot-spl{,-pad}.ais
874 887
875 mrproper \ 888 mrproper \
876 distclean: clobber unconfig 889 distclean: clobber unconfig
877 ifneq ($(OBJTREE),$(SRCTREE)) 890 ifneq ($(OBJTREE),$(SRCTREE))
878 rm -rf $(obj)* 891 rm -rf $(obj)*
879 endif 892 endif
880 893
881 backup: 894 backup:
882 F=`basename $(TOPDIR)` ; cd .. ; \ 895 F=`basename $(TOPDIR)` ; cd .. ; \
883 gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F 896 gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
884 897
885 ######################################################################### 898 #########################################################################
886 899