xref: /openbmc/u-boot/Makefile (revision 3c99166441bf3ea325af2da83cfe65430b49c066)
1 da58dec8STom Rini# SPDX-License-Identifier: GPL-2.0+
2 da58dec8STom Rini
3 d452f27bSTom RiniVERSION = 2019
4 97276a91STom RiniPATCHLEVEL = 04
5 211e4754SWolfgang DenkSUBLEVEL =
6 *3c991664STom RiniEXTRAVERSION =
7 5f30f3beSMasahiro YamadaNAME =
8 ae6d1056SWolfgang Denk
9 6825a95bSMasahiro Yamada# *DOCUMENTATION*
10 6825a95bSMasahiro Yamada# To see a list of typical targets execute "make help"
11 6825a95bSMasahiro Yamada# More info can be located in ./README
12 6825a95bSMasahiro Yamada# Comments in this file are targeted only to the developer, do not
13 6825a95bSMasahiro Yamada# expect to learn how to build the kernel reading this file.
14 6825a95bSMasahiro Yamada
15 4d713be1SMasahiro Yamada# o Do not use make's built-in rules and variables
16 6825a95bSMasahiro Yamada#   (this increases performance and avoids hard-to-debug behaviour);
17 4d713be1SMasahiro Yamada# o Look for make include files relative to root of kernel src
18 4d713be1SMasahiro YamadaMAKEFLAGS += -rR --include-dir=$(CURDIR)
19 6825a95bSMasahiro Yamada
20 6825a95bSMasahiro Yamada# Avoid funny character set dependencies
21 6825a95bSMasahiro Yamadaunexport LC_ALL
22 6825a95bSMasahiro YamadaLC_COLLATE=C
23 6825a95bSMasahiro YamadaLC_NUMERIC=C
24 6825a95bSMasahiro Yamadaexport LC_COLLATE LC_NUMERIC
25 6825a95bSMasahiro Yamada
26 ffe29ebcSMasahiro Yamada# Avoid interference with shell env settings
27 ffe29ebcSMasahiro Yamadaunexport GREP_OPTIONS
28 ffe29ebcSMasahiro Yamada
29 6825a95bSMasahiro Yamada# We are using a recursive build, so we need to do a little thinking
30 6825a95bSMasahiro Yamada# to get the ordering right.
31 6825a95bSMasahiro Yamada#
32 6825a95bSMasahiro Yamada# Most importantly: sub-Makefiles should only ever modify files in
33 6825a95bSMasahiro Yamada# their own directory. If in some directory we have a dependency on
34 6825a95bSMasahiro Yamada# a file in another dir (which doesn't happen often, but it's often
35 6825a95bSMasahiro Yamada# unavoidable when linking the built-in.o targets which finally
36 6825a95bSMasahiro Yamada# turn into vmlinux), we will call a sub make in that other dir, and
37 6825a95bSMasahiro Yamada# after that we are sure that everything which is in that other dir
38 6825a95bSMasahiro Yamada# is now up to date.
39 6825a95bSMasahiro Yamada#
40 6825a95bSMasahiro Yamada# The only cases where we need to modify files which have global
41 6825a95bSMasahiro Yamada# effects are thus separated out and done before the recursive
42 6825a95bSMasahiro Yamada# descending is started. They are now explicitly listed as the
43 6825a95bSMasahiro Yamada# prepare rule.
44 6825a95bSMasahiro Yamada
45 ffe29ebcSMasahiro Yamada# Beautify output
46 ffe29ebcSMasahiro Yamada# ---------------------------------------------------------------------------
47 ffe29ebcSMasahiro Yamada#
48 ffe29ebcSMasahiro Yamada# Normally, we echo the whole command before executing it. By making
49 ffe29ebcSMasahiro Yamada# that echo $($(quiet)$(cmd)), we now have the possibility to set
50 ffe29ebcSMasahiro Yamada# $(quiet) to choose other forms of output instead, e.g.
51 ffe29ebcSMasahiro Yamada#
52 ffe29ebcSMasahiro Yamada#         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
53 ffe29ebcSMasahiro Yamada#         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
54 ffe29ebcSMasahiro Yamada#
55 ffe29ebcSMasahiro Yamada# If $(quiet) is empty, the whole command will be printed.
56 ffe29ebcSMasahiro Yamada# If it is set to "quiet_", only the short version will be printed.
57 ffe29ebcSMasahiro Yamada# If it is set to "silent_", nothing will be printed at all, since
58 ffe29ebcSMasahiro Yamada# the variable $(silent_cmd_cc_o_c) doesn't exist.
59 ffe29ebcSMasahiro Yamada#
60 ffe29ebcSMasahiro Yamada# A simple variant is to prefix commands with $(Q) - that's useful
61 ffe29ebcSMasahiro Yamada# for commands that shall be hidden in non-verbose mode.
62 ffe29ebcSMasahiro Yamada#
63 ffe29ebcSMasahiro Yamada#	$(Q)ln $@ :<
64 ffe29ebcSMasahiro Yamada#
65 ffe29ebcSMasahiro Yamada# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
66 ffe29ebcSMasahiro Yamada# If KBUILD_VERBOSE equals 1 then the above command is displayed.
67 ffe29ebcSMasahiro Yamada#
68 6825a95bSMasahiro Yamada# To put more focus on warnings, be less verbose as default
69 6825a95bSMasahiro Yamada# Use 'make V=1' to see the full commands
70 6825a95bSMasahiro Yamada
71 6825a95bSMasahiro Yamadaifeq ("$(origin V)", "command line")
72 6825a95bSMasahiro Yamada  KBUILD_VERBOSE = $(V)
73 7ebf7443Swdenkendif
74 6825a95bSMasahiro Yamadaifndef KBUILD_VERBOSE
75 6825a95bSMasahiro Yamada  KBUILD_VERBOSE = 0
76 6825a95bSMasahiro Yamadaendif
77 6825a95bSMasahiro Yamada
78 ffe29ebcSMasahiro Yamadaifeq ($(KBUILD_VERBOSE),1)
79 ffe29ebcSMasahiro Yamada  quiet =
80 ffe29ebcSMasahiro Yamada  Q =
81 ffe29ebcSMasahiro Yamadaelse
82 ffe29ebcSMasahiro Yamada  quiet=quiet_
83 ffe29ebcSMasahiro Yamada  Q = @
84 6825a95bSMasahiro Yamadaendif
85 6825a95bSMasahiro Yamada
86 ffe29ebcSMasahiro Yamada# If the user is running make -s (silent mode), suppress echoing of
87 ffe29ebcSMasahiro Yamada# commands
88 ffe29ebcSMasahiro Yamada
89 ffe29ebcSMasahiro Yamadaifneq ($(filter 4.%,$(MAKE_VERSION)),)	# make-4
90 ffe29ebcSMasahiro Yamadaifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
91 ffe29ebcSMasahiro Yamada  quiet=silent_
92 ffe29ebcSMasahiro Yamadaendif
93 ffe29ebcSMasahiro Yamadaelse					# make-3.8x
94 ffe29ebcSMasahiro Yamadaifneq ($(filter s% -s%,$(MAKEFLAGS)),)
95 ffe29ebcSMasahiro Yamada  quiet=silent_
96 ffe29ebcSMasahiro Yamadaendif
97 6825a95bSMasahiro Yamadaendif
98 6825a95bSMasahiro Yamada
99 ffe29ebcSMasahiro Yamadaexport quiet Q KBUILD_VERBOSE
100 6825a95bSMasahiro Yamada
101 9e414032SMasahiro Yamada# kbuild supports saving output files in a separate directory.
102 9e414032SMasahiro Yamada# To locate output files in a separate directory two syntaxes are supported.
103 9e414032SMasahiro Yamada# In both cases the working directory must be the root of the kernel src.
104 9e414032SMasahiro Yamada# 1) O=
105 9e414032SMasahiro Yamada# Use "make O=dir/to/store/output/files/"
106 f9328639SMarian Balakowicz#
107 9e414032SMasahiro Yamada# 2) Set KBUILD_OUTPUT
108 9e414032SMasahiro Yamada# Set the environment variable KBUILD_OUTPUT to point to the directory
109 9e414032SMasahiro Yamada# where the output files shall be placed.
110 9e414032SMasahiro Yamada# export KBUILD_OUTPUT=dir/to/store/output/files/
111 9e414032SMasahiro Yamada# make
112 f9328639SMarian Balakowicz#
113 9e414032SMasahiro Yamada# The O= assignment takes precedence over the KBUILD_OUTPUT environment
114 9e414032SMasahiro Yamada# variable.
115 7ebf7443Swdenk
116 9e414032SMasahiro Yamada# KBUILD_SRC is set on invocation of make in OBJ directory
117 9e414032SMasahiro Yamada# KBUILD_SRC is not intended to be used by the regular user (for now)
118 9e414032SMasahiro Yamadaifeq ($(KBUILD_SRC),)
119 9e414032SMasahiro Yamada
120 9e414032SMasahiro Yamada# OK, Make called in directory where kernel src resides
121 9e414032SMasahiro Yamada# Do we want to locate output files in a separate directory?
122 f9328639SMarian Balakowiczifeq ("$(origin O)", "command line")
123 9e414032SMasahiro Yamada  KBUILD_OUTPUT := $(O)
124 f9328639SMarian Balakowiczendif
125 7ebf7443Swdenk
126 9e414032SMasahiro Yamada# That's our default target when none is given on the command line
127 9e414032SMasahiro YamadaPHONY := _all
128 9e414032SMasahiro Yamada_all:
129 9e414032SMasahiro Yamada
130 9e414032SMasahiro Yamada# Cancel implicit rules on top Makefile
131 9e414032SMasahiro Yamada$(CURDIR)/Makefile Makefile: ;
132 9e414032SMasahiro Yamada
133 9e414032SMasahiro Yamadaifneq ($(KBUILD_OUTPUT),)
134 9e414032SMasahiro Yamada# Invoke a second make in the output directory, passing relevant variables
135 9e414032SMasahiro Yamada# check that the output directory actually exists
136 9e414032SMasahiro Yamadasaved-output := $(KBUILD_OUTPUT)
137 5a449d75SMasahiro YamadaKBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \
138 5a449d75SMasahiro Yamada								&& /bin/pwd)
139 9e414032SMasahiro Yamada$(if $(KBUILD_OUTPUT),, \
140 598e2d33SMasahiro Yamada     $(error failed to create output directory "$(saved-output)"))
141 9e414032SMasahiro Yamada
142 9e414032SMasahiro YamadaPHONY += $(MAKECMDGOALS) sub-make
143 9e414032SMasahiro Yamada
144 9e414032SMasahiro Yamada$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
145 9e414032SMasahiro Yamada	@:
146 9e414032SMasahiro Yamada
147 9e414032SMasahiro Yamadasub-make: FORCE
148 ffe29ebcSMasahiro Yamada	$(Q)$(MAKE) -C $(KBUILD_OUTPUT) KBUILD_SRC=$(CURDIR) \
149 ffe29ebcSMasahiro Yamada	-f $(CURDIR)/Makefile $(filter-out _all sub-make,$(MAKECMDGOALS))
150 9e414032SMasahiro Yamada
151 9e414032SMasahiro Yamada# Leave processing to above invocation of make
152 9e414032SMasahiro Yamadaskip-makefile := 1
153 9e414032SMasahiro Yamadaendif # ifneq ($(KBUILD_OUTPUT),)
154 9e414032SMasahiro Yamadaendif # ifeq ($(KBUILD_SRC),)
155 9e414032SMasahiro Yamada
156 9e414032SMasahiro Yamada# We process the rest of the Makefile if this is the final invocation of make
157 9e414032SMasahiro Yamadaifeq ($(skip-makefile),)
158 9e414032SMasahiro Yamada
159 ffe29ebcSMasahiro Yamada# Do not print "Entering directory ...",
160 ffe29ebcSMasahiro Yamada# but we want to display it when entering to the output directory
161 ffe29ebcSMasahiro Yamada# so that IDEs/editors are able to understand relative filenames.
162 ffe29ebcSMasahiro YamadaMAKEFLAGS += --no-print-directory
163 ffe29ebcSMasahiro Yamada
164 ffe29ebcSMasahiro Yamada# Call a source code checker (by default, "sparse") as part of the
165 ffe29ebcSMasahiro Yamada# C compilation.
166 ffe29ebcSMasahiro Yamada#
167 ffe29ebcSMasahiro Yamada# Use 'make C=1' to enable checking of only re-compiled files.
168 ffe29ebcSMasahiro Yamada# Use 'make C=2' to enable checking of *all* source files, regardless
169 ffe29ebcSMasahiro Yamada# of whether they are re-compiled or not.
170 ffe29ebcSMasahiro Yamada#
171 ffe29ebcSMasahiro Yamada# See the file "Documentation/sparse.txt" for more details, including
172 ffe29ebcSMasahiro Yamada# where to get the "sparse" utility.
173 ffe29ebcSMasahiro Yamada
174 ffe29ebcSMasahiro Yamadaifeq ("$(origin C)", "command line")
175 ffe29ebcSMasahiro Yamada  KBUILD_CHECKSRC = $(C)
176 ffe29ebcSMasahiro Yamadaendif
177 ffe29ebcSMasahiro Yamadaifndef KBUILD_CHECKSRC
178 ffe29ebcSMasahiro Yamada  KBUILD_CHECKSRC = 0
179 ffe29ebcSMasahiro Yamadaendif
180 ffe29ebcSMasahiro Yamada
181 ffe29ebcSMasahiro Yamada# Use make M=dir to specify directory of external module to build
182 ffe29ebcSMasahiro Yamada# Old syntax make ... SUBDIRS=$PWD is still supported
183 ffe29ebcSMasahiro Yamada# Setting the environment variable KBUILD_EXTMOD take precedence
184 ffe29ebcSMasahiro Yamadaifdef SUBDIRS
185 ffe29ebcSMasahiro Yamada  KBUILD_EXTMOD ?= $(SUBDIRS)
186 ffe29ebcSMasahiro Yamadaendif
187 ffe29ebcSMasahiro Yamada
188 ffe29ebcSMasahiro Yamadaifeq ("$(origin M)", "command line")
189 ffe29ebcSMasahiro Yamada  KBUILD_EXTMOD := $(M)
190 ffe29ebcSMasahiro Yamadaendif
191 ffe29ebcSMasahiro Yamada
192 6825a95bSMasahiro Yamada# If building an external module we do not care about the all: rule
193 6825a95bSMasahiro Yamada# but instead _all depend on modules
194 9e414032SMasahiro YamadaPHONY += all
195 6825a95bSMasahiro Yamadaifeq ($(KBUILD_EXTMOD),)
196 9e414032SMasahiro Yamada_all: all
197 6825a95bSMasahiro Yamadaelse
198 6825a95bSMasahiro Yamada_all: modules
199 6825a95bSMasahiro Yamadaendif
200 9e414032SMasahiro Yamada
201 ffe29ebcSMasahiro Yamadaifeq ($(KBUILD_SRC),)
202 ffe29ebcSMasahiro Yamada        # building in the source tree
203 ffe29ebcSMasahiro Yamada        srctree := .
204 ffe29ebcSMasahiro Yamadaelse
205 ffe29ebcSMasahiro Yamada        ifeq ($(KBUILD_SRC)/,$(dir $(CURDIR)))
206 ffe29ebcSMasahiro Yamada                # building in a subdirectory of the source tree
207 ffe29ebcSMasahiro Yamada                srctree := ..
208 ffe29ebcSMasahiro Yamada        else
209 ffe29ebcSMasahiro Yamada                srctree := $(KBUILD_SRC)
210 ffe29ebcSMasahiro Yamada        endif
211 ffe29ebcSMasahiro Yamadaendif
212 ffe29ebcSMasahiro Yamadaobjtree		:= .
213 9e414032SMasahiro Yamadasrc		:= $(srctree)
214 9e414032SMasahiro Yamadaobj		:= $(objtree)
215 9e414032SMasahiro Yamada
216 9e414032SMasahiro YamadaVPATH		:= $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
217 9e414032SMasahiro Yamada
218 9e414032SMasahiro Yamadaexport srctree objtree VPATH
219 9e414032SMasahiro Yamada
220 5013c09fSWolfgang Denk# Make sure CDPATH settings don't interfere
221 5013c09fSWolfgang Denkunexport CDPATH
222 5013c09fSWolfgang Denk
223 f9328639SMarian Balakowicz#########################################################################
224 f9328639SMarian Balakowicz
225 7ebf7443SwdenkHOSTARCH := $(shell uname -m | \
226 7ebf7443Swdenk	sed -e s/i.86/x86/ \
227 7ebf7443Swdenk	    -e s/sun4u/sparc64/ \
228 7ebf7443Swdenk	    -e s/arm.*/arm/ \
229 7ebf7443Swdenk	    -e s/sa110/arm/ \
230 7ebf7443Swdenk	    -e s/ppc64/powerpc/ \
231 7ebf7443Swdenk	    -e s/ppc/powerpc/ \
232 7ebf7443Swdenk	    -e s/macppc/powerpc/\
233 7ebf7443Swdenk	    -e s/sh.*/sh/)
234 7ebf7443Swdenk
235 7ebf7443SwdenkHOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
236 7ebf7443Swdenk	    sed -e 's/\(cygwin\).*/cygwin/')
237 7ebf7443Swdenk
238 7ebf7443Swdenkexport	HOSTARCH HOSTOS
239 7ebf7443Swdenk
240 7ebf7443Swdenk#########################################################################
241 f9328639SMarian Balakowicz
242 1ea6bcd8SMike Frysinger# set default to nothing for native builds
243 a5284efdSWolfgang Denkifeq ($(HOSTARCH),$(ARCH))
244 1ea6bcd8SMike FrysingerCROSS_COMPILE ?=
245 7ebf7443Swdenkendif
246 7ebf7443Swdenk
247 51148790SMasahiro YamadaKCONFIG_CONFIG	?= .config
248 51148790SMasahiro Yamadaexport KCONFIG_CONFIG
249 51148790SMasahiro Yamada
250 f6322eb7SMasahiro Yamada# SHELL used by kbuild
251 f6322eb7SMasahiro YamadaCONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
252 f6322eb7SMasahiro Yamada	  else if [ -x /bin/bash ]; then echo /bin/bash; \
253 f6322eb7SMasahiro Yamada	  else echo sh; fi ; fi)
254 f6322eb7SMasahiro Yamada
255 b477fe44SJeroen HofsteeHOSTCC       = cc
256 b477fe44SJeroen HofsteeHOSTCXX      = c++
257 022885cbSSimon GlassHOSTCFLAGS   = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
258 022885cbSSimon Glass		$(if $(CONFIG_TOOLS_DEBUG),-g)
259 598e2d33SMasahiro YamadaHOSTCXXFLAGS = -O2
260 598e2d33SMasahiro Yamada
261 9de4f959SPhilipp Tomsich# With the move to GCC 6, we have implicitly upgraded our language
262 9de4f959SPhilipp Tomsich# standard to GNU11 (see https://gcc.gnu.org/gcc-5/porting_to.html).
263 9de4f959SPhilipp Tomsich# Some Linux distributions (including RHEL7, SLES13, Debian 8) still
264 9de4f959SPhilipp Tomsich# have older compilers as their default, so we make it explicit for
265 9de4f959SPhilipp Tomsich# these that our host tools are GNU11 (i.e. C11 w/ GNU extensions).
266 fa893990STom RiniCSTD_FLAG := -std=gnu11
267 9de4f959SPhilipp Tomsichifeq ($(HOSTOS),linux)
268 fa893990STom RiniHOSTCFLAGS += $(CSTD_FLAG)
269 9de4f959SPhilipp Tomsichendif
270 9de4f959SPhilipp Tomsich
271 f6322eb7SMasahiro Yamadaifeq ($(HOSTOS),cygwin)
272 f6322eb7SMasahiro YamadaHOSTCFLAGS	+= -ansi
273 f6322eb7SMasahiro Yamadaendif
274 f6322eb7SMasahiro Yamada
275 f6322eb7SMasahiro Yamada# Mac OS X / Darwin's C preprocessor is Apple specific.  It
276 f6322eb7SMasahiro Yamada# generates numerous errors and warnings.  We want to bypass it
277 f6322eb7SMasahiro Yamada# and use GNU C's cpp.	To do this we pass the -traditional-cpp
278 f6322eb7SMasahiro Yamada# option to the compiler.  Note that the -traditional-cpp flag
279 f6322eb7SMasahiro Yamada# DOES NOT have the same semantics as GNU C's flag, all it does
280 f6322eb7SMasahiro Yamada# is invoke the GNU preprocessor in stock ANSI/ISO C fashion.
281 f6322eb7SMasahiro Yamada#
282 f6322eb7SMasahiro Yamada# Apple's linker is similar, thanks to the new 2 stage linking
283 f6322eb7SMasahiro Yamada# multiple symbol definitions are treated as errors, hence the
284 f6322eb7SMasahiro Yamada# -multiply_defined suppress option to turn off this error.
285 f6322eb7SMasahiro Yamada#
286 f6322eb7SMasahiro Yamadaifeq ($(HOSTOS),darwin)
287 f6322eb7SMasahiro Yamada# get major and minor product version (e.g. '10' and '6' for Snow Leopard)
288 f6322eb7SMasahiro YamadaDARWIN_MAJOR_VERSION	= $(shell sw_vers -productVersion | cut -f 1 -d '.')
289 f6322eb7SMasahiro YamadaDARWIN_MINOR_VERSION	= $(shell sw_vers -productVersion | cut -f 2 -d '.')
290 f6322eb7SMasahiro Yamada
291 f6322eb7SMasahiro Yamadaos_x_before	= $(shell if [ $(DARWIN_MAJOR_VERSION) -le $(1) -a \
292 f6322eb7SMasahiro Yamada	$(DARWIN_MINOR_VERSION) -le $(2) ] ; then echo "$(3)"; else echo "$(4)"; fi ;)
293 f6322eb7SMasahiro Yamada
294 ab8fc413S默默os_x_after = $(shell if [ $(DARWIN_MAJOR_VERSION) -ge $(1) -a \
295 ab8fc413S默默	$(DARWIN_MINOR_VERSION) -ge $(2) ] ; then echo "$(3)"; else echo "$(4)"; fi ;)
296 ab8fc413S默默
297 f6322eb7SMasahiro Yamada# Snow Leopards build environment has no longer restrictions as described above
298 f6322eb7SMasahiro YamadaHOSTCC       = $(call os_x_before, 10, 5, "cc", "gcc")
299 f6322eb7SMasahiro YamadaHOSTCFLAGS  += $(call os_x_before, 10, 4, "-traditional-cpp")
300 f6322eb7SMasahiro YamadaHOSTLDFLAGS += $(call os_x_before, 10, 5, "-multiply_defined suppress")
301 1fddd7b6SAndreas Bießmann
302 1fddd7b6SAndreas Bießmann# since Lion (10.7) ASLR is on by default, but we use linker generated lists
303 1fddd7b6SAndreas Bießmann# in some host tools which is a problem then ... so disable ASLR for these
304 1fddd7b6SAndreas Bießmann# tools
305 1fddd7b6SAndreas BießmannHOSTLDFLAGS += $(call os_x_before, 10, 7, "", "-Xlinker -no_pie")
306 ab8fc413S默默
307 ab8fc413S默默# macOS Mojave (10.14.X)
308 ab8fc413S默默# Undefined symbols for architecture x86_64: "_PyArg_ParseTuple"
309 ab8fc413S默默HOSTLDFLAGS += $(call os_x_after, 10, 14, "-lpython -dynamclib", "")
310 f6322eb7SMasahiro Yamadaendif
311 f6322eb7SMasahiro Yamada
312 6825a95bSMasahiro Yamada# Decide whether to build built-in, modular, or both.
313 6825a95bSMasahiro Yamada# Normally, just do built-in.
314 6825a95bSMasahiro Yamada
315 6825a95bSMasahiro YamadaKBUILD_MODULES :=
316 6825a95bSMasahiro YamadaKBUILD_BUILTIN := 1
317 6825a95bSMasahiro Yamada
318 6825a95bSMasahiro Yamada# If we have only "make modules", don't compile built-in objects.
319 6825a95bSMasahiro Yamada# When we're building modules with modversions, we need to consider
320 6825a95bSMasahiro Yamada# the built-in objects during the descend as well, in order to
321 6825a95bSMasahiro Yamada# make sure the checksums are up to date before we record them.
322 6825a95bSMasahiro Yamada
323 6825a95bSMasahiro Yamadaifeq ($(MAKECMDGOALS),modules)
324 6825a95bSMasahiro Yamada  KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
325 6825a95bSMasahiro Yamadaendif
326 6825a95bSMasahiro Yamada
327 6825a95bSMasahiro Yamada# If we have "make <whatever> modules", compile modules
328 6825a95bSMasahiro Yamada# in addition to whatever we do anyway.
329 6825a95bSMasahiro Yamada# Just "make" or "make all" shall build modules as well
330 6825a95bSMasahiro Yamada
331 6825a95bSMasahiro Yamada# U-Boot does not need modules
332 6825a95bSMasahiro Yamada#ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
333 6825a95bSMasahiro Yamada#  KBUILD_MODULES := 1
334 6825a95bSMasahiro Yamada#endif
335 6825a95bSMasahiro Yamada
336 6825a95bSMasahiro Yamada#ifeq ($(MAKECMDGOALS),)
337 6825a95bSMasahiro Yamada#  KBUILD_MODULES := 1
338 6825a95bSMasahiro Yamada#endif
339 6825a95bSMasahiro Yamada
340 6825a95bSMasahiro Yamadaexport KBUILD_MODULES KBUILD_BUILTIN
341 6825a95bSMasahiro Yamadaexport KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
342 6825a95bSMasahiro Yamada
343 bf4b3de1SMasahiro Yamada# We need some generic definitions (do not try to remake the file).
344 4d713be1SMasahiro Yamadascripts/Kbuild.include: ;
345 4d713be1SMasahiro Yamadainclude scripts/Kbuild.include
346 bf4b3de1SMasahiro Yamada
347 f6322eb7SMasahiro Yamada# Make variables (CC, etc...)
348 f6322eb7SMasahiro Yamada
349 f6322eb7SMasahiro YamadaAS		= $(CROSS_COMPILE)as
350 f6322eb7SMasahiro Yamada# Always use GNU ld
351 f6322eb7SMasahiro Yamadaifneq ($(shell $(CROSS_COMPILE)ld.bfd -v 2> /dev/null),)
352 f6322eb7SMasahiro YamadaLD		= $(CROSS_COMPILE)ld.bfd
353 f6322eb7SMasahiro Yamadaelse
354 f6322eb7SMasahiro YamadaLD		= $(CROSS_COMPILE)ld
355 f6322eb7SMasahiro Yamadaendif
356 f6322eb7SMasahiro YamadaCC		= $(CROSS_COMPILE)gcc
357 f6322eb7SMasahiro YamadaCPP		= $(CC) -E
358 f6322eb7SMasahiro YamadaAR		= $(CROSS_COMPILE)ar
359 f6322eb7SMasahiro YamadaNM		= $(CROSS_COMPILE)nm
360 f6322eb7SMasahiro YamadaLDR		= $(CROSS_COMPILE)ldr
361 f6322eb7SMasahiro YamadaSTRIP		= $(CROSS_COMPILE)strip
362 f6322eb7SMasahiro YamadaOBJCOPY		= $(CROSS_COMPILE)objcopy
363 f6322eb7SMasahiro YamadaOBJDUMP		= $(CROSS_COMPILE)objdump
364 e91610daSEugeniu RoscaLEX		= flex
365 e91610daSEugeniu RoscaYACC		= bison
366 f6322eb7SMasahiro YamadaAWK		= awk
367 f77d7096SMasahiro YamadaPERL		= perl
368 b48bfc74SStefano BabicPYTHON		?= python
369 e91610daSEugeniu RoscaPYTHON2		= python2
370 e91610daSEugeniu RoscaPYTHON3		= python3
371 36dd5f1bSTom RiniDTC		?= $(objtree)/scripts/dtc/dtc
372 f6322eb7SMasahiro YamadaCHECK		= sparse
373 f6322eb7SMasahiro Yamada
374 f6322eb7SMasahiro YamadaCHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
375 f6322eb7SMasahiro Yamada		  -Wbitwise -Wno-return-void -D__CHECK_ENDIAN__ $(CF)
376 f6322eb7SMasahiro Yamada
377 3b612970SMasahiro YamadaKBUILD_CPPFLAGS := -D__KERNEL__ -D__UBOOT__
378 2b3c9d3dSMasahiro Yamada
379 2b3c9d3dSMasahiro YamadaKBUILD_CFLAGS   := -Wall -Wstrict-prototypes \
380 2b3c9d3dSMasahiro Yamada		   -Wno-format-security \
381 fa893990STom Rini		   -fno-builtin -ffreestanding $(CSTD_FLAG)
382 5bc11922SBin MengKBUILD_CFLAGS	+= -fshort-wchar -fno-strict-aliasing
383 2b3c9d3dSMasahiro YamadaKBUILD_AFLAGS   := -D__ASSEMBLY__
384 2b3c9d3dSMasahiro Yamada
385 6ace36e1SAndy Shevchenko# Don't generate position independent code
386 6ace36e1SAndy ShevchenkoKBUILD_CFLAGS	+= $(call cc-option,-fno-PIE)
387 6ace36e1SAndy ShevchenkoKBUILD_AFLAGS	+= $(call cc-option,-fno-PIE)
388 6ace36e1SAndy Shevchenko
389 7424145fSMasahiro Yamada# Read UBOOTRELEASE from include/config/uboot.release (if it exists)
390 7424145fSMasahiro YamadaUBOOTRELEASE = $(shell cat include/config/uboot.release 2> /dev/null)
391 7424145fSMasahiro YamadaUBOOTVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
392 5f30f3beSMasahiro Yamada
393 7424145fSMasahiro Yamadaexport VERSION PATCHLEVEL SUBLEVEL UBOOTRELEASE UBOOTVERSION
394 026f9cf2SMasahiro Yamadaexport ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIR
395 f6322eb7SMasahiro Yamadaexport CONFIG_SHELL HOSTCC HOSTCFLAGS HOSTLDFLAGS CROSS_COMPILE AS LD CC
396 f6322eb7SMasahiro Yamadaexport CPP AR NM LDR STRIP OBJCOPY OBJDUMP
397 e91610daSEugeniu Roscaexport MAKE LEX YACC AWK PERL PYTHON PYTHON2 PYTHON3
398 4b83f0d9SMasahiro Yamadaexport HOSTCXX HOSTCXXFLAGS CHECK CHECKFLAGS DTC DTC_FLAGS
399 f6322eb7SMasahiro Yamada
400 026f9cf2SMasahiro Yamadaexport KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE OBJCOPYFLAGS LDFLAGS
401 2b3c9d3dSMasahiro Yamadaexport KBUILD_CFLAGS KBUILD_AFLAGS
402 2b3c9d3dSMasahiro Yamada
403 6825a95bSMasahiro Yamada# When compiling out-of-tree modules, put MODVERDIR in the module
404 6825a95bSMasahiro Yamada# tree rather than in the kernel tree. The kernel tree might
405 6825a95bSMasahiro Yamada# even be read-only.
406 6825a95bSMasahiro Yamadaexport MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions
407 6825a95bSMasahiro Yamada
408 6825a95bSMasahiro Yamada# Files to ignore in find ... statements
409 6825a95bSMasahiro Yamada
410 598e2d33SMasahiro Yamadaexport RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o    \
411 598e2d33SMasahiro Yamada			  -name CVS -o -name .pc -o -name .hg -o -name .git \) \
412 598e2d33SMasahiro Yamada			  -prune -o
413 6825a95bSMasahiro Yamadaexport RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
414 6825a95bSMasahiro Yamada			 --exclude CVS --exclude .pc --exclude .hg --exclude .git
415 6825a95bSMasahiro Yamada
416 6825a95bSMasahiro Yamada# ===========================================================================
417 6825a95bSMasahiro Yamada# Rules shared between *config targets and build targets
418 6825a95bSMasahiro Yamada
419 6825a95bSMasahiro Yamada# Basic helpers built in scripts/
420 6825a95bSMasahiro YamadaPHONY += scripts_basic
421 6825a95bSMasahiro Yamadascripts_basic:
422 6825a95bSMasahiro Yamada	$(Q)$(MAKE) $(build)=scripts/basic
423 6825a95bSMasahiro Yamada	$(Q)rm -f .tmp_quiet_recordmcount
424 6825a95bSMasahiro Yamada
425 6825a95bSMasahiro Yamada# To avoid any implicit rule to kick in, define an empty command.
426 6825a95bSMasahiro Yamadascripts/basic/%: scripts_basic ;
427 6825a95bSMasahiro Yamada
428 3341bfecSMasahiro YamadaPHONY += outputmakefile
429 3341bfecSMasahiro Yamada# outputmakefile generates a Makefile in the output directory, if using a
430 3341bfecSMasahiro Yamada# separate output directory. This allows convenient use of make in the
431 3341bfecSMasahiro Yamada# output directory.
432 3341bfecSMasahiro Yamadaoutputmakefile:
433 3341bfecSMasahiro Yamadaifneq ($(KBUILD_SRC),)
434 3341bfecSMasahiro Yamada	$(Q)ln -fsn $(srctree) source
435 3341bfecSMasahiro Yamada	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
436 3341bfecSMasahiro Yamada	    $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
437 3341bfecSMasahiro Yamadaendif
438 3341bfecSMasahiro Yamada
439 433b2f1eSMasahiro Yamada# To make sure we do not include .config for any of the *config targets
440 433b2f1eSMasahiro Yamada# catch them early, and hand them over to scripts/kconfig/Makefile
441 433b2f1eSMasahiro Yamada# It is allowed to specify more targets when calling make, including
442 433b2f1eSMasahiro Yamada# mixing *config targets and build targets.
443 433b2f1eSMasahiro Yamada# For example 'make oldconfig all'.
444 433b2f1eSMasahiro Yamada# Detect when mixed targets is specified, and make a second invocation
445 433b2f1eSMasahiro Yamada# of make so .config is not included in this case either (for *config).
446 6825a95bSMasahiro Yamada
447 7424145fSMasahiro Yamadaversion_h := include/generated/version_autogenerated.h
448 7424145fSMasahiro Yamadatimestamp_h := include/generated/timestamp_autogenerated.h
449 f3d8f7ddSRasmus Villemoesdefaultenv_h := include/generated/defaultenv_autogenerated.h
450 7424145fSMasahiro Yamada
451 433b2f1eSMasahiro Yamadano-dot-config-targets := clean clobber mrproper distclean \
452 27651187SMasahiro Yamada			 help %docs check% coccicheck \
453 499fde5cSSimon Glass			 ubootversion backup tests check qcheck
454 2b3c9d3dSMasahiro Yamada
455 433b2f1eSMasahiro Yamadaconfig-targets := 0
456 433b2f1eSMasahiro Yamadamixed-targets  := 0
457 433b2f1eSMasahiro Yamadadot-config     := 1
458 2b3c9d3dSMasahiro Yamada
459 433b2f1eSMasahiro Yamadaifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
460 433b2f1eSMasahiro Yamada	ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
461 433b2f1eSMasahiro Yamada		dot-config := 0
462 2b3c9d3dSMasahiro Yamada	endif
463 2b3c9d3dSMasahiro Yamadaendif
464 2b3c9d3dSMasahiro Yamada
465 433b2f1eSMasahiro Yamadaifeq ($(KBUILD_EXTMOD),)
466 433b2f1eSMasahiro Yamada        ifneq ($(filter config %config,$(MAKECMDGOALS)),)
467 433b2f1eSMasahiro Yamada                config-targets := 1
468 98bd0e0dSMasahiro Yamada                ifneq ($(words $(MAKECMDGOALS)),1)
469 433b2f1eSMasahiro Yamada                        mixed-targets := 1
470 433b2f1eSMasahiro Yamada                endif
471 433b2f1eSMasahiro Yamada        endif
472 433b2f1eSMasahiro Yamadaendif
473 433b2f1eSMasahiro Yamada
474 433b2f1eSMasahiro Yamadaifeq ($(mixed-targets),1)
475 433b2f1eSMasahiro Yamada# ===========================================================================
476 433b2f1eSMasahiro Yamada# We're called with mixed targets (*config and build targets).
477 433b2f1eSMasahiro Yamada# Handle them one by one.
478 433b2f1eSMasahiro Yamada
479 e7734404SMasahiro YamadaPHONY += $(MAKECMDGOALS) __build_one_by_one
480 53bca5abSMasahiro Yamada
481 e7734404SMasahiro Yamada$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one
482 53bca5abSMasahiro Yamada	@:
483 53bca5abSMasahiro Yamada
484 e7734404SMasahiro Yamada__build_one_by_one:
485 53bca5abSMasahiro Yamada	$(Q)set -e; \
486 53bca5abSMasahiro Yamada	for i in $(MAKECMDGOALS); do \
487 53bca5abSMasahiro Yamada		$(MAKE) -f $(srctree)/Makefile $$i; \
488 53bca5abSMasahiro Yamada	done
489 433b2f1eSMasahiro Yamada
490 433b2f1eSMasahiro Yamadaelse
491 433b2f1eSMasahiro Yamadaifeq ($(config-targets),1)
492 433b2f1eSMasahiro Yamada# ===========================================================================
493 433b2f1eSMasahiro Yamada# *config targets only - make sure prerequisites are updated, and descend
494 433b2f1eSMasahiro Yamada# in scripts/kconfig to make the *config target
495 433b2f1eSMasahiro Yamada
496 51148790SMasahiro YamadaKBUILD_DEFCONFIG := sandbox_defconfig
497 51148790SMasahiro Yamadaexport KBUILD_DEFCONFIG KBUILD_KCONFIG
498 433b2f1eSMasahiro Yamada
499 51148790SMasahiro Yamadaconfig: scripts_basic outputmakefile FORCE
500 5f9eb220SMasahiro Yamada	$(Q)$(MAKE) $(build)=scripts/kconfig $@
501 51148790SMasahiro Yamada
502 51148790SMasahiro Yamada%config: scripts_basic outputmakefile FORCE
503 5f9eb220SMasahiro Yamada	$(Q)$(MAKE) $(build)=scripts/kconfig $@
504 433b2f1eSMasahiro Yamada
505 433b2f1eSMasahiro Yamadaelse
506 433b2f1eSMasahiro Yamada# ===========================================================================
507 433b2f1eSMasahiro Yamada# Build targets only - this includes vmlinux, arch specific targets, clean
508 433b2f1eSMasahiro Yamada# targets and others. In general all targets except *config targets.
509 433b2f1eSMasahiro Yamada
510 61304dbeSMasahiro Yamada# Additional helpers built in scripts/
511 61304dbeSMasahiro Yamada# Carefully list dependencies so we do not try to build scripts twice
512 61304dbeSMasahiro Yamada# in parallel
513 61304dbeSMasahiro YamadaPHONY += scripts
514 61304dbeSMasahiro Yamadascripts: scripts_basic include/config/auto.conf
515 61304dbeSMasahiro Yamada	$(Q)$(MAKE) $(build)=$(@)
516 61304dbeSMasahiro Yamada
517 433b2f1eSMasahiro Yamadaifeq ($(dot-config),1)
518 433b2f1eSMasahiro Yamada# Read in config
519 51148790SMasahiro Yamada-include include/config/auto.conf
520 51148790SMasahiro Yamada
521 51148790SMasahiro Yamada# Read in dependencies to all Kconfig* files, make sure to run
522 51148790SMasahiro Yamada# oldconfig if changes are detected.
523 51148790SMasahiro Yamada-include include/config/auto.conf.cmd
524 51148790SMasahiro Yamada
525 51148790SMasahiro Yamada# To avoid any implicit rule to kick in, define an empty command
526 51148790SMasahiro Yamada$(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
527 51148790SMasahiro Yamada
528 51148790SMasahiro Yamada# If .config is newer than include/config/auto.conf, someone tinkered
529 51148790SMasahiro Yamada# with it and forgot to run make oldconfig.
530 51148790SMasahiro Yamada# if auto.conf.cmd is missing then we are probably in a cleaned tree so
531 51148790SMasahiro Yamada# we execute the config step to be sure to catch updated Kconfig files
532 51148790SMasahiro Yamadainclude/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
533 e91610daSEugeniu Rosca	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
534 5f9eb220SMasahiro Yamada	@# If the following part fails, include/config/auto.conf should be
535 5f9eb220SMasahiro Yamada	@# deleted so "make silentoldconfig" will be re-run on the next build.
536 5f9eb220SMasahiro Yamada	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf || \
537 5f9eb220SMasahiro Yamada		{ rm -f include/config/auto.conf; false; }
538 5f9eb220SMasahiro Yamada	@# include/config.h has been updated after "make silentoldconfig".
539 5f9eb220SMasahiro Yamada	@# We need to touch include/config/auto.conf so it gets newer
540 5f9eb220SMasahiro Yamada	@# than include/config.h.
541 5f9eb220SMasahiro Yamada	@# Otherwise, 'make silentoldconfig' would be invoked twice.
542 5f9eb220SMasahiro Yamada	$(Q)touch include/config/auto.conf
543 51148790SMasahiro Yamada
544 0b588defSMasahiro Yamadau-boot.cfg spl/u-boot.cfg tpl/u-boot.cfg:
545 0d982c58SPhilipp Tomsich	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf $(@)
546 0d982c58SPhilipp Tomsich
547 433b2f1eSMasahiro Yamada-include include/autoconf.mk
548 433b2f1eSMasahiro Yamada-include include/autoconf.mk.dep
549 433b2f1eSMasahiro Yamada
550 51148790SMasahiro Yamada# We want to include arch/$(ARCH)/config.mk only when include/config/auto.conf
551 51148790SMasahiro Yamada# is up-to-date. When we switch to a different board configuration, old CONFIG
552 51148790SMasahiro Yamada# macros are still remaining in include/config/auto.conf. Without the following
553 51148790SMasahiro Yamada# gimmick, wrong config.mk would be included leading nasty warnings/errors.
554 cffcd286SMasahiro Yamadaifneq ($(wildcard $(KCONFIG_CONFIG)),)
555 cffcd286SMasahiro Yamadaifneq ($(wildcard include/config/auto.conf),)
556 cffcd286SMasahiro Yamadaautoconf_is_old := $(shell find . -path ./$(KCONFIG_CONFIG) -newer \
557 cffcd286SMasahiro Yamada						include/config/auto.conf)
558 cffcd286SMasahiro Yamadaifeq ($(autoconf_is_old),)
559 4d713be1SMasahiro Yamadainclude config.mk
560 4d713be1SMasahiro Yamadainclude arch/$(ARCH)/Makefile
561 ced0715dSMasahiro Yamadaendif
562 cffcd286SMasahiro Yamadaendif
563 cffcd286SMasahiro Yamadaendif
564 fada9e20SSimon Glass
565 bb1ae559SSimon Glass# These are set by the arch-specific config.mk. Make sure they are exported
566 bb1ae559SSimon Glass# so they can be used when building an EFI application.
567 bb1ae559SSimon Glassexport EFI_LDS		# Filename of EFI link script in arch/$(ARCH)/lib
568 bb1ae559SSimon Glassexport EFI_CRT0		# Filename of EFI CRT0 in arch/$(ARCH)/lib
569 bb1ae559SSimon Glassexport EFI_RELOC	# Filename of EFU relocation code in arch/$(ARCH)/lib
570 bb1ae559SSimon Glassexport CFLAGS_EFI	# Compiler flags to add when building EFI app
571 bb1ae559SSimon Glassexport CFLAGS_NON_EFI	# Compiler flags to remove when building EFI app
572 bb1ae559SSimon Glassexport EFI_TARGET	# binutils target if EFI is natively supported
573 bb1ae559SSimon Glass
574 d51dfff7SIlya Yanok# If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use
575 d51dfff7SIlya Yanok# that (or fail if absent).  Otherwise, search for a linker script in a
576 d51dfff7SIlya Yanok# standard location.
577 d51dfff7SIlya Yanok
578 d51dfff7SIlya Yanokifndef LDSCRIPT
579 4379ac61SMasahiro Yamada	#LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot.lds.debug
580 d51dfff7SIlya Yanok	ifdef CONFIG_SYS_LDSCRIPT
581 d51dfff7SIlya Yanok		# need to strip off double quotes
582 4a377552SMasahiro Yamada		LDSCRIPT := $(srctree)/$(CONFIG_SYS_LDSCRIPT:"%"=%)
583 d51dfff7SIlya Yanok	endif
584 d51dfff7SIlya Yanokendif
585 d51dfff7SIlya Yanok
586 ee60197eSSimon Glass# If there is no specified link script, we look in a number of places for it
587 d51dfff7SIlya Yanokifndef LDSCRIPT
588 d51dfff7SIlya Yanok	ifeq ($(wildcard $(LDSCRIPT)),)
589 4379ac61SMasahiro Yamada		LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot.lds
590 d51dfff7SIlya Yanok	endif
591 d51dfff7SIlya Yanok	ifeq ($(wildcard $(LDSCRIPT)),)
592 4379ac61SMasahiro Yamada		LDSCRIPT := $(srctree)/$(CPUDIR)/u-boot.lds
593 d51dfff7SIlya Yanok	endif
594 d51dfff7SIlya Yanok	ifeq ($(wildcard $(LDSCRIPT)),)
595 4379ac61SMasahiro Yamada		LDSCRIPT := $(srctree)/arch/$(ARCH)/cpu/u-boot.lds
596 ee60197eSSimon Glass	endif
597 d51dfff7SIlya Yanokendif
598 d51dfff7SIlya Yanok
599 433b2f1eSMasahiro Yamadaelse
600 51148790SMasahiro Yamada# Dummy target needed, because used as prerequisite
601 51148790SMasahiro Yamadainclude/config/auto.conf: ;
602 433b2f1eSMasahiro Yamadaendif # $(dot-config)
603 433b2f1eSMasahiro Yamada
604 de5e5ceaSChris Zankel#
605 de5e5ceaSChris Zankel# Xtensa linker script cannot be preprocessed with -ansi because of
606 de5e5ceaSChris Zankel# preprocessor operations on strings that don't make C identifiers.
607 de5e5ceaSChris Zankel#
608 de5e5ceaSChris Zankelifeq ($(CONFIG_XTENSA),)
609 de5e5ceaSChris ZankelLDPPFLAGS	+= -ansi
610 de5e5ceaSChris Zankelendif
611 de5e5ceaSChris Zankel
612 4a8ed8e2SMasahiro Yamadaifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
613 4a8ed8e2SMasahiro YamadaKBUILD_CFLAGS	+= -Os
614 4a8ed8e2SMasahiro Yamadaelse
615 4a8ed8e2SMasahiro YamadaKBUILD_CFLAGS	+= -O2
616 4a8ed8e2SMasahiro Yamadaendif
617 433b2f1eSMasahiro Yamada
618 433b2f1eSMasahiro YamadaKBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
619 687a7518SPrabhakar KushwahaKBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks)
620 433b2f1eSMasahiro Yamada
621 1eb2e71eSMasahiro Yamada# change __FILE__ to the relative path from the srctree
622 1eb2e71eSMasahiro YamadaKBUILD_CFLAGS	+= $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
623 1eb2e71eSMasahiro Yamada
624 433b2f1eSMasahiro YamadaKBUILD_CFLAGS	+= -g
625 433b2f1eSMasahiro Yamada# $(KBUILD_AFLAGS) sets -g, which causes gcc to pass a suitable -g<format>
626 433b2f1eSMasahiro Yamada# option to the assembler.
627 433b2f1eSMasahiro YamadaKBUILD_AFLAGS	+= -g
628 433b2f1eSMasahiro Yamada
629 433b2f1eSMasahiro Yamada# Report stack usage if supported
630 948071baSAlexey Brodkin# ARC tools based on GCC 7.1 has an issue with stack usage
631 948071baSAlexey Brodkin# with naked functions, see commit message for more details
632 948071baSAlexey Brodkinifndef CONFIG_ARC
633 5b1f1f4aSMasahiro Yamadaifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-stack-usage.sh $(CC)),y)
634 5b1f1f4aSMasahiro Yamada	KBUILD_CFLAGS += -fstack-usage
635 5b1f1f4aSMasahiro Yamadaendif
636 948071baSAlexey Brodkinendif
637 433b2f1eSMasahiro Yamada
638 433b2f1eSMasahiro YamadaKBUILD_CFLAGS += $(call cc-option,-Wno-format-nonliteral)
639 4760fe26STom Riniifeq ($(cc-name),clang)
640 4760fe26STom RiniKBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
641 4760fe26STom RiniKBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
642 4760fe26STom RiniKBUILD_CFLAGS += $(call cc-disable-warning, gnu)
643 4760fe26STom RiniKBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
644 4760fe26STom RiniKBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
645 4760fe26STom Riniendif
646 433b2f1eSMasahiro Yamada
647 433b2f1eSMasahiro Yamada# turn jbsr into jsr for m68k
648 433b2f1eSMasahiro Yamadaifeq ($(ARCH),m68k)
649 433b2f1eSMasahiro Yamadaifeq ($(findstring 3.4,$(shell $(CC) --version)),3.4)
650 433b2f1eSMasahiro YamadaKBUILD_AFLAGS += -Wa,-gstabs,-S
651 433b2f1eSMasahiro Yamadaendif
652 433b2f1eSMasahiro Yamadaendif
653 433b2f1eSMasahiro Yamada
654 65bb6d8dSMasahiro Yamada# Prohibit date/time macros, which would make the build non-deterministic
655 65bb6d8dSMasahiro YamadaKBUILD_CFLAGS   += $(call cc-option,-Werror=date-time)
656 65bb6d8dSMasahiro Yamada
657 4d713be1SMasahiro Yamadainclude scripts/Makefile.extrawarn
658 6419e144SMasahiro Yamada
659 0e6256d0SMasahiro Yamada# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
660 0e6256d0SMasahiro YamadaKBUILD_CPPFLAGS += $(KCPPFLAGS)
661 0e6256d0SMasahiro YamadaKBUILD_AFLAGS += $(KAFLAGS)
662 0e6256d0SMasahiro YamadaKBUILD_CFLAGS += $(KCFLAGS)
663 0e6256d0SMasahiro Yamada
664 433b2f1eSMasahiro Yamada# Use UBOOTINCLUDE when you must reference the include/ directory.
665 433b2f1eSMasahiro Yamada# Needed to be compatible with the O= option
666 f5c66bdbSMasahiro YamadaUBOOTINCLUDE    := \
667 f5c66bdbSMasahiro Yamada		-Iinclude \
668 f5c66bdbSMasahiro Yamada		$(if $(KBUILD_SRC), -I$(srctree)/include) \
669 3a649407STom Rini		$(if $(CONFIG_$(SPL_)SYS_THUMB_BUILD), \
670 3a649407STom Rini			$(if $(CONFIG_HAS_THUMB2),, \
671 62e92077SAlbert ARIBAUD				-I$(srctree)/arch/$(ARCH)/thumb1/include),) \
672 51148790SMasahiro Yamada		-I$(srctree)/arch/$(ARCH)/include \
673 51148790SMasahiro Yamada		-include $(srctree)/include/linux/kconfig.h
674 433b2f1eSMasahiro Yamada
675 433b2f1eSMasahiro YamadaNOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
676 433b2f1eSMasahiro YamadaCHECKFLAGS     += $(NOSTDINC_FLAGS)
677 433b2f1eSMasahiro Yamada
678 433b2f1eSMasahiro Yamada# FIX ME
679 026f9cf2SMasahiro Yamadacpp_flags := $(KBUILD_CPPFLAGS) $(PLATFORM_CPPFLAGS) $(UBOOTINCLUDE) \
680 026f9cf2SMasahiro Yamada							$(NOSTDINC_FLAGS)
681 433b2f1eSMasahiro Yamadac_flags := $(KBUILD_CFLAGS) $(cpp_flags)
682 433b2f1eSMasahiro Yamada
683 7ebf7443Swdenk#########################################################################
684 7ebf7443Swdenk# U-Boot objects....order is important (i.e. start must be first)
685 7ebf7443Swdenk
686 9e414032SMasahiro YamadaHAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(srctree)/board/$(VENDOR)/common/Makefile),y,n)
687 f9328639SMarian Balakowicz
688 656de6b8SMasahiro Yamadalibs-y += lib/
689 656de6b8SMasahiro Yamadalibs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
690 656de6b8SMasahiro Yamadalibs-$(CONFIG_OF_EMBED) += dts/
691 656de6b8SMasahiro Yamadalibs-y += fs/
692 656de6b8SMasahiro Yamadalibs-y += net/
693 656de6b8SMasahiro Yamadalibs-y += disk/
694 656de6b8SMasahiro Yamadalibs-y += drivers/
695 656de6b8SMasahiro Yamadalibs-y += drivers/dma/
696 656de6b8SMasahiro Yamadalibs-y += drivers/gpio/
697 656de6b8SMasahiro Yamadalibs-y += drivers/i2c/
698 656de6b8SMasahiro Yamadalibs-y += drivers/mtd/
699 a430fa06SMiquel Raynallibs-$(CONFIG_CMD_NAND) += drivers/mtd/nand/raw/
700 656de6b8SMasahiro Yamadalibs-y += drivers/mtd/onenand/
701 656de6b8SMasahiro Yamadalibs-$(CONFIG_CMD_UBI) += drivers/mtd/ubi/
702 656de6b8SMasahiro Yamadalibs-y += drivers/mtd/spi/
703 656de6b8SMasahiro Yamadalibs-y += drivers/net/
704 656de6b8SMasahiro Yamadalibs-y += drivers/net/phy/
705 656de6b8SMasahiro Yamadalibs-y += drivers/power/ \
706 61f5ddcbSStephen Warren	drivers/power/domain/ \
707 e2906a59SMasahiro Yamada	drivers/power/fuel_gauge/ \
708 e2906a59SMasahiro Yamada	drivers/power/mfd/ \
709 e2906a59SMasahiro Yamada	drivers/power/pmic/ \
710 af41e8dbSPrzemyslaw Marczak	drivers/power/battery/ \
711 af41e8dbSPrzemyslaw Marczak	drivers/power/regulator/
712 656de6b8SMasahiro Yamadalibs-y += drivers/spi/
713 656de6b8SMasahiro Yamadalibs-$(CONFIG_FMAN_ENET) += drivers/net/fm/
714 656de6b8SMasahiro Yamadalibs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
715 b9e745bbSShengzhou Liulibs-$(CONFIG_SYS_FSL_MMDC) += drivers/ddr/fsl/
716 9bbd2132SDinh Nguyenlibs-$(CONFIG_ALTERA_SDRAM) += drivers/ddr/altera/
717 656de6b8SMasahiro Yamadalibs-y += drivers/serial/
718 5b9ce0e2SKishon Vijay Abraham Ilibs-y += drivers/usb/dwc3/
719 93eb8f39SSriram Dashlibs-y += drivers/usb/common/
720 019808f9SSimon Glasslibs-y += drivers/usb/emul/
721 656de6b8SMasahiro Yamadalibs-y += drivers/usb/eth/
722 db17a92dSJean-Jacques Hiblotlibs-$(CONFIG_USB_GADGET) += drivers/usb/gadget/
723 db17a92dSJean-Jacques Hiblotlibs-$(CONFIG_USB_GADGET) += drivers/usb/gadget/udc/
724 656de6b8SMasahiro Yamadalibs-y += drivers/usb/host/
725 656de6b8SMasahiro Yamadalibs-y += drivers/usb/musb/
726 656de6b8SMasahiro Yamadalibs-y += drivers/usb/musb-new/
727 656de6b8SMasahiro Yamadalibs-y += drivers/usb/phy/
728 656de6b8SMasahiro Yamadalibs-y += drivers/usb/ulpi/
729 72a8cf8dSSimon Glasslibs-y += cmd/
730 656de6b8SMasahiro Yamadalibs-y += common/
731 0649cd0dSSimon Glasslibs-y += env/
732 656de6b8SMasahiro Yamadalibs-$(CONFIG_API) += api/
733 656de6b8SMasahiro Yamadalibs-$(CONFIG_HAS_POST) += post/
734 79ffe8c6STom Rinilibs-$(CONFIG_UNIT_TEST) += test/ test/dm/
735 421f86f3SJoe Hershbergerlibs-$(CONFIG_UT_ENV) += test/env/
736 f2a9942fSMaxime Ripardlibs-$(CONFIG_UT_OVERLAY) += test/overlay/
737 f9328639SMarian Balakowicz
738 33a02da0SMasahiro Yamadalibs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/)
739 08e39a84SMasahiro Yamada
740 656de6b8SMasahiro Yamadalibs-y := $(sort $(libs-y))
741 656de6b8SMasahiro Yamada
742 656de6b8SMasahiro Yamadau-boot-dirs	:= $(patsubst %/,%,$(filter %/, $(libs-y))) tools examples
743 656de6b8SMasahiro Yamada
744 656de6b8SMasahiro Yamadau-boot-alldirs	:= $(sort $(u-boot-dirs) $(patsubst %/,%,$(filter %/, $(libs-))))
745 656de6b8SMasahiro Yamada
746 656de6b8SMasahiro Yamadalibs-y		:= $(patsubst %/, %/built-in.o, $(libs-y))
747 656de6b8SMasahiro Yamada
748 656de6b8SMasahiro Yamadau-boot-init := $(head-y)
749 656de6b8SMasahiro Yamadau-boot-main := $(libs-y)
750 656de6b8SMasahiro Yamada
751 a8c7c708Swdenk
752 4f7cb08eSwdenk# Add GCC lib
753 cd2e46cbSMasahiro Yamadaifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y)
754 a86cf89cSMasahiro YamadaPLATFORM_LIBGCC = arch/$(ARCH)/lib/lib.a
755 52b1bf2cSWolfgang Denkelse
756 6825a95bSMasahiro YamadaPLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(c_flags) -print-libgcc-file-name`) -lgcc
757 52b1bf2cSWolfgang Denkendif
758 52b1bf2cSWolfgang DenkPLATFORM_LIBS += $(PLATFORM_LIBGCC)
759 52ff8020SChristian Gmeiner
760 52ff8020SChristian Gmeinerifdef CONFIG_CC_COVERAGE
761 52ff8020SChristian GmeinerKBUILD_CFLAGS += --coverage
762 52ff8020SChristian GmeinerPLATFORM_LIBGCC += -lgcov
763 52ff8020SChristian Gmeinerendif
764 52ff8020SChristian Gmeiner
765 52b1bf2cSWolfgang Denkexport PLATFORM_LIBS
766 e75e73ddSAlexey Brodkinexport PLATFORM_LIBGCC
767 3d3befa7Swdenk
768 6ac9f479SMike Frysinger# Special flags for CPP when processing the linker script.
769 6ac9f479SMike Frysinger# Pass the version down so we can handle backwards compatibility
770 6ac9f479SMike Frysinger# on the fly.
771 6ac9f479SMike FrysingerLDPPFLAGS += \
772 4379ac61SMasahiro Yamada	-include $(srctree)/include/u-boot/u-boot.lds.h \
773 7e6403a6SSimon Glass	-DCPUDIR=$(CPUDIR) \
774 6ac9f479SMike Frysinger	$(shell $(LD) --version | \
775 6ac9f479SMike Frysinger	  sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p')
776 6ac9f479SMike Frysinger
777 7ebf7443Swdenk#########################################################################
778 bdccc4feSwdenk#########################################################################
779 7ebf7443Swdenk
780 f3a14d37SMike Frysingerifneq ($(CONFIG_BOARD_SIZE_LIMIT),)
781 f3a14d37SMike FrysingerBOARD_SIZE_CHECK = \
782 f3a14d37SMike Frysinger	@actual=`wc -c $@ | awk '{print $$1}'`; \
783 d060e6f4SJoe Hershberger	limit=`printf "%d" $(CONFIG_BOARD_SIZE_LIMIT)`; \
784 f3a14d37SMike Frysinger	if test $$actual -gt $$limit; then \
785 d060e6f4SJoe Hershberger		echo "$@ exceeds file size limit:" >&2 ; \
786 d060e6f4SJoe Hershberger		echo "  limit:  $$limit bytes" >&2 ; \
787 d060e6f4SJoe Hershberger		echo "  actual: $$actual bytes" >&2 ; \
788 d060e6f4SJoe Hershberger		echo "  excess: $$((actual - limit)) bytes" >&2; \
789 f3a14d37SMike Frysinger		exit 1; \
790 f3a14d37SMike Frysinger	fi
791 f3a14d37SMike Frysingerelse
792 f3a14d37SMike FrysingerBOARD_SIZE_CHECK =
793 f3a14d37SMike Frysingerendif
794 f3a14d37SMike Frysinger
795 8137af19SScott Wood# Statically apply RELA-style relocations (currently arm64 only)
796 d57259b9SÁlvaro Fernández Rojas# This is useful for arm64 where static relocation needs to be performed on
797 d57259b9SÁlvaro Fernández Rojas# the raw binary, but certain simulators only accept an ELF file (but don't
798 d57259b9SÁlvaro Fernández Rojas# do the relocation).
799 8137af19SScott Woodifneq ($(CONFIG_STATIC_RELA),)
800 8137af19SScott Wood# $(1) is u-boot ELF, $(2) is u-boot bin, $(3) is text base
801 8137af19SScott WoodDO_STATIC_RELA = \
802 8137af19SScott Wood	start=$$($(NM) $(1) | grep __rel_dyn_start | cut -f 1 -d ' '); \
803 8137af19SScott Wood	end=$$($(NM) $(1) | grep __rel_dyn_end | cut -f 1 -d ' '); \
804 9e414032SMasahiro Yamada	tools/relocate-rela $(2) $(3) $$start $$end
805 8137af19SScott Woodelse
806 8137af19SScott WoodDO_STATIC_RELA =
807 8137af19SScott Woodendif
808 8137af19SScott Wood
809 3e88337bSMike Frysinger# Always append ALL so that arch config.mk's can add custom ones
810 e19b0fb4SMasahiro YamadaALL-y += u-boot.srec u-boot.bin u-boot.sym System.map binary_size_check
811 e935a374SHaiying Wang
812 9e414032SMasahiro YamadaALL-$(CONFIG_ONENAND_U_BOOT) += u-boot-onenand.bin
813 89ad7be8SPrabhakar Kushwahaifeq ($(CONFIG_SPL_FSL_PBL),y)
814 89ad7be8SPrabhakar KushwahaALL-$(CONFIG_RAMBOOT_PBL) += u-boot-with-spl-pbl.bin
815 89ad7be8SPrabhakar Kushwahaelse
816 467a40dfSAneesh Bansalifneq ($(CONFIG_SECURE_BOOT), y)
817 467a40dfSAneesh Bansal# For Secure Boot The Image needs to be signed and Header must also
818 467a40dfSAneesh Bansal# be included. So The image has to be built explicitly
819 9e414032SMasahiro YamadaALL-$(CONFIG_RAMBOOT_PBL) += u-boot.pbl
820 89ad7be8SPrabhakar Kushwahaendif
821 467a40dfSAneesh Bansalendif
822 9e414032SMasahiro YamadaALL-$(CONFIG_SPL) += spl/u-boot-spl.bin
823 d21bd69bSSven Ebenfeldifeq ($(CONFIG_MX6)$(CONFIG_SECURE_BOOT), yy)
824 d21bd69bSSven EbenfeldALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
825 d21bd69bSSven Ebenfeldelse
826 0004b7aaSEran Matityahuifeq ($(CONFIG_MX7)$(CONFIG_SECURE_BOOT), yy)
827 0004b7aaSEran MatityahuALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
828 0004b7aaSEran Matityahuelse
829 9e414032SMasahiro YamadaALL-$(CONFIG_SPL_FRAMEWORK) += u-boot.img
830 d21bd69bSSven Ebenfeldendif
831 0004b7aaSEran Matityahuendif
832 9e414032SMasahiro YamadaALL-$(CONFIG_TPL) += tpl/u-boot-tpl.bin
833 ad1ecd20SSimon GlassALL-$(CONFIG_OF_SEPARATE) += u-boot.dtb
834 2405d09cSMasahiro Yamadaifeq ($(CONFIG_SPL_FRAMEWORK),y)
835 2405d09cSMasahiro YamadaALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb.img
836 2405d09cSMasahiro Yamadaendif
837 714a5621SSimon GlassALL-$(CONFIG_OF_HOSTFILE) += u-boot.dtb
838 b343bbb5SVadim Bendeburyifneq ($(CONFIG_SPL_TARGET),)
839 9e414032SMasahiro YamadaALL-$(CONFIG_SPL) += $(CONFIG_SPL_TARGET:"%"=%)
840 b343bbb5SVadim Bendeburyendif
841 9e414032SMasahiro YamadaALL-$(CONFIG_REMAKE_ELF) += u-boot.elf
842 08aeb8b5SSimon GlassALL-$(CONFIG_EFI_APP) += u-boot-app.efi
843 476476e7SSimon GlassALL-$(CONFIG_EFI_STUB) += u-boot-payload.efi
844 7ebf7443Swdenk
845 871aa41dSHeinrich Schuchardtifneq ($(BUILD_ROM)$(CONFIG_BUILD_ROM),)
846 eea0f112SSimon GlassALL-$(CONFIG_X86_RESET_VECTOR) += u-boot.rom
847 eea0f112SSimon Glassendif
848 fce7b276SSimon Glass
849 155b1169STuomas Tynkkynen# Build a combined spl + u-boot image for sunxi
850 155b1169STuomas Tynkkynenifeq ($(CONFIG_ARCH_SUNXI)$(CONFIG_SPL),yy)
851 155b1169STuomas TynkkynenALL-y += u-boot-sunxi-with-spl.bin
852 155b1169STuomas Tynkkynenendif
853 155b1169STuomas Tynkkynen
854 12b7b70cSAllen Martin# enable combined SPL/u-boot/dtb rules for tegra
855 580cc033SSimon Glassifeq ($(CONFIG_TEGRA)$(CONFIG_SPL),yy)
856 a9d78260SSimon GlassALL-y += u-boot-tegra.bin u-boot-nodtb-tegra.bin
857 580cc033SSimon GlassALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb-tegra.bin
858 7dcd3a21SVidya Sagarendif
859 12b7b70cSAllen Martin
860 3b975a14SRyder LeeALL-$(CONFIG_ARCH_MEDIATEK) += u-boot-mtk.bin
861 3b975a14SRyder Lee
862 b2b8a696SStefan Roese# Add optional build target if defined in board/cpu/soc headers
863 b2b8a696SStefan Roeseifneq ($(CONFIG_BUILD_TARGET),)
864 b2b8a696SStefan RoeseALL-y += $(CONFIG_BUILD_TARGET:"%"=%)
865 b2b8a696SStefan Roeseendif
866 b2b8a696SStefan Roese
867 5fed97afSStephen Warrenifneq ($(CONFIG_SYS_INIT_SP_BSS_OFFSET),)
868 5fed97afSStephen WarrenALL-y += init_sp_bss_offset_check
869 5fed97afSStephen Warrenendif
870 5fed97afSStephen Warren
871 96699f09SJagdish Gediyaifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
872 96699f09SJagdish GediyaALL-y += u-boot-with-dtb.bin
873 96699f09SJagdish Gediyaendif
874 96699f09SJagdish Gediya
875 ad0fed46SMasahiro YamadaLDFLAGS_u-boot += $(LDFLAGS_FINAL)
876 e391b1e6SJoel Stanley
877 e391b1e6SJoel Stanley# Avoid 'Not enough room for program headers' error on binutils 2.28 onwards.
878 e391b1e6SJoel StanleyLDFLAGS_u-boot += $(call ld-option, --no-dynamic-linker)
879 e391b1e6SJoel Stanley
880 1022807cSAlexey Brodkinifeq ($(CONFIG_ARC)$(CONFIG_NIOS2)$(CONFIG_X86)$(CONFIG_XTENSA),)
881 433b2f1eSMasahiro YamadaLDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
882 433b2f1eSMasahiro Yamadaendif
883 71f84ef0SMasahiro Yamada
884 e020c88aSSimon Glass# Normally we fill empty space with 0xff
885 f9c235fdSMasahiro Yamadaquiet_cmd_objcopy = OBJCOPY $@
886 e020c88aSSimon Glasscmd_objcopy = $(OBJCOPY) --gap-fill=0xff $(OBJCOPYFLAGS) \
887 e020c88aSSimon Glass	$(OBJCOPYFLAGS_$(@F)) $< $@
888 e020c88aSSimon Glass
889 e020c88aSSimon Glass# Provide a version which does not do this, for use by EFI
890 e020c88aSSimon Glassquiet_cmd_zobjcopy = OBJCOPY $@
891 e020c88aSSimon Glasscmd_zobjcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
892 f9c235fdSMasahiro Yamada
893 476476e7SSimon Glassquiet_cmd_efipayload = OBJCOPY $@
894 476476e7SSimon Glasscmd_efipayload = $(OBJCOPY) -I binary -O $(EFIPAYLOAD_BFDTARGET) -B $(EFIPAYLOAD_BFDARCH) $< $@
895 476476e7SSimon Glass
896 1f6a6648SSven EbenfeldMKIMAGEOUTPUT ?= /dev/null
897 1f6a6648SSven Ebenfeld
898 b97241b3SMarek Vasutquiet_cmd_mkimage = MKIMAGE $@
899 9bf215b0SMasahiro Yamadacmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
900 06587617SRasmus Villemoes	>$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
901 9bf215b0SMasahiro Yamada
902 1a12fdc4SAndre Przywaraquiet_cmd_mkfitimage = MKIMAGE $@
903 7a778369SMarek Vasutcmd_mkfitimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -f $(U_BOOT_ITS) -p $(CONFIG_FIT_EXTERNAL_OFFSET) $@\
904 06587617SRasmus Villemoes	>$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
905 1a12fdc4SAndre Przywara
906 ee0acfa2SMasahiro Yamadaquiet_cmd_cat = CAT     $@
907 ee0acfa2SMasahiro Yamadacmd_cat = cat $(filter-out $(PHONY), $^) > $@
908 ee0acfa2SMasahiro Yamada
909 982a1199SMasahiro Yamadaappend = cat $(filter-out $< $(PHONY), $^) >> $@
910 982a1199SMasahiro Yamada
911 982a1199SMasahiro Yamadaquiet_cmd_pad_cat = CAT     $@
912 982a1199SMasahiro Yamadacmd_pad_cat = $(cmd_objcopy) && $(append) || rm -f $@
913 982a1199SMasahiro Yamada
914 1bd87630SSimon Glasscfg: u-boot.cfg
915 1bd87630SSimon Glass
916 1bdd942bSMasahiro Yamadaquiet_cmd_cfgcheck = CFGCHK  $2
917 1bdd942bSMasahiro Yamadacmd_cfgcheck = $(srctree)/scripts/check-config.sh $2 \
918 1bdd942bSMasahiro Yamada		$(srctree)/scripts/config_whitelist.txt $(srctree)
919 1bdd942bSMasahiro Yamada
920 0b588defSMasahiro Yamadaall:		$(ALL-y)
921 7fcdac0eSSimon Glassifeq ($(CONFIG_DM_I2C_COMPAT)$(CONFIG_SANDBOX),y)
922 a267699bSChris Packham	@echo >&2 "===================== WARNING ======================"
923 a267699bSChris Packham	@echo >&2 "This board uses CONFIG_DM_I2C_COMPAT. Please remove"
924 a267699bSChris Packham	@echo >&2 "(possibly in a subsequent patch in your series)"
925 a267699bSChris Packham	@echo >&2 "before sending patches to the mailing list."
926 a267699bSChris Packham	@echo >&2 "===================================================="
927 73845350SSimon Glassendif
928 1cb5d5dfSTom Riniifeq ($(CONFIG_MMC),y)
929 1cb5d5dfSTom Riniifneq ($(CONFIG_DM_MMC)$(CONFIG_OF_CONTROL)$(CONFIG_BLK),yyy)
930 a267699bSChris Packham	@echo >&2 "===================== WARNING ======================"
931 a267699bSChris Packham	@echo >&2 "This board does not use CONFIG_DM_MMC. Please update"
932 a267699bSChris Packham	@echo >&2 "the board to use CONFIG_DM_MMC before the v2019.04 release."
933 a267699bSChris Packham	@echo >&2 "Failure to update by the deadline may result in board removal."
934 a267699bSChris Packham	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
935 a267699bSChris Packham	@echo >&2 "===================================================="
936 1cb5d5dfSTom Riniendif
937 1cb5d5dfSTom Riniendif
938 109d8bf3STom Riniifeq ($(CONFIG_USB),y)
939 109d8bf3STom Riniifneq ($(CONFIG_DM_USB)$(CONFIG_OF_CONTROL)$(CONFIG_BLK),yyy)
940 a267699bSChris Packham	@echo >&2 "===================== WARNING ======================"
941 a267699bSChris Packham	@echo >&2 "This board does not use CONFIG_DM_USB. Please update"
942 a267699bSChris Packham	@echo >&2 "the board to use CONFIG_DM_USB before the v2019.07 release."
943 a267699bSChris Packham	@echo >&2 "Failure to update by the deadline may result in board removal."
944 a267699bSChris Packham	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
945 a267699bSChris Packham	@echo >&2 "===================================================="
946 109d8bf3STom Riniendif
947 109d8bf3STom Riniendif
948 ddfe346fSTom Riniifeq ($(CONFIG_LIBATA)$(CONFIG_MVSATA_IDE),y)
949 ddfe346fSTom Riniifneq ($(CONFIG_DM_SCSI),y)
950 a267699bSChris Packham	@echo >&2 "===================== WARNING ======================"
951 a267699bSChris Packham	@echo >&2 "This board does not use CONFIG_DM_SCSI. Please update"
952 a267699bSChris Packham	@echo >&2 "the storage controller to use CONFIG_DM_SCSI before the v2019.07 release."
953 a267699bSChris Packham	@echo >&2 "Failure to update by the deadline may result in board removal."
954 a267699bSChris Packham	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
955 a267699bSChris Packham	@echo >&2 "===================================================="
956 ea9d7c17STom Riniendif
957 ddfe346fSTom Riniendif
958 1ce689d9SSimon Glassifeq ($(CONFIG_PCI),y)
959 1ce689d9SSimon Glassifneq ($(CONFIG_DM_PCI),y)
960 1ce689d9SSimon Glass	@echo >&2 "===================== WARNING ======================"
961 1ce689d9SSimon Glass	@echo >&2 "This board does not use CONFIG_DM_PCI Please update"
962 1ce689d9SSimon Glass	@echo >&2 "the board to use CONFIG_DM_PCI before the v2019.07 release."
963 1ce689d9SSimon Glass	@echo >&2 "Failure to update by the deadline may result in board removal."
964 1ce689d9SSimon Glass	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
965 1ce689d9SSimon Glass	@echo >&2 "===================================================="
966 1ce689d9SSimon Glassendif
967 1ce689d9SSimon Glassendif
968 3e87ffcfSSimon Glassifneq ($(CONFIG_LCD)$(CONFIG_VIDEO),)
969 3e87ffcfSSimon Glassifneq ($(CONFIG_DM_VIDEO),y)
970 3e87ffcfSSimon Glass	@echo >&2 "===================== WARNING ======================"
971 3e87ffcfSSimon Glass	@echo >&2 "This board does not use CONFIG_DM_VIDEO Please update"
972 3e87ffcfSSimon Glass	@echo >&2 "the board to use CONFIG_DM_VIDEO before the v2019.07 release."
973 3e87ffcfSSimon Glass	@echo >&2 "Failure to update by the deadline may result in board removal."
974 3e87ffcfSSimon Glass	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
975 3e87ffcfSSimon Glass	@echo >&2 "===================================================="
976 3e87ffcfSSimon Glassendif
977 3e87ffcfSSimon Glassendif
978 841d5fbaSSimon Glassifeq ($(CONFIG_OF_EMBED),y)
979 a267699bSChris Packham	@echo >&2 "===================== WARNING ======================"
980 a267699bSChris Packham	@echo >&2 "CONFIG_OF_EMBED is enabled. This option should only"
981 a267699bSChris Packham	@echo >&2 "be used for debugging purposes. Please use"
982 a267699bSChris Packham	@echo >&2 "CONFIG_OF_SEPARATE for boards in mainline."
983 a267699bSChris Packham	@echo >&2 "See doc/README.fdt-control for more info."
984 a267699bSChris Packham	@echo >&2 "===================================================="
985 841d5fbaSSimon Glassendif
986 99a17dd5SJagan Tekiifeq ($(CONFIG_SPI),y)
987 99a17dd5SJagan Tekiifneq ($(CONFIG_DM_SPI)$(CONFIG_OF_CONTROL),yy)
988 99a17dd5SJagan Teki	@echo >&2 "===================== WARNING ======================"
989 99a17dd5SJagan Teki	@echo >&2 "This board does not use CONFIG_DM_SPI. Please update"
990 99a17dd5SJagan Teki	@echo >&2 "the board before v2019.04 for no dm conversion"
991 99a17dd5SJagan Teki	@echo >&2 "and v2019.07 for partially dm converted drivers."
992 99a17dd5SJagan Teki	@echo >&2 "Failure to update can lead to driver/board removal"
993 99a17dd5SJagan Teki	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
994 99a17dd5SJagan Teki	@echo >&2 "===================================================="
995 99a17dd5SJagan Tekiendif
996 99a17dd5SJagan Tekiendif
997 68979524SJagan Tekiifeq ($(CONFIG_SPI_FLASH),y)
998 68979524SJagan Tekiifneq ($(CONFIG_DM_SPI_FLASH)$(CONFIG_OF_CONTROL),yy)
999 68979524SJagan Teki	@echo >&2 "===================== WARNING ======================"
1000 68979524SJagan Teki	@echo >&2 "This board does not use CONFIG_DM_SPI_FLASH. Please update"
1001 68979524SJagan Teki	@echo >&2 "the board to use CONFIG_SPI_FLASH before the v2019.07 release."
1002 68979524SJagan Teki	@echo >&2 "Failure to update by the deadline may result in board removal."
1003 68979524SJagan Teki	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
1004 68979524SJagan Teki	@echo >&2 "===================================================="
1005 68979524SJagan Tekiendif
1006 68979524SJagan Tekiendif
1007 4bf06d11SMasahiro Yamada	@# Check that this build does not use CONFIG options that we do not
1008 4bf06d11SMasahiro Yamada	@# know about unless they are in Kconfig. All the existing CONFIG
1009 4bf06d11SMasahiro Yamada	@# options are whitelisted, so new ones should not be added.
1010 1bdd942bSMasahiro Yamada	$(call cmd,cfgcheck,u-boot.cfg)
1011 7ebf7443Swdenk
1012 6ab6b2afSMasahiro YamadaPHONY += dtbs
1013 4141e85bSMasahiro Yamadadtbs: dts/dt.dtb
1014 4141e85bSMasahiro Yamada	@:
1015 36dd5f1bSTom Rinidts/dt.dtb: u-boot
1016 6ab6b2afSMasahiro Yamada	$(Q)$(MAKE) $(build)=dts dtbs
1017 2c0f79e4SSimon Glass
1018 ad1ecd20SSimon Glassquiet_cmd_copy = COPY    $@
1019 ad1ecd20SSimon Glass      cmd_copy = cp $< $@
1020 ad1ecd20SSimon Glass
1021 11955590SJean-Jacques Hiblotifeq ($(CONFIG_MULTI_DTB_FIT),y)
1022 6f59fb07SCooper Jr., Franklin
1023 6f59fb07SCooper Jr., Franklinfit-dtb.blob: dts/dt.dtb FORCE
1024 6f59fb07SCooper Jr., Franklin	$(call if_changed,mkimage)
1025 6f59fb07SCooper Jr., Franklin
1026 6f59fb07SCooper Jr., FranklinMKIMAGEFLAGS_fit-dtb.blob = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
1027 6f59fb07SCooper Jr., Franklin	-a 0 -e 0 -E \
1028 6f59fb07SCooper Jr., Franklin	$(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) -d /dev/null
1029 6f59fb07SCooper Jr., Franklin
1030 6f59fb07SCooper Jr., Franklinu-boot-fit-dtb.bin: u-boot-nodtb.bin fit-dtb.blob
1031 6f59fb07SCooper Jr., Franklin	$(call if_changed,cat)
1032 6f59fb07SCooper Jr., Franklin
1033 6f59fb07SCooper Jr., Franklinu-boot.bin: u-boot-fit-dtb.bin FORCE
1034 6f59fb07SCooper Jr., Franklin	$(call if_changed,copy)
1035 6f59fb07SCooper Jr., Franklinelse ifeq ($(CONFIG_OF_SEPARATE),y)
1036 ad1ecd20SSimon Glassu-boot-dtb.bin: u-boot-nodtb.bin dts/dt.dtb FORCE
1037 ee0acfa2SMasahiro Yamada	$(call if_changed,cat)
1038 2c0f79e4SSimon Glass
1039 ad1ecd20SSimon Glassu-boot.bin: u-boot-dtb.bin FORCE
1040 ad1ecd20SSimon Glass	$(call if_changed,copy)
1041 ad1ecd20SSimon Glasselse
1042 ad1ecd20SSimon Glassu-boot.bin: u-boot-nodtb.bin FORCE
1043 ad1ecd20SSimon Glass	$(call if_changed,copy)
1044 ad1ecd20SSimon Glassendif
1045 ad1ecd20SSimon Glass
1046 e64348f5SStefano Babic%.imx: %.bin
1047 552a848eSStefano Babic	$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
1048 e64348f5SStefano Babic
1049 ed0c2c0aSAlbert ARIBAUD \(3ADEV\)%.vyb: %.imx
1050 ed0c2c0aSAlbert ARIBAUD \(3ADEV\)	$(Q)$(MAKE) $(build)=arch/arm/cpu/armv7/vf610 $@
1051 ed0c2c0aSAlbert ARIBAUD \(3ADEV\)
1052 ed0c2c0aSAlbert ARIBAUD \(3ADEV\)quiet_cmd_copy = COPY    $@
1053 ed0c2c0aSAlbert ARIBAUD \(3ADEV\)      cmd_copy = cp $< $@
1054 ed0c2c0aSAlbert ARIBAUD \(3ADEV\)
1055 0d1e8aacSMasahiro Yamadau-boot.dtb: dts/dt.dtb
1056 0d1e8aacSMasahiro Yamada	$(call cmd,copy)
1057 0d1e8aacSMasahiro Yamada
1058 f9c235fdSMasahiro YamadaOBJCOPYFLAGS_u-boot.hex := -O ihex
1059 6310eb9dSwdenk
1060 f9c235fdSMasahiro YamadaOBJCOPYFLAGS_u-boot.srec := -O srec
1061 7ebf7443Swdenk
1062 f9c235fdSMasahiro Yamadau-boot.hex u-boot.srec: u-boot FORCE
1063 f9c235fdSMasahiro Yamada	$(call if_changed,objcopy)
1064 f9c235fdSMasahiro Yamada
1065 341ca905SMasaru NagaiOBJCOPYFLAGS_u-boot-elf.srec := $(OBJCOPYFLAGS_u-boot.srec)
1066 341ca905SMasaru Nagai
1067 341ca905SMasaru Nagaiu-boot-elf.srec: u-boot.elf FORCE
1068 341ca905SMasaru Nagai	$(call if_changed,objcopy)
1069 341ca905SMasaru Nagai
1070 3ee58ea4SMarek VasutOBJCOPYFLAGS_u-boot-spl.srec = $(OBJCOPYFLAGS_u-boot.srec)
1071 3ee58ea4SMarek Vasut
1072 3ee58ea4SMarek Vasutspl/u-boot-spl.srec: spl/u-boot-spl FORCE
1073 3ee58ea4SMarek Vasut	$(call if_changed,objcopy)
1074 3ee58ea4SMarek Vasut
1075 ad1ecd20SSimon GlassOBJCOPYFLAGS_u-boot-nodtb.bin := -O binary \
1076 96699f09SJagdish Gediya		$(if $(CONFIG_X86_16BIT_INIT),-R .start16 -R .resetvec) \
1077 96699f09SJagdish Gediya		$(if $(CONFIG_MPC85XX_HAVE_RESET_VECTOR),-R .bootpg -R .resetvec)
1078 f9c235fdSMasahiro Yamada
1079 2ff60af6SDalon WestergreenOBJCOPYFLAGS_u-boot-spl.hex = $(OBJCOPYFLAGS_u-boot.hex)
1080 2ff60af6SDalon Westergreen
1081 2ff60af6SDalon Westergreenspl/u-boot-spl.hex: spl/u-boot-spl FORCE
1082 2ff60af6SDalon Westergreen	$(call if_changed,objcopy)
1083 2ff60af6SDalon Westergreen
1084 ad1ecd20SSimon Glassbinary_size_check: u-boot-nodtb.bin FORCE
1085 ad1ecd20SSimon Glass	@file_size=$(shell wc -c u-boot-nodtb.bin | awk '{print $$1}') ; \
1086 3ce7a4feSChris Packham	map_size=$(shell cat u-boot.map | \
1087 0b308f14SSimon Glass		awk '/_image_copy_start/ {start = $$1} /_image_binary_end/ {end = $$1} END {if (start != "" && end != "") print "ibase=16; " toupper(end) " - " toupper(start)}' \
1088 3ce7a4feSChris Packham		| sed 's/0X//g' \
1089 0b308f14SSimon Glass		| bc); \
1090 89742924SSimon Glass	if [ "" != "$$map_size" ]; then \
1091 89742924SSimon Glass		if test $$map_size -ne $$file_size; then \
1092 3ce7a4feSChris Packham			echo "u-boot.map shows a binary size of $$map_size" >&2 ; \
1093 ad1ecd20SSimon Glass			echo "  but u-boot-nodtb.bin shows $$file_size" >&2 ; \
1094 89742924SSimon Glass			exit 1; \
1095 89742924SSimon Glass		fi \
1096 89742924SSimon Glass	fi
1097 89742924SSimon Glass
1098 5fed97afSStephen Warrenifneq ($(CONFIG_SYS_INIT_SP_BSS_OFFSET),)
1099 5fed97afSStephen Warrenifneq ($(CONFIG_SYS_MALLOC_F_LEN),)
1100 5fed97afSStephen Warrensubtract_sys_malloc_f_len = space=$$(($${space} - $(CONFIG_SYS_MALLOC_F_LEN)))
1101 5fed97afSStephen Warrenelse
1102 5fed97afSStephen Warrensubtract_sys_malloc_f_len = true
1103 5fed97afSStephen Warrenendif
1104 5fed97afSStephen Warren# The 1/4 margin below is somewhat arbitrary. The likely initial SP usage is
1105 5fed97afSStephen Warren# so low that the DTB could probably use 90%+ of the available space, for
1106 5fed97afSStephen Warren# current values of CONFIG_SYS_INIT_SP_BSS_OFFSET at least. However, let's be
1107 5fed97afSStephen Warren# safe for now and tweak this later if space becomes tight.
1108 5fed97afSStephen Warren# A rejected alternative would be to check that some absolute minimum stack
1109 5fed97afSStephen Warren# space was available. However, since CONFIG_SYS_INIT_SP_BSS_OFFSET is
1110 5fed97afSStephen Warren# deliberately build-specific, to take account of build-to-build stack usage
1111 5fed97afSStephen Warren# differences due to different feature sets, there is no common absolute value
1112 5fed97afSStephen Warren# to check against.
1113 5fed97afSStephen Warreninit_sp_bss_offset_check: u-boot.dtb FORCE
1114 5fed97afSStephen Warren	@dtb_size=$(shell wc -c u-boot.dtb | awk '{print $$1}') ; \
1115 5fed97afSStephen Warren	space=$(CONFIG_SYS_INIT_SP_BSS_OFFSET) ; \
1116 5fed97afSStephen Warren	$(subtract_sys_malloc_f_len) ; \
1117 5fed97afSStephen Warren	quarter_space=$$(($${space} / 4)) ; \
1118 5fed97afSStephen Warren	if [ $${dtb_size} -gt $${quarter_space} ]; then \
1119 5fed97afSStephen Warren		echo "u-boot.dtb is larger than 1 quarter of " >&2 ; \
1120 5fed97afSStephen Warren		echo "(CONFIG_SYS_INIT_SP_BSS_OFFSET - CONFIG_SYS_MALLOC_F_LEN)" >&2 ; \
1121 5fed97afSStephen Warren		exit 1 ; \
1122 5fed97afSStephen Warren	fi
1123 5fed97afSStephen Warrenendif
1124 5fed97afSStephen Warren
1125 ad1ecd20SSimon Glassu-boot-nodtb.bin: u-boot FORCE
1126 f9c235fdSMasahiro Yamada	$(call if_changed,objcopy)
1127 8137af19SScott Wood	$(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
1128 f3a14d37SMike Frysinger	$(BOARD_SIZE_CHECK)
1129 7ebf7443Swdenk
1130 9e414032SMasahiro Yamadau-boot.ldr:	u-boot
1131 76d82187SMike Frysinger		$(CREATE_LDR_ENV)
1132 240182d5SSonic Zhang		$(LDR) -T $(CONFIG_CPU) -c $@ $< $(LDR_FLAGS)
1133 f3a14d37SMike Frysinger		$(BOARD_SIZE_CHECK)
1134 94a91e24SMike Frysinger
1135 17a944b6SSimon Glass# binman
1136 17a944b6SSimon Glass# ---------------------------------------------------------------------------
1137 a3c00550SSimon Glass# Use 'make BINMAN_DEBUG=1' to enable debugging
1138 17a944b6SSimon Glassquiet_cmd_binman = BINMAN  $@
1139 a3c00550SSimon Glasscmd_binman = $(srctree)/tools/binman/binman -u -d u-boot.dtb -O . -m \
1140 a3c00550SSimon Glass		-I . -I $(srctree) -I $(srctree)/board/$(BOARDDIR) \
1141 a3c00550SSimon Glass		$(if $(BINMAN_DEBUG),-D) $(BINMAN_$(@F)) $<
1142 17a944b6SSimon Glass
1143 f9c235fdSMasahiro YamadaOBJCOPYFLAGS_u-boot.ldr.hex := -I binary -O ihex
1144 94a91e24SMike Frysinger
1145 f9c235fdSMasahiro YamadaOBJCOPYFLAGS_u-boot.ldr.srec := -I binary -O srec
1146 f9c235fdSMasahiro Yamada
1147 f9c235fdSMasahiro Yamadau-boot.ldr.hex u-boot.ldr.srec: u-boot.ldr FORCE
1148 f9c235fdSMasahiro Yamada	$(call if_changed,objcopy)
1149 94a91e24SMike Frysinger
1150 b40bda6bSStefan Roese#
1151 b40bda6bSStefan Roese# U-Boot entry point, needed for booting of full-blown U-Boot
1152 b40bda6bSStefan Roese# from the SPL U-Boot version.
1153 b40bda6bSStefan Roese#
1154 b40bda6bSStefan Roeseifndef CONFIG_SYS_UBOOT_START
1155 b40bda6bSStefan RoeseCONFIG_SYS_UBOOT_START := 0
1156 b40bda6bSStefan Roeseendif
1157 b40bda6bSStefan Roese
1158 1a12fdc4SAndre Przywara# Boards with more complex image requirments can provide an .its source file
1159 1a12fdc4SAndre Przywara# or a generator script
1160 1a12fdc4SAndre Przywaraifneq ($(CONFIG_SPL_FIT_SOURCE),"")
1161 1a12fdc4SAndre PrzywaraU_BOOT_ITS = $(subst ",,$(CONFIG_SPL_FIT_SOURCE))
1162 1a12fdc4SAndre Przywaraelse
1163 1a12fdc4SAndre Przywaraifneq ($(CONFIG_SPL_FIT_GENERATOR),"")
1164 1a12fdc4SAndre PrzywaraU_BOOT_ITS := u-boot.its
1165 e3bc7c66SChris Spencerifeq ($(CONFIG_SPL_FIT_GENERATOR),"arch/arm/mach-imx/mkimage_fit_atf.sh")
1166 e3bc7c66SChris SpencerU_BOOT_ITS_DEPS += u-boot-nodtb.bin
1167 e3bc7c66SChris Spencerendif
1168 c29c1e61SAndreas Färberifeq ($(CONFIG_SPL_FIT_GENERATOR),"arch/arm/mach-rockchip/make_fit_atf.py")
1169 c29c1e61SAndreas FärberU_BOOT_ITS_DEPS += u-boot
1170 c29c1e61SAndreas Färberendif
1171 c29c1e61SAndreas Färber$(U_BOOT_ITS): $(U_BOOT_ITS_DEPS) FORCE
1172 1a12fdc4SAndre Przywara	$(srctree)/$(CONFIG_SPL_FIT_GENERATOR) \
1173 1a12fdc4SAndre Przywara	$(patsubst %,arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) > $@
1174 1a12fdc4SAndre Przywaraendif
1175 1a12fdc4SAndre Przywaraendif
1176 1a12fdc4SAndre Przywara
1177 cdf17246SSimon Glassifdef CONFIG_SPL_LOAD_FIT
1178 cdf17246SSimon GlassMKIMAGEFLAGS_u-boot.img = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
1179 cdf17246SSimon Glass	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
1180 cdf17246SSimon Glass	-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board" -E \
1181 7a439cadSAndreas Bießmann	$(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST)))
1182 cdf17246SSimon Glasselse
1183 9bf215b0SMasahiro YamadaMKIMAGEFLAGS_u-boot.img = -A $(ARCH) -T firmware -C none -O u-boot \
1184 9bf215b0SMasahiro Yamada	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
1185 9bf215b0SMasahiro Yamada	-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
1186 d21bd69bSSven EbenfeldMKIMAGEFLAGS_u-boot-ivt.img = -A $(ARCH) -T firmware_ivt -C none -O u-boot \
1187 d21bd69bSSven Ebenfeld	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
1188 d21bd69bSSven Ebenfeld	-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
1189 1f6a6648SSven Ebenfeldu-boot-ivt.img: MKIMAGEOUTPUT = u-boot-ivt.img.log
1190 1f6a6648SSven EbenfeldCLEAN_FILES += u-boot-ivt.img.log u-boot-dtb.imx.log SPL.log u-boot.imx.log
1191 cdf17246SSimon Glassendif
1192 9bf215b0SMasahiro Yamada
1193 dae6e7bfSSimon GlassMKIMAGEFLAGS_u-boot-dtb.img = $(MKIMAGEFLAGS_u-boot.img)
1194 dae6e7bfSSimon Glass
1195 4ab3fc5eSMasahiro YamadaMKIMAGEFLAGS_u-boot.kwb = -n $(srctree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%) \
1196 4ab3fc5eSMasahiro Yamada	-T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE)
1197 9bf215b0SMasahiro Yamada
1198 a90ffb56SStefan RoeseMKIMAGEFLAGS_u-boot-spl.kwb = -n $(srctree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%) \
1199 a1b6b0a9SMario Six	-T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) \
1200 a1b6b0a9SMario Six	$(if $(KEYDIR),-k $(KEYDIR))
1201 a90ffb56SStefan Roese
1202 e4536f8eSMasahiro YamadaMKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
1203 e4536f8eSMasahiro Yamada		-R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage
1204 9bf215b0SMasahiro Yamada
1205 d21bd69bSSven Ebenfeldu-boot-dtb.img u-boot.img u-boot.kwb u-boot.pbl u-boot-ivt.img: \
1206 cdf17246SSimon Glass		$(if $(CONFIG_SPL_LOAD_FIT),u-boot-nodtb.bin dts/dt.dtb,u-boot.bin) FORCE
1207 9bf215b0SMasahiro Yamada	$(call if_changed,mkimage)
1208 45297e2aSSimon Goldschmidt	$(BOARD_SIZE_CHECK)
1209 bdccc4feSwdenk
1210 7a778369SMarek Vasutifeq ($(CONFIG_SPL_LOAD_FIT_FULL),y)
1211 7a778369SMarek VasutMKIMAGEFLAGS_u-boot.itb =
1212 7a778369SMarek Vasutelse
1213 7a778369SMarek VasutMKIMAGEFLAGS_u-boot.itb = -E
1214 7a778369SMarek Vasutendif
1215 7a778369SMarek Vasut
1216 1a12fdc4SAndre Przywarau-boot.itb: u-boot-nodtb.bin dts/dt.dtb $(U_BOOT_ITS) FORCE
1217 1a12fdc4SAndre Przywara	$(call if_changed,mkfitimage)
1218 e89f5591SMaxime Ripard	$(BOARD_SIZE_CHECK)
1219 1a12fdc4SAndre Przywara
1220 73c5c399SSimon Glassu-boot-spl.kwb: u-boot.img spl/u-boot-spl.bin FORCE
1221 a90ffb56SStefan Roese	$(call if_changed,mkimage)
1222 a90ffb56SStefan Roese
1223 9e414032SMasahiro Yamadau-boot.sha1:	u-boot.bin
1224 9e414032SMasahiro Yamada		tools/ubsha1 u-boot.bin
1225 566a494fSHeiko Schocher
1226 9e414032SMasahiro Yamadau-boot.dis:	u-boot
1227 7ebf7443Swdenk		$(OBJDUMP) -d $< > $@
1228 7ebf7443Swdenk
1229 7550dbe3SYork Sunifneq ($(CONFIG_SPL_PAYLOAD),)
1230 7550dbe3SYork SunSPL_PAYLOAD := $(CONFIG_SPL_PAYLOAD:"%"=%)
1231 3aa29de0SYing Zhangelse
1232 9e414032SMasahiro YamadaSPL_PAYLOAD := u-boot.bin
1233 3aa29de0SYing Zhangendif
1234 74752baaSScott Wood
1235 982a1199SMasahiro YamadaOBJCOPYFLAGS_u-boot-with-spl.bin = -I binary -O binary \
1236 982a1199SMasahiro Yamada				   --pad-to=$(CONFIG_SPL_PAD_TO)
1237 982a1199SMasahiro Yamadau-boot-with-spl.bin: spl/u-boot-spl.bin $(SPL_PAYLOAD) FORCE
1238 982a1199SMasahiro Yamada	$(call if_changed,pad_cat)
1239 3aa29de0SYing Zhang
1240 e3e0819cSVladimir Zapolskiyifeq ($(CONFIG_ARCH_LPC32XX)$(CONFIG_SPL),yy)
1241 412ae53aSAlbert ARIBAUD \(3ADEV\)MKIMAGEFLAGS_lpc32xx-spl.img = -T lpc32xximage -a $(CONFIG_SPL_TEXT_BASE)
1242 412ae53aSAlbert ARIBAUD \(3ADEV\)
1243 412ae53aSAlbert ARIBAUD \(3ADEV\)lpc32xx-spl.img: spl/u-boot-spl.bin FORCE
1244 412ae53aSAlbert ARIBAUD \(3ADEV\)	$(call if_changed,mkimage)
1245 412ae53aSAlbert ARIBAUD \(3ADEV\)
1246 412ae53aSAlbert ARIBAUD \(3ADEV\)OBJCOPYFLAGS_lpc32xx-boot-0.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
1247 412ae53aSAlbert ARIBAUD \(3ADEV\)
1248 514ec438SMasahiro Yamadalpc32xx-boot-0.bin: lpc32xx-spl.img FORCE
1249 412ae53aSAlbert ARIBAUD \(3ADEV\)	$(call if_changed,objcopy)
1250 412ae53aSAlbert ARIBAUD \(3ADEV\)
1251 412ae53aSAlbert ARIBAUD \(3ADEV\)OBJCOPYFLAGS_lpc32xx-boot-1.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
1252 412ae53aSAlbert ARIBAUD \(3ADEV\)
1253 514ec438SMasahiro Yamadalpc32xx-boot-1.bin: lpc32xx-spl.img FORCE
1254 412ae53aSAlbert ARIBAUD \(3ADEV\)	$(call if_changed,objcopy)
1255 412ae53aSAlbert ARIBAUD \(3ADEV\)
1256 514ec438SMasahiro Yamadalpc32xx-full.bin: lpc32xx-boot-0.bin lpc32xx-boot-1.bin u-boot.img FORCE
1257 412ae53aSAlbert ARIBAUD \(3ADEV\)	$(call if_changed,cat)
1258 412ae53aSAlbert ARIBAUD \(3ADEV\)
1259 412ae53aSAlbert ARIBAUD \(3ADEV\)CLEAN_FILES += lpc32xx-*
1260 e3e0819cSVladimir Zapolskiyendif
1261 412ae53aSAlbert ARIBAUD \(3ADEV\)
1262 982a1199SMasahiro YamadaOBJCOPYFLAGS_u-boot-with-tpl.bin = -I binary -O binary \
1263 982a1199SMasahiro Yamada				   --pad-to=$(CONFIG_TPL_PAD_TO)
1264 982a1199SMasahiro Yamadatpl/u-boot-with-tpl.bin: tpl/u-boot-tpl.bin u-boot.bin FORCE
1265 982a1199SMasahiro Yamada	$(call if_changed,pad_cat)
1266 7816f2cfSHeiko Schocher
1267 630d2345SMasahiro YamadaSPL: spl/u-boot-spl.bin FORCE
1268 552a848eSStefano Babic	$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
1269 630d2345SMasahiro Yamada
1270 caceb739SPeng Fanifeq ($(CONFIG_ARCH_IMX8M)$(CONFIG_ARCH_IMX8), y)
1271 94df9885SPeng Fanflash.bin: spl/u-boot-spl.bin u-boot.itb FORCE
1272 94df9885SPeng Fan	$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
1273 94df9885SPeng Fanendif
1274 94df9885SPeng Fan
1275 630d2345SMasahiro Yamadau-boot-with-spl.imx u-boot-with-nand-spl.imx: SPL u-boot.bin FORCE
1276 552a848eSStefano Babic	$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
1277 7d5a5c79SBenoît Thébaudeau
1278 9bf215b0SMasahiro YamadaMKIMAGEFLAGS_u-boot.ubl = -n $(UBL_CONFIG) -T ublimage -e $(CONFIG_SYS_TEXT_BASE)
1279 9bf215b0SMasahiro Yamada
1280 9bf215b0SMasahiro Yamadau-boot.ubl: u-boot-with-spl.bin FORCE
1281 9bf215b0SMasahiro Yamada	$(call if_changed,mkimage)
1282 277f00f5SJosé Miguel Gonçalves
1283 982a1199SMasahiro YamadaMKIMAGEFLAGS_u-boot-spl.ais = -s -n $(if $(CONFIG_AIS_CONFIG_FILE), \
1284 982a1199SMasahiro Yamada	$(srctree)/$(CONFIG_AIS_CONFIG_FILE:"%"=%),"/dev/null") \
1285 982a1199SMasahiro Yamada	-T aisimage -e $(CONFIG_SPL_TEXT_BASE)
1286 982a1199SMasahiro Yamadaspl/u-boot-spl.ais: spl/u-boot-spl.bin FORCE
1287 982a1199SMasahiro Yamada	$(call if_changed,mkimage)
1288 d36d8859SChristian Riesch
1289 532d5318SChristian RieschOBJCOPYFLAGS_u-boot.ais = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
1290 982a1199SMasahiro Yamadau-boot.ais: spl/u-boot-spl.ais u-boot.img FORCE
1291 982a1199SMasahiro Yamada	$(call if_changed,pad_cat)
1292 a5453555SOtavio Salvador
1293 1a9df13dSMarek Vasutu-boot-signed.sb: u-boot.bin spl/u-boot-spl.bin
1294 1a9df13dSMarek Vasut	$(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs u-boot-signed.sb
1295 9e414032SMasahiro Yamadau-boot.sb: u-boot.bin spl/u-boot-spl.bin
1296 07e27ce0SMasahiro Yamada	$(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs u-boot.sb
1297 30b9b932SMarek Vasut
1298 94aebe6cSStefan Roese# On x600 (SPEAr600) U-Boot is appended to U-Boot SPL.
1299 94aebe6cSStefan Roese# Both images are created using mkimage (crc etc), so that the ROM
1300 94aebe6cSStefan Roese# bootloader can check its integrity. Padding needs to be done to the
1301 94aebe6cSStefan Roese# SPL image (with mkimage header) and not the binary. Otherwise the resulting image
1302 94aebe6cSStefan Roese# which is loaded/copied by the ROM bootloader to SRAM doesn't fit.
1303 94aebe6cSStefan Roese# The resulting image containing both U-Boot images is called u-boot.spr
1304 982a1199SMasahiro YamadaMKIMAGEFLAGS_u-boot-spl.img = -A $(ARCH) -T firmware -C none \
1305 982a1199SMasahiro Yamada	-a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n XLOADER
1306 982a1199SMasahiro Yamadaspl/u-boot-spl.img: spl/u-boot-spl.bin FORCE
1307 982a1199SMasahiro Yamada	$(call if_changed,mkimage)
1308 982a1199SMasahiro Yamada
1309 982a1199SMasahiro YamadaOBJCOPYFLAGS_u-boot.spr = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \
1310 982a1199SMasahiro Yamada			  --gap-fill=0xff
1311 982a1199SMasahiro Yamadau-boot.spr: spl/u-boot-spl.img u-boot.img FORCE
1312 982a1199SMasahiro Yamada	$(call if_changed,pad_cat)
1313 94aebe6cSStefan Roese
1314 333b7209SMarek Vasutifneq ($(CONFIG_ARCH_SOCFPGA),)
1315 333b7209SMarek Vasutquiet_cmd_socboot = SOCBOOT $@
1316 bd7dc388SSimon Glasscmd_socboot = cat	spl/u-boot-spl.sfp spl/u-boot-spl.sfp	\
1317 bd7dc388SSimon Glass			spl/u-boot-spl.sfp spl/u-boot-spl.sfp	\
1318 bd7dc388SSimon Glass			u-boot.img > $@ || rm -f $@
1319 bd7dc388SSimon Glassu-boot-with-spl.sfp: spl/u-boot-spl.sfp u-boot.img FORCE
1320 333b7209SMarek Vasut	$(call if_changed,socboot)
1321 333b7209SMarek Vasutendif
1322 333b7209SMarek Vasut
1323 96699f09SJagdish Gediyaifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
1324 96699f09SJagdish Gediyau-boot-with-dtb.bin: u-boot.bin u-boot.dtb \
1325 96699f09SJagdish Gediya	$(if $(CONFIG_MPC85XX_HAVE_RESET_VECTOR), u-boot-br.bin) FORCE
1326 96699f09SJagdish Gediya	$(call if_changed,binman)
1327 96699f09SJagdish Gediya
1328 96699f09SJagdish Gediyaifeq ($(CONFIG_MPC85XX_HAVE_RESET_VECTOR),y)
1329 96699f09SJagdish GediyaOBJCOPYFLAGS_u-boot-br.bin := -O binary -j .bootpg -j .resetvec
1330 96699f09SJagdish Gediyau-boot-br.bin: u-boot FORCE
1331 96699f09SJagdish Gediya	$(call if_changed,objcopy)
1332 96699f09SJagdish Gediyaendif
1333 96699f09SJagdish Gediyaendif
1334 96699f09SJagdish Gediya
1335 fce7b276SSimon Glass# x86 uses a large ROM. We fill it with 0xff, put the 16-bit stuff (including
1336 fce7b276SSimon Glass# reset vector) at the top, Intel ME descriptor at the bottom, and U-Boot in
1337 b215fbd8SSimon Glass# the middle. This is handled by binman based on an image description in the
1338 b215fbd8SSimon Glass# board's device tree.
1339 fce7b276SSimon Glassifneq ($(CONFIG_X86_RESET_VECTOR),)
1340 fce7b276SSimon Glassrom: u-boot.rom FORCE
1341 fce7b276SSimon Glass
1342 0adf8d35SSimon Glassrefcode.bin: $(srctree)/board/$(BOARDDIR)/refcode.bin FORCE
1343 0adf8d35SSimon Glass	$(call if_changed,copy)
1344 0adf8d35SSimon Glass
1345 0adf8d35SSimon Glassquiet_cmd_ldr = LD      $@
1346 0adf8d35SSimon Glasscmd_ldr = $(LD) $(LDFLAGS_$(@F)) \
1347 0adf8d35SSimon Glass	       $(filter-out FORCE,$^) -o $@
1348 0adf8d35SSimon Glass
1349 972188b3SSimon Glassu-boot.rom: u-boot-x86-16bit.bin u-boot.bin \
1350 972188b3SSimon Glass		$(if $(CONFIG_SPL_X86_16BIT_INIT),spl/u-boot-spl.bin) \
1351 d6a0c78aSMasahiro Yamada		$(if $(CONFIG_HAVE_REFCODE),refcode.bin) FORCE
1352 b215fbd8SSimon Glass	$(call if_changed,binman)
1353 fce7b276SSimon Glass
1354 fce7b276SSimon GlassOBJCOPYFLAGS_u-boot-x86-16bit.bin := -O binary -j .start16 -j .resetvec
1355 fce7b276SSimon Glassu-boot-x86-16bit.bin: u-boot FORCE
1356 fce7b276SSimon Glass	$(call if_changed,objcopy)
1357 fce7b276SSimon Glassendif
1358 fce7b276SSimon Glass
1359 aec9a0f1SJagan Tekiifneq ($(CONFIG_ARCH_SUNXI),)
1360 b0b0d22fSTuomas Tynkkynenifeq ($(CONFIG_ARM64),)
1361 d6a0c78aSMasahiro Yamadau-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.img u-boot.dtb FORCE
1362 61b994a3SSimon Glass	$(call if_changed,binman)
1363 b0b0d22fSTuomas Tynkkynenelse
1364 b0b0d22fSTuomas Tynkkynenu-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.itb FORCE
1365 b0b0d22fSTuomas Tynkkynen	$(call if_changed,cat)
1366 b0b0d22fSTuomas Tynkkynenendif
1367 50827a59SIan Campbellendif
1368 50827a59SIan Campbell
1369 6d6c0baeSTom Warrenifneq ($(CONFIG_TEGRA),)
1370 f2faffecSSimon Glassifneq ($(CONFIG_BINMAN),)
1371 2547e91dSSimon Glass# Makes u-boot-dtb-tegra.bin u-boot-tegra.bin u-boot-nodtb-tegra.bin
1372 2547e91dSSimon Glass%-dtb-tegra.bin %-tegra.bin %-nodtb-tegra.bin: \
1373 2547e91dSSimon Glass		spl/%-spl %.bin FORCE
1374 f2faffecSSimon Glass	$(call if_changed,binman)
1375 f2faffecSSimon Glasselse
1376 982a1199SMasahiro YamadaOBJCOPYFLAGS_u-boot-nodtb-tegra.bin = -O binary --pad-to=$(CONFIG_SYS_TEXT_BASE)
1377 ad1ecd20SSimon Glassu-boot-nodtb-tegra.bin: spl/u-boot-spl u-boot-nodtb.bin FORCE
1378 982a1199SMasahiro Yamada	$(call if_changed,pad_cat)
1379 9972db5cSStephen Warren
1380 a9d78260SSimon GlassOBJCOPYFLAGS_u-boot-tegra.bin = -O binary --pad-to=$(CONFIG_SYS_TEXT_BASE)
1381 73c5c399SSimon Glassu-boot-tegra.bin: spl/u-boot-spl u-boot.bin FORCE
1382 580cc033SSimon Glass	$(call if_changed,pad_cat)
1383 a9d78260SSimon Glass
1384 a9d78260SSimon Glassu-boot-dtb-tegra.bin: u-boot-tegra.bin FORCE
1385 a9d78260SSimon Glass	$(call if_changed,copy)
1386 f2faffecSSimon Glassendif  # binman
1387 984df4ecSAllen Martinendif
1388 984df4ecSAllen Martin
1389 08aeb8b5SSimon GlassOBJCOPYFLAGS_u-boot-app.efi := $(OBJCOPYFLAGS_EFI)
1390 08aeb8b5SSimon Glassu-boot-app.efi: u-boot FORCE
1391 08aeb8b5SSimon Glass	$(call if_changed,zobjcopy)
1392 08aeb8b5SSimon Glass
1393 73c5c399SSimon Glassu-boot.bin.o: u-boot.bin FORCE
1394 476476e7SSimon Glass	$(call if_changed,efipayload)
1395 476476e7SSimon Glass
1396 476476e7SSimon Glassu-boot-payload.lds: $(LDSCRIPT_EFI) FORCE
1397 476476e7SSimon Glass	$(call if_changed_dep,cpp_lds)
1398 476476e7SSimon Glass
1399 476476e7SSimon Glass# Rule to link the EFI payload which contains a stub and a U-Boot binary
1400 476476e7SSimon Glassquiet_cmd_u-boot_payload ?= LD      $@
1401 476476e7SSimon Glass      cmd_u-boot_payload ?= $(LD) $(LDFLAGS_EFI_PAYLOAD) -o $@ \
1402 96a8d409SSimon Glass      -T u-boot-payload.lds arch/x86/cpu/call32.o \
1403 73c5c399SSimon Glass      lib/efi/efi.o lib/efi/efi_stub.o u-boot.bin.o \
1404 2dcd4e9eSSimon Glass      $(addprefix arch/$(ARCH)/lib/,$(EFISTUB))
1405 476476e7SSimon Glass
1406 73c5c399SSimon Glassu-boot-payload: u-boot.bin.o u-boot-payload.lds FORCE
1407 476476e7SSimon Glass	$(call if_changed,u-boot_payload)
1408 476476e7SSimon Glass
1409 476476e7SSimon GlassOBJCOPYFLAGS_u-boot-payload.efi := $(OBJCOPYFLAGS_EFI)
1410 476476e7SSimon Glassu-boot-payload.efi: u-boot-payload FORCE
1411 476476e7SSimon Glass	$(call if_changed,zobjcopy)
1412 476476e7SSimon Glass
1413 ee0acfa2SMasahiro Yamadau-boot-img.bin: spl/u-boot-spl.bin u-boot.img FORCE
1414 ee0acfa2SMasahiro Yamada	$(call if_changed,cat)
1415 fb3d2b8aSStefan Roese
1416 89ad7be8SPrabhakar Kushwaha#Add a target to create boot binary having SPL binary in PBI format
1417 89ad7be8SPrabhakar Kushwaha#concatenated with u-boot binary. It is need by PowerPC SoC having
1418 89ad7be8SPrabhakar Kushwaha#internal SRAM <= 512KB.
1419 89ad7be8SPrabhakar KushwahaMKIMAGEFLAGS_u-boot-spl.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
1420 94cb17d0SAlison Wang		-R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage \
1421 94cb17d0SAlison Wang		-A $(ARCH) -a $(CONFIG_SPL_TEXT_BASE)
1422 89ad7be8SPrabhakar Kushwaha
1423 89ad7be8SPrabhakar Kushwahaspl/u-boot-spl.pbl: spl/u-boot-spl.bin FORCE
1424 89ad7be8SPrabhakar Kushwaha	$(call if_changed,mkimage)
1425 89ad7be8SPrabhakar Kushwaha
1426 45c2e480SAlison Wangifeq ($(ARCH),arm)
1427 45c2e480SAlison WangUBOOT_BINLOAD := u-boot.img
1428 45c2e480SAlison Wangelse
1429 96699f09SJagdish Gediyaifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
1430 96699f09SJagdish GediyaUBOOT_BINLOAD := u-boot-with-dtb.bin
1431 96699f09SJagdish Gediyaelse
1432 45c2e480SAlison WangUBOOT_BINLOAD := u-boot.bin
1433 45c2e480SAlison Wangendif
1434 96699f09SJagdish Gediyaendif
1435 45c2e480SAlison Wang
1436 89ad7be8SPrabhakar KushwahaOBJCOPYFLAGS_u-boot-with-spl-pbl.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \
1437 89ad7be8SPrabhakar Kushwaha			  --gap-fill=0xff
1438 89ad7be8SPrabhakar Kushwaha
1439 45c2e480SAlison Wangu-boot-with-spl-pbl.bin: spl/u-boot-spl.pbl $(UBOOT_BINLOAD) FORCE
1440 89ad7be8SPrabhakar Kushwaha	$(call if_changed,pad_cat)
1441 89ad7be8SPrabhakar Kushwaha
1442 ecddccd0SStefan Roese# PPC4xx needs the SPL at the end of the image, since the reset vector
1443 ecddccd0SStefan Roese# is located at 0xfffffffc. So we can't use the "u-boot-img.bin" target
1444 ecddccd0SStefan Roese# and need to introduce a new build target with the full blown U-Boot
1445 ecddccd0SStefan Roese# at the start padded up to the start of the SPL image. And then concat
1446 ecddccd0SStefan Roese# the SPL image to the end.
1447 982a1199SMasahiro Yamada
1448 982a1199SMasahiro YamadaOBJCOPYFLAGS_u-boot-img-spl-at-end.bin := -I binary -O binary \
1449 982a1199SMasahiro Yamada	--pad-to=$(CONFIG_UBOOT_PAD_TO) --gap-fill=0xff
1450 982a1199SMasahiro Yamadau-boot-img-spl-at-end.bin: u-boot.img spl/u-boot-spl.bin FORCE
1451 982a1199SMasahiro Yamada	$(call if_changed,pad_cat)
1452 ecddccd0SStefan Roese
1453 d57259b9SÁlvaro Fernández Rojas# Create a new ELF from a raw binary file.
1454 96ee1adaSÁlvaro Fernández Rojasifndef PLATFORM_ELFENTRY
1455 96ee1adaSÁlvaro Fernández Rojas  PLATFORM_ELFENTRY = "_start"
1456 96ee1adaSÁlvaro Fernández Rojasendif
1457 e69945eeSÁlvaro Fernández Rojasquiet_cmd_u-boot-elf ?= LD      $@
1458 e69945eeSÁlvaro Fernández Rojas	cmd_u-boot-elf ?= $(LD) u-boot-elf.o -o $@ \
1459 96ee1adaSÁlvaro Fernández Rojas	--defsym=$(PLATFORM_ELFENTRY)=$(CONFIG_SYS_TEXT_BASE) \
1460 f4dc714aSScott Wood	-Ttext=$(CONFIG_SYS_TEXT_BASE)
1461 e69945eeSÁlvaro Fernández Rojasu-boot.elf: u-boot.bin
1462 e69945eeSÁlvaro Fernández Rojas	$(Q)$(OBJCOPY) -I binary $(PLATFORM_ELFFLAGS) $< u-boot-elf.o
1463 e69945eeSÁlvaro Fernández Rojas	$(call if_changed,u-boot-elf)
1464 f4dc714aSScott Wood
1465 3b975a14SRyder Lee# MediaTek's ARM-based u-boot needs a header to contains its load address
1466 3b975a14SRyder Lee# which is parsed by the BootROM.
1467 3b975a14SRyder Lee# If the SPL build is enabled, the header will be added to the spl binary,
1468 3b975a14SRyder Lee# and the spl binary and the u-boot.img will be combined into one file.
1469 3b975a14SRyder Lee# Otherwise the header will be added to the u-boot.bin directly.
1470 3b975a14SRyder Lee
1471 3b975a14SRyder Leeifeq ($(CONFIG_SPL),y)
1472 3b975a14SRyder Leespl/u-boot-spl-mtk.bin: spl/u-boot-spl
1473 3b975a14SRyder Lee
1474 3b975a14SRyder Leeu-boot-mtk.bin: u-boot.dtb u-boot.img spl/u-boot-spl-mtk.bin FORCE
1475 3b975a14SRyder Lee	$(call if_changed,binman)
1476 3b975a14SRyder Leeelse
1477 3b975a14SRyder LeeMKIMAGEFLAGS_u-boot-mtk.bin = -T mtk_image \
1478 3b975a14SRyder Lee	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) \
1479 3b975a14SRyder Lee	-n "$(patsubst "%",%,$(CONFIG_MTK_BROM_HEADER_INFO))"
1480 3b975a14SRyder Lee
1481 3b975a14SRyder Leeu-boot-mtk.bin: u-boot.bin FORCE
1482 3b975a14SRyder Lee	$(call if_changed,mkimage)
1483 3b975a14SRyder Leeendif
1484 3b975a14SRyder Lee
1485 09bebb83SPaul BurtonARCH_POSTLINK := $(wildcard $(srctree)/arch/$(ARCH)/Makefile.postlink)
1486 09bebb83SPaul Burton
1487 ad0fed46SMasahiro Yamada# Rule to link u-boot
1488 ad0fed46SMasahiro Yamada# May be overridden by arch/$(ARCH)/config.mk
1489 ad0fed46SMasahiro Yamadaquiet_cmd_u-boot__ ?= LD      $@
1490 ad0fed46SMasahiro Yamada      cmd_u-boot__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_u-boot) -o $@ \
1491 ad0fed46SMasahiro Yamada      -T u-boot.lds $(u-boot-init)                             \
1492 ad0fed46SMasahiro Yamada      --start-group $(u-boot-main) --end-group                 \
1493 09bebb83SPaul Burton      $(PLATFORM_LIBS) -Map u-boot.map;                        \
1494 09bebb83SPaul Burton      $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
1495 86eb49b3SSimon Glass
1496 cac8f38aSVasili Galkaquiet_cmd_smap = GEN     common/system_map.o
1497 cac8f38aSVasili Galkacmd_smap = \
1498 9e414032SMasahiro Yamada	smap=`$(call SYSTEM_MAP,u-boot) | \
1499 1aada9cdSWolfgang Denk		awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \
1500 6825a95bSMasahiro Yamada	$(CC) $(c_flags) -DSYSTEM_MAP="\"$${smap}\"" \
1501 9e414032SMasahiro Yamada		-c $(srctree)/common/system_map.c -o common/system_map.o
1502 cac8f38aSVasili Galka
1503 514ec438SMasahiro Yamadau-boot:	$(u-boot-init) $(u-boot-main) u-boot.lds FORCE
1504 09bebb83SPaul Burton	+$(call if_changed,u-boot__)
1505 cac8f38aSVasili Galkaifeq ($(CONFIG_KALLSYMS),y)
1506 cac8f38aSVasili Galka	$(call cmd,smap)
1507 ad0fed46SMasahiro Yamada	$(call cmd,u-boot__) common/system_map.o
1508 ecb1dc89SMike Frysingerendif
1509 7ebf7443Swdenk
1510 42ac26f2SRick Chenifeq ($(CONFIG_RISCV),y)
1511 42ac26f2SRick Chen	@tools/prelink-riscv $@ 0
1512 42ac26f2SRick Chenendif
1513 42ac26f2SRick Chen
1514 7ed4848bSStephen Warrenquiet_cmd_sym ?= SYM     $@
1515 7ed4848bSStephen Warren      cmd_sym ?= $(OBJDUMP) -t $< > $@
1516 7ed4848bSStephen Warrenu-boot.sym: u-boot FORCE
1517 7ed4848bSStephen Warren	$(call if_changed,sym)
1518 7ed4848bSStephen Warren
1519 656de6b8SMasahiro Yamada# The actual objects are generated when descending,
1520 656de6b8SMasahiro Yamada# make sure no implicit rule kicks in
1521 656de6b8SMasahiro Yamada$(sort $(u-boot-init) $(u-boot-main)): $(u-boot-dirs) ;
1522 f9328639SMarian Balakowicz
1523 656de6b8SMasahiro Yamada# Handle descending into subdirectories listed in $(vmlinux-dirs)
1524 656de6b8SMasahiro Yamada# Preset locale variables to speed up the build process. Limit locale
1525 656de6b8SMasahiro Yamada# tweaks to this spot to avoid wrong language settings when running
1526 656de6b8SMasahiro Yamada# make menuconfig etc.
1527 656de6b8SMasahiro Yamada# Error messages still appears in the original language
1528 a8c7c708Swdenk
1529 656de6b8SMasahiro YamadaPHONY += $(u-boot-dirs)
1530 6378008aSMasahiro Yamada$(u-boot-dirs): prepare scripts
1531 6825a95bSMasahiro Yamada	$(Q)$(MAKE) $(build)=$@
1532 940db16dSMasahiro Yamada
1533 7424145fSMasahiro Yamadatools: prepare
1534 656de6b8SMasahiro Yamada# The "tools" are needed early
1535 656de6b8SMasahiro Yamada$(filter-out tools, $(u-boot-dirs)): tools
1536 656de6b8SMasahiro Yamada# The "examples" conditionally depend on U-Boot (say, when USE_PRIVATE_LIBGCC
1537 656de6b8SMasahiro Yamada# is "yes"), so compile examples after U-Boot is compiled.
1538 656de6b8SMasahiro Yamadaexamples: $(filter-out examples, $(u-boot-dirs))
1539 656de6b8SMasahiro Yamada
1540 7424145fSMasahiro Yamadadefine filechk_uboot.release
1541 7424145fSMasahiro Yamada	echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
1542 7424145fSMasahiro Yamadaendef
1543 7424145fSMasahiro Yamada
1544 7424145fSMasahiro Yamada# Store (new) UBOOTRELEASE string in include/config/uboot.release
1545 51148790SMasahiro Yamadainclude/config/uboot.release: include/config/auto.conf FORCE
1546 7424145fSMasahiro Yamada	$(call filechk,uboot.release)
1547 7424145fSMasahiro Yamada
1548 7424145fSMasahiro Yamada
1549 3341bfecSMasahiro Yamada# Things we need to do before we recursively start building the kernel
1550 3341bfecSMasahiro Yamada# or the modules are listed in "prepare".
1551 3341bfecSMasahiro Yamada# A multi level approach is used. prepareN is processed before prepareN-1.
1552 3341bfecSMasahiro Yamada# archprepare is used in arch Makefiles and when processed asm symlink,
1553 3341bfecSMasahiro Yamada# version.h and scripts_basic is processed / created.
1554 3341bfecSMasahiro Yamada
1555 3341bfecSMasahiro Yamada# Listed in dependency order
1556 3341bfecSMasahiro YamadaPHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
1557 3341bfecSMasahiro Yamada
1558 3341bfecSMasahiro Yamada# prepare3 is used to check if we are building in a separate output directory,
1559 3341bfecSMasahiro Yamada# and if so do:
1560 3341bfecSMasahiro Yamada# 1) Check that make has not been executed in the kernel src $(srctree)
1561 7424145fSMasahiro Yamadaprepare3: include/config/uboot.release
1562 3341bfecSMasahiro Yamadaifneq ($(KBUILD_SRC),)
1563 51148790SMasahiro Yamada	@$(kecho) '  Using $(srctree) as source for U-Boot'
1564 51148790SMasahiro Yamada	$(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \
1565 3341bfecSMasahiro Yamada		echo >&2 "  $(srctree) is not clean, please run 'make mrproper'"; \
1566 3341bfecSMasahiro Yamada		echo >&2 "  in the '$(srctree)' directory.";\
1567 3341bfecSMasahiro Yamada		/bin/false; \
1568 3341bfecSMasahiro Yamada	fi;
1569 3341bfecSMasahiro Yamadaendif
1570 3341bfecSMasahiro Yamada
1571 3341bfecSMasahiro Yamada# prepare2 creates a makefile if using a separate output directory
1572 0b588defSMasahiro Yamadaprepare2: prepare3 outputmakefile cfg
1573 3341bfecSMasahiro Yamada
1574 51148790SMasahiro Yamadaprepare1: prepare2 $(version_h) $(timestamp_h) \
1575 51148790SMasahiro Yamada                   include/config/auto.conf
1576 4a377552SMasahiro Yamadaifeq ($(wildcard $(LDSCRIPT)),)
1577 4a377552SMasahiro Yamada	@echo >&2 "  Could not find linker script."
1578 4a377552SMasahiro Yamada	@/bin/false
1579 4a377552SMasahiro Yamadaendif
1580 7ebf7443Swdenk
1581 f3d8f7ddSRasmus Villemoesifeq ($(CONFIG_USE_DEFAULT_ENV_FILE),y)
1582 f3d8f7ddSRasmus Villemoesprepare1: $(defaultenv_h)
1583 f3d8f7ddSRasmus Villemoesendif
1584 f3d8f7ddSRasmus Villemoes
1585 3341bfecSMasahiro Yamadaarchprepare: prepare1 scripts_basic
1586 a8c7c708Swdenk
1587 6a44d806SMasahiro Yamadaprepare0: archprepare FORCE
1588 6a44d806SMasahiro Yamada	$(Q)$(MAKE) $(build)=.
1589 7ebf7443Swdenk
1590 3341bfecSMasahiro Yamada# All the preparing..
1591 3341bfecSMasahiro Yamadaprepare: prepare0
1592 349e83f0SChe-liang Chiou
1593 7424145fSMasahiro Yamada# Generate some files
1594 7424145fSMasahiro Yamada# ---------------------------------------------------------------------------
1595 7424145fSMasahiro Yamada
1596 7424145fSMasahiro Yamadadefine filechk_version.h
1597 7424145fSMasahiro Yamada	(echo \#define PLAIN_VERSION \"$(UBOOTRELEASE)\"; \
1598 7424145fSMasahiro Yamada	echo \#define U_BOOT_VERSION \"U-Boot \" PLAIN_VERSION; \
1599 42ffa51fSVagrant Cascadian	echo \#define CC_VERSION_STRING \"$$(LC_ALL=C $(CC) --version | head -n 1)\"; \
1600 42ffa51fSVagrant Cascadian	echo \#define LD_VERSION_STRING \"$$(LC_ALL=C $(LD) --version | head -n 1)\"; )
1601 7424145fSMasahiro Yamadaendef
1602 7424145fSMasahiro Yamada
1603 2d9efa12SAndreas Bießmann# The SOURCE_DATE_EPOCH mechanism requires a date that behaves like GNU date.
1604 2d9efa12SAndreas Bießmann# The BSD date on the other hand behaves different and would produce errors
1605 2d9efa12SAndreas Bießmann# with the misused '-d' switch.  Respect that and search a working date with
1606 2d9efa12SAndreas Bießmann# well known pre- and suffixes for the GNU variant of date.
1607 7424145fSMasahiro Yamadadefine filechk_timestamp.h
1608 70d39f57SChris Packham	(if test -n "$${SOURCE_DATE_EPOCH}"; then \
1609 70d39f57SChris Packham		SOURCE_DATE="@$${SOURCE_DATE_EPOCH}"; \
1610 2d9efa12SAndreas Bießmann		DATE=""; \
1611 2d9efa12SAndreas Bießmann		for date in gdate date.gnu date; do \
1612 2d9efa12SAndreas Bießmann			$${date} -u -d "$${SOURCE_DATE}" >/dev/null 2>&1 && DATE="$${date}"; \
1613 2d9efa12SAndreas Bießmann		done; \
1614 2d9efa12SAndreas Bießmann		if test -n "$${DATE}"; then \
1615 2d9efa12SAndreas Bießmann			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DATE "%b %d %C%y"'; \
1616 2d9efa12SAndreas Bießmann			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TIME "%T"'; \
1617 2d9efa12SAndreas Bießmann			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TZ "%z"'; \
1618 a34b4676SBin Meng			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DMI_DATE "%m/%d/%Y"'; \
1619 e7aa9c29SAndy Shevchenko			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_BUILD_DATE 0x%Y%m%d'; \
1620 2d9efa12SAndreas Bießmann		else \
1621 2d9efa12SAndreas Bießmann			return 42; \
1622 2d9efa12SAndreas Bießmann		fi; \
1623 70d39f57SChris Packham	else \
1624 70d39f57SChris Packham		LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \
1625 70d39f57SChris Packham		LC_ALL=C date +'#define U_BOOT_TIME "%T"'; \
1626 70d39f57SChris Packham		LC_ALL=C date +'#define U_BOOT_TZ "%z"'; \
1627 a34b4676SBin Meng		LC_ALL=C date +'#define U_BOOT_DMI_DATE "%m/%d/%Y"'; \
1628 e7aa9c29SAndy Shevchenko		LC_ALL=C date +'#define U_BOOT_BUILD_DATE 0x%Y%m%d'; \
1629 70d39f57SChris Packham	fi)
1630 7424145fSMasahiro Yamadaendef
1631 7424145fSMasahiro Yamada
1632 f3d8f7ddSRasmus Villemoesdefine filechk_defaultenv.h
1633 f3d8f7ddSRasmus Villemoes	(grep -v '^#' | \
1634 f3d8f7ddSRasmus Villemoes	 grep -v '^$$' | \
1635 f3d8f7ddSRasmus Villemoes	 tr '\n' '\0' | \
1636 f3d8f7ddSRasmus Villemoes	 sed -e 's/\\\x0/\n/' | \
1637 f3d8f7ddSRasmus Villemoes	 xxd -i ; echo ", 0x00" ; )
1638 f3d8f7ddSRasmus Villemoesendef
1639 f3d8f7ddSRasmus Villemoes
1640 2e6b2f6aSMasahiro Yamada$(version_h): include/config/uboot.release FORCE
1641 7424145fSMasahiro Yamada	$(call filechk,version.h)
1642 7424145fSMasahiro Yamada
1643 7424145fSMasahiro Yamada$(timestamp_h): $(srctree)/Makefile FORCE
1644 7424145fSMasahiro Yamada	$(call filechk,timestamp.h)
1645 7424145fSMasahiro Yamada
1646 f3d8f7ddSRasmus Villemoes$(defaultenv_h): $(CONFIG_DEFAULT_ENV_FILE:"%"=%) FORCE
1647 f3d8f7ddSRasmus Villemoes	$(call filechk,defaultenv.h)
1648 f3d8f7ddSRasmus Villemoes
1649 6378008aSMasahiro Yamada# ---------------------------------------------------------------------------
1650 04a34c96SMasahiro Yamadaquiet_cmd_cpp_lds = LDS     $@
1651 de5e5ceaSChris Zankelcmd_cpp_lds = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) \
1652 44093a15SSimon Glass		-D__ASSEMBLY__ -x assembler-with-cpp -std=c99 -P -o $@ $<
1653 6378008aSMasahiro Yamada
1654 04a34c96SMasahiro Yamadau-boot.lds: $(LDSCRIPT) prepare FORCE
1655 395e60cdSMasahiro Yamada	$(call if_changed_dep,cpp_lds)
1656 1aada9cdSWolfgang Denk
1657 982a1199SMasahiro Yamadaspl/u-boot-spl.bin: spl/u-boot-spl
1658 982a1199SMasahiro Yamada	@:
1659 054b3a1eSSimon Glassspl/u-boot-spl: tools prepare \
1660 dd2081a8SM. Vefa Bicakci		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb) \
1661 dd2081a8SM. Vefa Bicakci		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_TPL_OF_PLATDATA),dts/dt.dtb)
1662 c7163083SMasahiro Yamada	$(Q)$(MAKE) obj=spl -f $(srctree)/scripts/Makefile.spl all
1663 5df2ee27SDaniel Schwierzeck
1664 50827a59SIan Campbellspl/sunxi-spl.bin: spl/u-boot-spl
1665 50827a59SIan Campbell	@:
1666 50827a59SIan Campbell
1667 d2fdcc76SMaxime Ripardspl/sunxi-spl-with-ecc.bin: spl/sunxi-spl.bin
1668 d2fdcc76SMaxime Ripard	@:
1669 d2fdcc76SMaxime Ripard
1670 bd7dc388SSimon Glassspl/u-boot-spl.sfp: spl/u-boot-spl
1671 333b7209SMarek Vasut	@:
1672 333b7209SMarek Vasut
1673 08598d6eSNathan Rossispl/boot.bin: spl/u-boot-spl
1674 08598d6eSNathan Rossi	@:
1675 08598d6eSNathan Rossi
1676 3c00a2c8SSimon Glasstpl/u-boot-tpl.bin: tools prepare \
1677 dd2081a8SM. Vefa Bicakci		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb)
1678 51148790SMasahiro Yamada	$(Q)$(MAKE) obj=tpl -f $(srctree)/scripts/Makefile.spl all
1679 3aa29de0SYing Zhang
1680 8d819ab5SIgor GrinbergTAG_SUBDIRS := $(patsubst %,$(srctree)/%,$(u-boot-dirs) include)
1681 a340c325SJean-Christophe PLAGNIOL-VILLARD
1682 857d9ea6SHorst KronstorferFIND := find
1683 857d9ea6SHorst KronstorferFINDFLAGS := -L
1684 857d9ea6SHorst Kronstorfer
1685 f9328639SMarian Balakowicztags ctags:
1686 9e414032SMasahiro Yamada		ctags -w -o ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
1687 e5e4e705SLi Yang						-name '*.[chS]' -print`
1688 74d339beSDu Huanpeng		ln -s ctags tags
1689 7ebf7443Swdenk
1690 7ebf7443Swdenketags:
1691 8d819ab5SIgor Grinberg		etags -a -o etags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
1692 e5e4e705SLi Yang						-name '*.[chS]' -print`
1693 ffda586fSLi Yangcscope:
1694 857d9ea6SHorst Kronstorfer		$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) -name '*.[chS]' -print > \
1695 857d9ea6SHorst Kronstorfer						cscope.files
1696 ffda586fSLi Yang		cscope -b -q -k
1697 7ebf7443Swdenk
1698 ecb1dc89SMike FrysingerSYSTEM_MAP = \
1699 ecb1dc89SMike Frysinger		$(NM) $1 | \
1700 7ebf7443Swdenk		grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
1701 ecb1dc89SMike Frysinger		LC_ALL=C sort
1702 9e414032SMasahiro YamadaSystem.map:	u-boot
1703 bc8bb6ecSMasahiro Yamada		@$(call SYSTEM_MAP,$<) > $@
1704 7ebf7443Swdenk
1705 7ebf7443Swdenk#########################################################################
1706 7ebf7443Swdenk
1707 54799e45SScott Wood# ARM relocations should all be R_ARM_RELATIVE (32-bit) or
1708 54799e45SScott Wood# R_AARCH64_RELATIVE (64-bit).
1709 9e414032SMasahiro Yamadacheckarmreloc: u-boot
1710 54799e45SScott Wood	@RELOC="`$(CROSS_COMPILE)readelf -r -W $< | cut -d ' ' -f 4 | \
1711 54799e45SScott Wood		grep R_A | sort -u`"; \
1712 54799e45SScott Wood	if test "$$RELOC" != "R_ARM_RELATIVE" -a \
1713 54799e45SScott Wood		 "$$RELOC" != "R_AARCH64_RELATIVE"; then \
1714 54799e45SScott Wood		echo "$< contains unexpected relocations: $$RELOC"; \
1715 54799e45SScott Wood		false; \
1716 54799e45SScott Wood	fi
1717 c37980c3SAlbert ARIBAUD
1718 ded84f90SStefan Agnerenvtools: scripts_basic $(version_h) $(timestamp_h)
1719 2d3229beSTom Rini	$(Q)$(MAKE) $(build)=tools/env
1720 0358df42SMike Frysinger
1721 4642e002SMasahiro Yamadatools-only: scripts_basic $(version_h) $(timestamp_h)
1722 4642e002SMasahiro Yamada	$(Q)$(MAKE) $(build)=tools
1723 4642e002SMasahiro Yamada
1724 1ec8b4efSMasahiro Yamadatools-all: export HOST_TOOLS_ALL=y
1725 57332957SSimon Glasstools-all: envtools tools ;
1726 0358df42SMike Frysinger
1727 db5b339cSMasahiro Yamadacross_tools: export CROSS_BUILD_TOOLS=y
1728 db5b339cSMasahiro Yamadacross_tools: tools ;
1729 db5b339cSMasahiro Yamada
1730 4e53a258SWolfgang Denk.PHONY : CHANGELOG
1731 4e53a258SWolfgang DenkCHANGELOG:
1732 b985b5d6SBen Warren	git log --no-merges U-Boot-1_1_5.. | \
1733 b985b5d6SBen Warren	unexpand -a | sed -e 's/\s\s*$$//' > $@
1734 4e53a258SWolfgang Denk
1735 7ebf7443Swdenk#########################################################################
1736 7ebf7443Swdenk
1737 efcf8619SMasahiro Yamada###
1738 efcf8619SMasahiro Yamada# Cleaning is done on three levels.
1739 efcf8619SMasahiro Yamada# make clean     Delete most generated files
1740 efcf8619SMasahiro Yamada#                Leave enough to build external modules
1741 efcf8619SMasahiro Yamada# make mrproper  Delete the current configuration, and all generated files
1742 efcf8619SMasahiro Yamada# make distclean Remove editor backup files, patch leftover files and the like
1743 7ebf7443Swdenk
1744 efcf8619SMasahiro Yamada# Directories & files removed with 'make clean'
1745 48aa812dSMasahiro YamadaCLEAN_DIRS  += $(MODVERDIR) \
1746 48aa812dSMasahiro Yamada	       $(foreach d, spl tpl, $(patsubst %,$d/%, \
1747 51148790SMasahiro Yamada			$(filter-out include, $(shell ls -1 $d 2>/dev/null))))
1748 48aa812dSMasahiro Yamada
1749 d726f225SMasahiro YamadaCLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h \
1750 6f59fb07SCooper Jr., Franklin	       boot* u-boot* MLO* SPL System.map fit-dtb.blob
1751 9f4a4206SMike Frysinger
1752 efcf8619SMasahiro Yamada# Directories & files removed with 'make mrproper'
1753 51148790SMasahiro YamadaMRPROPER_DIRS  += include/config include/generated spl tpl \
1754 598e2d33SMasahiro Yamada		  .tmp_objdiff
1755 51148790SMasahiro YamadaMRPROPER_FILES += .config .config.old include/autoconf.mk* include/config.h \
1756 1249fa8fSHeinrich Schuchardt		  ctags etags tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
1757 1249fa8fSHeinrich Schuchardt		  drivers/video/fonts/*.S
1758 7ebf7443Swdenk
1759 efcf8619SMasahiro Yamada# clean - Delete most, but leave enough to build external modules
1760 efcf8619SMasahiro Yamada#
1761 efcf8619SMasahiro Yamadaclean: rm-dirs  := $(CLEAN_DIRS)
1762 efcf8619SMasahiro Yamadaclean: rm-files := $(CLEAN_FILES)
1763 7ebf7443Swdenk
1764 6bd04bb4SMasahiro Yamadaclean-dirs	:= $(foreach f,$(u-boot-alldirs),$(if $(wildcard $(srctree)/$f/Makefile),$f))
1765 734329f9SAndy Fleming
1766 08fcdd33STom Riniclean-dirs      := $(addprefix _clean_, $(clean-dirs))
1767 7ebf7443Swdenk
1768 efcf8619SMasahiro YamadaPHONY += $(clean-dirs) clean archclean
1769 efcf8619SMasahiro Yamada$(clean-dirs):
1770 efcf8619SMasahiro Yamada	$(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
1771 efcf8619SMasahiro Yamada
1772 efcf8619SMasahiro Yamadaclean: $(clean-dirs)
1773 efcf8619SMasahiro Yamada	$(call cmd,rmdirs)
1774 efcf8619SMasahiro Yamada	$(call cmd,rmfiles)
1775 efcf8619SMasahiro Yamada	@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
1776 efcf8619SMasahiro Yamada		\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
1777 421be6fcSBaruch Siach		-o -name '*.ko.*' -o -name '*.su' \
1778 efcf8619SMasahiro Yamada		-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
1779 e91610daSEugeniu Rosca		-o -name '*.lex.c' -o -name '*.tab.[ch]' \
1780 efcf8619SMasahiro Yamada		-o -name '*.symtypes' -o -name 'modules.order' \
1781 efcf8619SMasahiro Yamada		-o -name modules.builtin -o -name '.tmp_*.o.*' \
1782 0fbdaa0eSBin Meng		-o -name 'dsdt.aml' -o -name 'dsdt.asl.tmp' -o -name 'dsdt.c' \
1783 7f474ef6SHeinrich Schuchardt		-o -name '*.efi' -o -name '*.gcno' -o -name '*.so' \) \
1784 c2d9097aSHeinrich Schuchardt		-type f -print | xargs rm -f
1785 efcf8619SMasahiro Yamada
1786 efcf8619SMasahiro Yamada# mrproper - Delete all generated files, including .config
1787 efcf8619SMasahiro Yamada#
1788 efcf8619SMasahiro Yamadamrproper: rm-dirs  := $(wildcard $(MRPROPER_DIRS))
1789 efcf8619SMasahiro Yamadamrproper: rm-files := $(wildcard $(MRPROPER_FILES))
1790 efcf8619SMasahiro Yamadamrproper-dirs      := $(addprefix _mrproper_,scripts)
1791 efcf8619SMasahiro Yamada
1792 efcf8619SMasahiro YamadaPHONY += $(mrproper-dirs) mrproper archmrproper
1793 efcf8619SMasahiro Yamada$(mrproper-dirs):
1794 efcf8619SMasahiro Yamada	$(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
1795 efcf8619SMasahiro Yamada
1796 48aa812dSMasahiro Yamadamrproper: clean $(mrproper-dirs)
1797 efcf8619SMasahiro Yamada	$(call cmd,rmdirs)
1798 efcf8619SMasahiro Yamada	$(call cmd,rmfiles)
1799 e9c16a80SMasahiro Yamada	@rm -f arch/*/include/asm/arch
1800 efcf8619SMasahiro Yamada
1801 efcf8619SMasahiro Yamada# distclean
1802 efcf8619SMasahiro Yamada#
1803 efcf8619SMasahiro YamadaPHONY += distclean
1804 efcf8619SMasahiro Yamada
1805 433b2f1eSMasahiro Yamadadistclean: mrproper
1806 efcf8619SMasahiro Yamada	@find $(srctree) $(RCS_FIND_IGNORE) \
1807 efcf8619SMasahiro Yamada		\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
1808 efcf8619SMasahiro Yamada		-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
1809 598e2d33SMasahiro Yamada		-o -name '.*.rej' -o -name '*%' -o -name 'core' \
1810 598e2d33SMasahiro Yamada		-o -name '*.pyc' \) \
1811 efcf8619SMasahiro Yamada		-type f -print | xargs rm -f
1812 c1180aa2SRobert P. J. Day	@rm -f boards.cfg CHANGELOG
1813 7ebf7443Swdenk
1814 7ebf7443Swdenkbackup:
1815 4379ac61SMasahiro Yamada	F=`basename $(srctree)` ; cd .. ; \
1816 d6b93714SIlya Yanok	gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
1817 7ebf7443Swdenk
1818 ed1ca528SMasahiro Yamadahelp:
1819 ed1ca528SMasahiro Yamada	@echo  'Cleaning targets:'
1820 48aa812dSMasahiro Yamada	@echo  '  clean		  - Remove most generated files but keep the config'
1821 ed1ca528SMasahiro Yamada	@echo  '  mrproper	  - Remove all generated files + config + various backup files'
1822 ed1ca528SMasahiro Yamada	@echo  '  distclean	  - mrproper + remove editor backup and patch files'
1823 ed1ca528SMasahiro Yamada	@echo  ''
1824 51148790SMasahiro Yamada	@echo  'Configuration targets:'
1825 51148790SMasahiro Yamada	@$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
1826 51148790SMasahiro Yamada	@echo  ''
1827 a3a3f5d5SSimon Glass	@echo  'Test targets:'
1828 a3a3f5d5SSimon Glass	@echo  ''
1829 a3a3f5d5SSimon Glass	@echo  '  check           - Run all automated tests that use sandbox'
1830 499fde5cSSimon Glass	@echo  '  qcheck          - Run quick automated tests that use sandbox'
1831 a3a3f5d5SSimon Glass	@echo  ''
1832 ed1ca528SMasahiro Yamada	@echo  'Other generic targets:'
1833 ed1ca528SMasahiro Yamada	@echo  '  all		  - Build all necessary images depending on configuration'
1834 633cc7aeSSimon Glass	@echo  '  tests		  - Build U-Boot for sandbox and run tests'
1835 ffe29ebcSMasahiro Yamada	@echo  '* u-boot	  - Build the bare u-boot'
1836 ed1ca528SMasahiro Yamada	@echo  '  dir/            - Build all files in dir and below'
1837 ed1ca528SMasahiro Yamada	@echo  '  dir/file.[oisS] - Build specified target only'
1838 ed1ca528SMasahiro Yamada	@echo  '  dir/file.lst    - Build specified mixed source/assembly target only'
1839 ed1ca528SMasahiro Yamada	@echo  '                    (requires a recent binutils and recent build (System.map))'
1840 5fc2f924SIgor Grinberg	@echo  '  tags/ctags	  - Generate ctags file for editors'
1841 5fc2f924SIgor Grinberg	@echo  '  etags		  - Generate etags file for editors'
1842 ed1ca528SMasahiro Yamada	@echo  '  cscope	  - Generate cscope index'
1843 ffe29ebcSMasahiro Yamada	@echo  '  ubootrelease	  - Output the release version string (use with make -s)'
1844 ffe29ebcSMasahiro Yamada	@echo  '  ubootversion	  - Output the version stored in Makefile (use with make -s)'
1845 1bd87630SSimon Glass	@echo  "  cfg		  - Don't build, just create the .cfg files"
1846 84a42069SSimon Glass	@echo  "  envtools	  - Build only the target-side environment tools"
1847 ed1ca528SMasahiro Yamada	@echo  ''
1848 ed1ca528SMasahiro Yamada	@echo  'Static analysers'
1849 ed1ca528SMasahiro Yamada	@echo  '  checkstack      - Generate a list of stack hogs'
1850 8a28caf0SHeinrich Schuchardt	@echo  '  coccicheck      - Execute static code analysis with Coccinelle'
1851 ed1ca528SMasahiro Yamada	@echo  ''
1852 ed1ca528SMasahiro Yamada	@echo  'Documentation targets:'
1853 08fcdd33STom Rini	@$(MAKE) -f $(srctree)/Documentation/Makefile dochelp
1854 ed1ca528SMasahiro Yamada	@echo  ''
1855 ed1ca528SMasahiro Yamada	@echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
1856 ed1ca528SMasahiro Yamada	@echo  '  make V=2   [targets] 2 => give reason for rebuild of target'
1857 ed1ca528SMasahiro Yamada	@echo  '  make O=dir [targets] Locate all output files in "dir", including .config'
1858 ed1ca528SMasahiro Yamada	@echo  '  make C=1   [targets] Check all c source with $$CHECK (sparse by default)'
1859 ed1ca528SMasahiro Yamada	@echo  '  make C=2   [targets] Force check of all c source with $$CHECK'
1860 ed1ca528SMasahiro Yamada	@echo  '  make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
1861 ed1ca528SMasahiro Yamada	@echo  '  make W=n   [targets] Enable extra gcc checks, n=1,2,3 where'
1862 ed1ca528SMasahiro Yamada	@echo  '		1: warnings which may be relevant and do not occur too often'
1863 ed1ca528SMasahiro Yamada	@echo  '		2: warnings which occur quite often but may still be relevant'
1864 ed1ca528SMasahiro Yamada	@echo  '		3: more obscure warnings, can most likely be ignored'
1865 ed1ca528SMasahiro Yamada	@echo  '		Multiple levels can be combined with W=12 or W=123'
1866 ed1ca528SMasahiro Yamada	@echo  ''
1867 ed1ca528SMasahiro Yamada	@echo  'Execute "make" or "make all" to build all targets marked with [*] '
1868 ed1ca528SMasahiro Yamada	@echo  'For further info see the ./README file'
1869 ed1ca528SMasahiro Yamada
1870 a3a3f5d5SSimon Glasstests check:
1871 633cc7aeSSimon Glass	$(srctree)/test/run
1872 8fac9c7bSMasahiro Yamada
1873 499fde5cSSimon Glassqcheck:
1874 499fde5cSSimon Glass	$(srctree)/test/run quick
1875 499fde5cSSimon Glass
1876 8fac9c7bSMasahiro Yamada# Documentation targets
1877 8fac9c7bSMasahiro Yamada# ---------------------------------------------------------------------------
1878 78a88f79SMario SixDOC_TARGETS := xmldocs latexdocs pdfdocs htmldocs epubdocs cleandocs \
1879 78a88f79SMario Six	       linkcheckdocs dochelp refcheckdocs
1880 78a88f79SMario SixPHONY += $(DOC_TARGETS)
1881 78a88f79SMario Six$(DOC_TARGETS): scripts_basic FORCE
1882 78a88f79SMario Six	$(Q)$(MAKE) $(build)=Documentation $@
1883 8fac9c7bSMasahiro Yamada
1884 433b2f1eSMasahiro Yamadaendif #ifeq ($(config-targets),1)
1885 433b2f1eSMasahiro Yamadaendif #ifeq ($(mixed-targets),1)
1886 433b2f1eSMasahiro Yamada
1887 ed1ca528SMasahiro YamadaPHONY += checkstack ubootrelease ubootversion
1888 ed1ca528SMasahiro Yamada
1889 ed1ca528SMasahiro Yamadacheckstack:
1890 ed1ca528SMasahiro Yamada	$(OBJDUMP) -d u-boot $$(find . -name u-boot-spl) | \
1891 ed1ca528SMasahiro Yamada	$(PERL) $(src)/scripts/checkstack.pl $(ARCH)
1892 ed1ca528SMasahiro Yamada
1893 ed1ca528SMasahiro Yamadaubootrelease:
1894 ed1ca528SMasahiro Yamada	@echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
1895 ed1ca528SMasahiro Yamada
1896 ed1ca528SMasahiro Yamadaubootversion:
1897 ed1ca528SMasahiro Yamada	@echo $(UBOOTVERSION)
1898 ed1ca528SMasahiro Yamada
1899 886d86e8SMasahiro Yamada# Single targets
1900 886d86e8SMasahiro Yamada# ---------------------------------------------------------------------------
1901 886d86e8SMasahiro Yamada# Single targets are compatible with:
1902 886d86e8SMasahiro Yamada# - build with mixed source and output
1903 886d86e8SMasahiro Yamada# - build with separate output dir 'make O=...'
1904 886d86e8SMasahiro Yamada# - external modules
1905 886d86e8SMasahiro Yamada#
1906 886d86e8SMasahiro Yamada#  target-dir => where to store outputfile
1907 886d86e8SMasahiro Yamada#  build-dir  => directory in kernel source tree to use
1908 886d86e8SMasahiro Yamada
1909 886d86e8SMasahiro Yamadaifeq ($(KBUILD_EXTMOD),)
1910 886d86e8SMasahiro Yamada        build-dir  = $(patsubst %/,%,$(dir $@))
1911 886d86e8SMasahiro Yamada        target-dir = $(dir $@)
1912 886d86e8SMasahiro Yamadaelse
1913 886d86e8SMasahiro Yamada        zap-slash=$(filter-out .,$(patsubst %/,%,$(dir $@)))
1914 886d86e8SMasahiro Yamada        build-dir  = $(KBUILD_EXTMOD)$(if $(zap-slash),/$(zap-slash))
1915 886d86e8SMasahiro Yamada        target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))
1916 886d86e8SMasahiro Yamadaendif
1917 886d86e8SMasahiro Yamada
1918 886d86e8SMasahiro Yamada%.s: %.c prepare scripts FORCE
1919 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1920 886d86e8SMasahiro Yamada%.i: %.c prepare scripts FORCE
1921 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1922 886d86e8SMasahiro Yamada%.o: %.c prepare scripts FORCE
1923 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1924 886d86e8SMasahiro Yamada%.lst: %.c prepare scripts FORCE
1925 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1926 886d86e8SMasahiro Yamada%.s: %.S prepare scripts FORCE
1927 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1928 886d86e8SMasahiro Yamada%.o: %.S prepare scripts FORCE
1929 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1930 886d86e8SMasahiro Yamada%.symtypes: %.c prepare scripts FORCE
1931 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1932 886d86e8SMasahiro Yamada
1933 886d86e8SMasahiro Yamada# Modules
1934 886d86e8SMasahiro Yamada/: prepare scripts FORCE
1935 886d86e8SMasahiro Yamada	$(cmd_crmodverdir)
1936 886d86e8SMasahiro Yamada	$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1937 886d86e8SMasahiro Yamada	$(build)=$(build-dir)
1938 886d86e8SMasahiro Yamada%/: prepare scripts FORCE
1939 886d86e8SMasahiro Yamada	$(cmd_crmodverdir)
1940 886d86e8SMasahiro Yamada	$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1941 886d86e8SMasahiro Yamada	$(build)=$(build-dir)
1942 886d86e8SMasahiro Yamada%.ko: prepare scripts FORCE
1943 886d86e8SMasahiro Yamada	$(cmd_crmodverdir)
1944 886d86e8SMasahiro Yamada	$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1)   \
1945 886d86e8SMasahiro Yamada	$(build)=$(build-dir) $(@:.ko=.o)
1946 886d86e8SMasahiro Yamada	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
1947 886d86e8SMasahiro Yamada
1948 8a28caf0SHeinrich Schuchardt# Consistency checks
1949 8a28caf0SHeinrich Schuchardt# ---------------------------------------------------------------------------
1950 8a28caf0SHeinrich Schuchardt
1951 8a28caf0SHeinrich SchuchardtPHONY += coccicheck
1952 8a28caf0SHeinrich Schuchardt
1953 8a28caf0SHeinrich Schuchardtcoccicheck:
1954 8a28caf0SHeinrich Schuchardt	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
1955 8a28caf0SHeinrich Schuchardt
1956 886d86e8SMasahiro Yamada# FIXME Should go into a make.lib or something
1957 886d86e8SMasahiro Yamada# ===========================================================================
1958 886d86e8SMasahiro Yamada
1959 efcf8619SMasahiro Yamadaquiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN   $(wildcard $(rm-dirs)))
1960 efcf8619SMasahiro Yamada      cmd_rmdirs = rm -rf $(rm-dirs)
1961 efcf8619SMasahiro Yamada
1962 efcf8619SMasahiro Yamadaquiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
1963 efcf8619SMasahiro Yamada      cmd_rmfiles = rm -f $(rm-files)
1964 efcf8619SMasahiro Yamada
1965 f9c235fdSMasahiro Yamada# read all saved command lines
1966 f9c235fdSMasahiro Yamada
1967 f9c235fdSMasahiro Yamadatargets := $(wildcard $(sort $(targets)))
1968 f9c235fdSMasahiro Yamadacmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
1969 f9c235fdSMasahiro Yamada
1970 f9c235fdSMasahiro Yamadaifneq ($(cmd_files),)
1971 f9c235fdSMasahiro Yamada  $(cmd_files): ;	# Do not try to update included dependency files
1972 f9c235fdSMasahiro Yamada  include $(cmd_files)
1973 f9c235fdSMasahiro Yamadaendif
1974 f9c235fdSMasahiro Yamada
1975 9e414032SMasahiro Yamadaendif	# skip-makefile
1976 9e414032SMasahiro Yamada
1977 9e414032SMasahiro YamadaPHONY += FORCE
1978 9e414032SMasahiro YamadaFORCE:
1979 9e414032SMasahiro Yamada
1980 9e414032SMasahiro Yamada# Declare the contents of the .PHONY variable as phony.  We keep that
1981 9e414032SMasahiro Yamada# information in a variable so we can use it in if_changed and friends.
1982 9e414032SMasahiro Yamada.PHONY: $(PHONY)
1983