xref: /openbmc/u-boot/Makefile (revision 6494d708bfc630ac0585d5a81707442ebf578eac)
1 7ebf7443Swdenk#
2 eca3aeb3SWolfgang Denk# (C) Copyright 2000-2013
3 7ebf7443Swdenk# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4 7ebf7443Swdenk#
5 eca3aeb3SWolfgang Denk# SPDX-License-Identifier:	GPL-2.0+
6 7ebf7443Swdenk#
7 7ebf7443Swdenk
8 d19ad726STom RiniVERSION = 2014
9 0a8e823aSTom RiniPATCHLEVEL = 04
10 211e4754SWolfgang DenkSUBLEVEL =
11 0a8e823aSTom RiniEXTRAVERSION = -rc1
12 5f30f3beSMasahiro YamadaNAME =
13 ae6d1056SWolfgang Denk
14 6825a95bSMasahiro Yamada# *DOCUMENTATION*
15 6825a95bSMasahiro Yamada# To see a list of typical targets execute "make help"
16 6825a95bSMasahiro Yamada# More info can be located in ./README
17 6825a95bSMasahiro Yamada# Comments in this file are targeted only to the developer, do not
18 6825a95bSMasahiro Yamada# expect to learn how to build the kernel reading this file.
19 6825a95bSMasahiro Yamada
20 6825a95bSMasahiro Yamada# Do not:
21 6825a95bSMasahiro Yamada# o  use make's built-in rules and variables
22 6825a95bSMasahiro Yamada#    (this increases performance and avoids hard-to-debug behaviour);
23 6825a95bSMasahiro Yamada# o  print "Entering directory ...";
24 6825a95bSMasahiro YamadaMAKEFLAGS += -rR --no-print-directory
25 6825a95bSMasahiro Yamada
26 6825a95bSMasahiro Yamada# Avoid funny character set dependencies
27 6825a95bSMasahiro Yamadaunexport LC_ALL
28 6825a95bSMasahiro YamadaLC_COLLATE=C
29 6825a95bSMasahiro YamadaLC_NUMERIC=C
30 6825a95bSMasahiro Yamadaexport LC_COLLATE LC_NUMERIC
31 6825a95bSMasahiro Yamada
32 6825a95bSMasahiro Yamada# We are using a recursive build, so we need to do a little thinking
33 6825a95bSMasahiro Yamada# to get the ordering right.
34 6825a95bSMasahiro Yamada#
35 6825a95bSMasahiro Yamada# Most importantly: sub-Makefiles should only ever modify files in
36 6825a95bSMasahiro Yamada# their own directory. If in some directory we have a dependency on
37 6825a95bSMasahiro Yamada# a file in another dir (which doesn't happen often, but it's often
38 6825a95bSMasahiro Yamada# unavoidable when linking the built-in.o targets which finally
39 6825a95bSMasahiro Yamada# turn into vmlinux), we will call a sub make in that other dir, and
40 6825a95bSMasahiro Yamada# after that we are sure that everything which is in that other dir
41 6825a95bSMasahiro Yamada# is now up to date.
42 6825a95bSMasahiro Yamada#
43 6825a95bSMasahiro Yamada# The only cases where we need to modify files which have global
44 6825a95bSMasahiro Yamada# effects are thus separated out and done before the recursive
45 6825a95bSMasahiro Yamada# descending is started. They are now explicitly listed as the
46 6825a95bSMasahiro Yamada# prepare rule.
47 6825a95bSMasahiro Yamada
48 6825a95bSMasahiro Yamada# To put more focus on warnings, be less verbose as default
49 6825a95bSMasahiro Yamada# Use 'make V=1' to see the full commands
50 6825a95bSMasahiro Yamada
51 6825a95bSMasahiro Yamadaifeq ("$(origin V)", "command line")
52 6825a95bSMasahiro Yamada  KBUILD_VERBOSE = $(V)
53 7ebf7443Swdenkendif
54 6825a95bSMasahiro Yamadaifndef KBUILD_VERBOSE
55 6825a95bSMasahiro Yamada  KBUILD_VERBOSE = 0
56 6825a95bSMasahiro Yamadaendif
57 6825a95bSMasahiro Yamada
58 6825a95bSMasahiro Yamada# Call a source code checker (by default, "sparse") as part of the
59 6825a95bSMasahiro Yamada# C compilation.
60 6825a95bSMasahiro Yamada#
61 6825a95bSMasahiro Yamada# Use 'make C=1' to enable checking of only re-compiled files.
62 6825a95bSMasahiro Yamada# Use 'make C=2' to enable checking of *all* source files, regardless
63 6825a95bSMasahiro Yamada# of whether they are re-compiled or not.
64 6825a95bSMasahiro Yamada#
65 6825a95bSMasahiro Yamada# See the file "Documentation/sparse.txt" for more details, including
66 6825a95bSMasahiro Yamada# where to get the "sparse" utility.
67 6825a95bSMasahiro Yamada
68 6825a95bSMasahiro Yamadaifeq ("$(origin C)", "command line")
69 6825a95bSMasahiro Yamada  KBUILD_CHECKSRC = $(C)
70 6825a95bSMasahiro Yamadaendif
71 6825a95bSMasahiro Yamadaifndef KBUILD_CHECKSRC
72 6825a95bSMasahiro Yamada  KBUILD_CHECKSRC = 0
73 6825a95bSMasahiro Yamadaendif
74 6825a95bSMasahiro Yamada
75 6825a95bSMasahiro Yamada# Use make M=dir to specify directory of external module to build
76 6825a95bSMasahiro Yamada# Old syntax make ... SUBDIRS=$PWD is still supported
77 6825a95bSMasahiro Yamada# Setting the environment variable KBUILD_EXTMOD take precedence
78 6825a95bSMasahiro Yamadaifdef SUBDIRS
79 6825a95bSMasahiro Yamada  KBUILD_EXTMOD ?= $(SUBDIRS)
80 6825a95bSMasahiro Yamadaendif
81 6825a95bSMasahiro Yamada
82 6825a95bSMasahiro Yamadaifeq ("$(origin M)", "command line")
83 6825a95bSMasahiro Yamada  KBUILD_EXTMOD := $(M)
84 6825a95bSMasahiro Yamadaendif
85 6825a95bSMasahiro Yamada
86 9e414032SMasahiro Yamada# kbuild supports saving output files in a separate directory.
87 9e414032SMasahiro Yamada# To locate output files in a separate directory two syntaxes are supported.
88 9e414032SMasahiro Yamada# In both cases the working directory must be the root of the kernel src.
89 9e414032SMasahiro Yamada# 1) O=
90 9e414032SMasahiro Yamada# Use "make O=dir/to/store/output/files/"
91 f9328639SMarian Balakowicz#
92 9e414032SMasahiro Yamada# 2) Set KBUILD_OUTPUT
93 9e414032SMasahiro Yamada# Set the environment variable KBUILD_OUTPUT to point to the directory
94 9e414032SMasahiro Yamada# where the output files shall be placed.
95 9e414032SMasahiro Yamada# export KBUILD_OUTPUT=dir/to/store/output/files/
96 9e414032SMasahiro Yamada# make
97 f9328639SMarian Balakowicz#
98 9e414032SMasahiro Yamada# The O= assignment takes precedence over the KBUILD_OUTPUT environment
99 9e414032SMasahiro Yamada# variable.
100 7ebf7443Swdenk
101 9e414032SMasahiro Yamada
102 9e414032SMasahiro Yamada# KBUILD_SRC is set on invocation of make in OBJ directory
103 9e414032SMasahiro Yamada# KBUILD_SRC is not intended to be used by the regular user (for now)
104 9e414032SMasahiro Yamadaifeq ($(KBUILD_SRC),)
105 9e414032SMasahiro Yamada
106 9e414032SMasahiro Yamada# OK, Make called in directory where kernel src resides
107 9e414032SMasahiro Yamada# Do we want to locate output files in a separate directory?
108 f9328639SMarian Balakowiczifeq ("$(origin O)", "command line")
109 9e414032SMasahiro Yamada  KBUILD_OUTPUT := $(O)
110 f9328639SMarian Balakowiczendif
111 7ebf7443Swdenk
112 9e414032SMasahiro Yamadaifeq ("$(origin W)", "command line")
113 9e414032SMasahiro Yamada  export KBUILD_ENABLE_EXTRA_GCC_CHECKS := $(W)
114 9e414032SMasahiro Yamadaendif
115 9e414032SMasahiro Yamada
116 9e414032SMasahiro Yamada# That's our default target when none is given on the command line
117 9e414032SMasahiro YamadaPHONY := _all
118 9e414032SMasahiro Yamada_all:
119 9e414032SMasahiro Yamada
120 9e414032SMasahiro Yamada# Cancel implicit rules on top Makefile
121 9e414032SMasahiro Yamada$(CURDIR)/Makefile Makefile: ;
122 9e414032SMasahiro Yamada
123 9e414032SMasahiro Yamadaifneq ($(KBUILD_OUTPUT),)
124 9e414032SMasahiro Yamada# Invoke a second make in the output directory, passing relevant variables
125 9e414032SMasahiro Yamada# check that the output directory actually exists
126 9e414032SMasahiro Yamadasaved-output := $(KBUILD_OUTPUT)
127 9e414032SMasahiro YamadaKBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd)
128 9e414032SMasahiro Yamada$(if $(KBUILD_OUTPUT),, \
129 9e414032SMasahiro Yamada     $(error output directory "$(saved-output)" does not exist))
130 9e414032SMasahiro Yamada
131 9e414032SMasahiro YamadaPHONY += $(MAKECMDGOALS) sub-make
132 9e414032SMasahiro Yamada
133 9e414032SMasahiro Yamada$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
134 9e414032SMasahiro Yamada	@:
135 9e414032SMasahiro Yamada
136 9e414032SMasahiro Yamadasub-make: FORCE
137 9e414032SMasahiro Yamada	$(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
138 9e414032SMasahiro Yamada	KBUILD_SRC=$(CURDIR) \
139 9e414032SMasahiro Yamada	KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile \
140 9e414032SMasahiro Yamada	$(filter-out _all sub-make,$(MAKECMDGOALS))
141 9e414032SMasahiro Yamada
142 9e414032SMasahiro Yamada# Leave processing to above invocation of make
143 9e414032SMasahiro Yamadaskip-makefile := 1
144 9e414032SMasahiro Yamadaendif # ifneq ($(KBUILD_OUTPUT),)
145 9e414032SMasahiro Yamadaendif # ifeq ($(KBUILD_SRC),)
146 9e414032SMasahiro Yamada
147 9e414032SMasahiro Yamada# We process the rest of the Makefile if this is the final invocation of make
148 9e414032SMasahiro Yamadaifeq ($(skip-makefile),)
149 9e414032SMasahiro Yamada
150 6825a95bSMasahiro Yamada# If building an external module we do not care about the all: rule
151 6825a95bSMasahiro Yamada# but instead _all depend on modules
152 9e414032SMasahiro YamadaPHONY += all
153 6825a95bSMasahiro Yamadaifeq ($(KBUILD_EXTMOD),)
154 9e414032SMasahiro Yamada_all: all
155 6825a95bSMasahiro Yamadaelse
156 6825a95bSMasahiro Yamada_all: modules
157 6825a95bSMasahiro Yamadaendif
158 9e414032SMasahiro Yamada
159 9e414032SMasahiro Yamadasrctree		:= $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR))
160 9e414032SMasahiro Yamadaobjtree		:= $(CURDIR)
161 9e414032SMasahiro Yamadasrc		:= $(srctree)
162 9e414032SMasahiro Yamadaobj		:= $(objtree)
163 9e414032SMasahiro Yamada
164 9e414032SMasahiro YamadaVPATH		:= $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
165 9e414032SMasahiro Yamada
166 9e414032SMasahiro Yamadaexport srctree objtree VPATH
167 9e414032SMasahiro Yamada
168 9e414032SMasahiro YamadaOBJTREE		:= $(objtree)
169 c8f9c302SDaniel SchwierzeckSPLTREE		:= $(OBJTREE)/spl
170 3aa29de0SYing ZhangTPLTREE		:= $(OBJTREE)/tpl
171 9e414032SMasahiro YamadaSRCTREE		:= $(srctree)
172 f9328639SMarian BalakowiczTOPDIR		:= $(SRCTREE)
173 9e414032SMasahiro Yamadaexport	TOPDIR SRCTREE OBJTREE SPLTREE TPLTREE
174 f9328639SMarian Balakowicz
175 f9328639SMarian BalakowiczMKCONFIG	:= $(SRCTREE)/mkconfig
176 f9328639SMarian Balakowiczexport MKCONFIG
177 f9328639SMarian Balakowicz
178 5013c09fSWolfgang Denk# Make sure CDPATH settings don't interfere
179 5013c09fSWolfgang Denkunexport CDPATH
180 5013c09fSWolfgang Denk
181 f9328639SMarian Balakowicz#########################################################################
182 f9328639SMarian Balakowicz
183 7ebf7443SwdenkHOSTARCH := $(shell uname -m | \
184 7ebf7443Swdenk	sed -e s/i.86/x86/ \
185 7ebf7443Swdenk	    -e s/sun4u/sparc64/ \
186 7ebf7443Swdenk	    -e s/arm.*/arm/ \
187 7ebf7443Swdenk	    -e s/sa110/arm/ \
188 7ebf7443Swdenk	    -e s/ppc64/powerpc/ \
189 7ebf7443Swdenk	    -e s/ppc/powerpc/ \
190 7ebf7443Swdenk	    -e s/macppc/powerpc/\
191 7ebf7443Swdenk	    -e s/sh.*/sh/)
192 7ebf7443Swdenk
193 7ebf7443SwdenkHOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
194 7ebf7443Swdenk	    sed -e 's/\(cygwin\).*/cygwin/')
195 7ebf7443Swdenk
196 7ebf7443Swdenkexport	HOSTARCH HOSTOS
197 7ebf7443Swdenk
198 7ebf7443Swdenk# Deal with colliding definitions from tcsh etc.
199 7ebf7443SwdenkVENDOR=
200 7ebf7443Swdenk
201 7ebf7443Swdenk#########################################################################
202 f9328639SMarian Balakowicz
203 1ea6bcd8SMike Frysinger# set default to nothing for native builds
204 a5284efdSWolfgang Denkifeq ($(HOSTARCH),$(ARCH))
205 1ea6bcd8SMike FrysingerCROSS_COMPILE ?=
206 7ebf7443Swdenkendif
207 7ebf7443Swdenk
208 f6322eb7SMasahiro Yamada# SHELL used by kbuild
209 f6322eb7SMasahiro YamadaCONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
210 f6322eb7SMasahiro Yamada	  else if [ -x /bin/bash ]; then echo /bin/bash; \
211 f6322eb7SMasahiro Yamada	  else echo sh; fi ; fi)
212 f6322eb7SMasahiro Yamada
213 f6322eb7SMasahiro YamadaHOSTCC       = gcc
214 f6322eb7SMasahiro YamadaHOSTCFLAGS   = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
215 f6322eb7SMasahiro Yamada
216 f6322eb7SMasahiro Yamadaifeq ($(HOSTOS),cygwin)
217 f6322eb7SMasahiro YamadaHOSTCFLAGS	+= -ansi
218 f6322eb7SMasahiro Yamadaendif
219 f6322eb7SMasahiro Yamada
220 f6322eb7SMasahiro Yamada# Mac OS X / Darwin's C preprocessor is Apple specific.  It
221 f6322eb7SMasahiro Yamada# generates numerous errors and warnings.  We want to bypass it
222 f6322eb7SMasahiro Yamada# and use GNU C's cpp.	To do this we pass the -traditional-cpp
223 f6322eb7SMasahiro Yamada# option to the compiler.  Note that the -traditional-cpp flag
224 f6322eb7SMasahiro Yamada# DOES NOT have the same semantics as GNU C's flag, all it does
225 f6322eb7SMasahiro Yamada# is invoke the GNU preprocessor in stock ANSI/ISO C fashion.
226 f6322eb7SMasahiro Yamada#
227 f6322eb7SMasahiro Yamada# Apple's linker is similar, thanks to the new 2 stage linking
228 f6322eb7SMasahiro Yamada# multiple symbol definitions are treated as errors, hence the
229 f6322eb7SMasahiro Yamada# -multiply_defined suppress option to turn off this error.
230 f6322eb7SMasahiro Yamada#
231 f6322eb7SMasahiro Yamadaifeq ($(HOSTOS),darwin)
232 f6322eb7SMasahiro Yamada# get major and minor product version (e.g. '10' and '6' for Snow Leopard)
233 f6322eb7SMasahiro YamadaDARWIN_MAJOR_VERSION	= $(shell sw_vers -productVersion | cut -f 1 -d '.')
234 f6322eb7SMasahiro YamadaDARWIN_MINOR_VERSION	= $(shell sw_vers -productVersion | cut -f 2 -d '.')
235 f6322eb7SMasahiro Yamada
236 f6322eb7SMasahiro Yamadaos_x_before	= $(shell if [ $(DARWIN_MAJOR_VERSION) -le $(1) -a \
237 f6322eb7SMasahiro Yamada	$(DARWIN_MINOR_VERSION) -le $(2) ] ; then echo "$(3)"; else echo "$(4)"; fi ;)
238 f6322eb7SMasahiro Yamada
239 f6322eb7SMasahiro Yamada# Snow Leopards build environment has no longer restrictions as described above
240 f6322eb7SMasahiro YamadaHOSTCC       = $(call os_x_before, 10, 5, "cc", "gcc")
241 f6322eb7SMasahiro YamadaHOSTCFLAGS  += $(call os_x_before, 10, 4, "-traditional-cpp")
242 f6322eb7SMasahiro YamadaHOSTLDFLAGS += $(call os_x_before, 10, 5, "-multiply_defined suppress")
243 f6322eb7SMasahiro Yamadaendif
244 f6322eb7SMasahiro Yamada
245 6825a95bSMasahiro Yamada# Decide whether to build built-in, modular, or both.
246 6825a95bSMasahiro Yamada# Normally, just do built-in.
247 6825a95bSMasahiro Yamada
248 6825a95bSMasahiro YamadaKBUILD_MODULES :=
249 6825a95bSMasahiro YamadaKBUILD_BUILTIN := 1
250 6825a95bSMasahiro Yamada
251 6825a95bSMasahiro Yamada#	If we have only "make modules", don't compile built-in objects.
252 6825a95bSMasahiro Yamada#	When we're building modules with modversions, we need to consider
253 6825a95bSMasahiro Yamada#	the built-in objects during the descend as well, in order to
254 6825a95bSMasahiro Yamada#	make sure the checksums are up to date before we record them.
255 6825a95bSMasahiro Yamada
256 6825a95bSMasahiro Yamadaifeq ($(MAKECMDGOALS),modules)
257 6825a95bSMasahiro Yamada  KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
258 6825a95bSMasahiro Yamadaendif
259 6825a95bSMasahiro Yamada
260 6825a95bSMasahiro Yamada#	If we have "make <whatever> modules", compile modules
261 6825a95bSMasahiro Yamada#	in addition to whatever we do anyway.
262 6825a95bSMasahiro Yamada#	Just "make" or "make all" shall build modules as well
263 6825a95bSMasahiro Yamada
264 6825a95bSMasahiro Yamada# U-Boot does not need modules
265 6825a95bSMasahiro Yamada#ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
266 6825a95bSMasahiro Yamada#  KBUILD_MODULES := 1
267 6825a95bSMasahiro Yamada#endif
268 6825a95bSMasahiro Yamada
269 6825a95bSMasahiro Yamada#ifeq ($(MAKECMDGOALS),)
270 6825a95bSMasahiro Yamada#  KBUILD_MODULES := 1
271 6825a95bSMasahiro Yamada#endif
272 6825a95bSMasahiro Yamada
273 6825a95bSMasahiro Yamadaexport KBUILD_MODULES KBUILD_BUILTIN
274 6825a95bSMasahiro Yamadaexport KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
275 6825a95bSMasahiro Yamada
276 6825a95bSMasahiro Yamada# Beautify output
277 6825a95bSMasahiro Yamada# ---------------------------------------------------------------------------
278 6825a95bSMasahiro Yamada#
279 6825a95bSMasahiro Yamada# Normally, we echo the whole command before executing it. By making
280 6825a95bSMasahiro Yamada# that echo $($(quiet)$(cmd)), we now have the possibility to set
281 6825a95bSMasahiro Yamada# $(quiet) to choose other forms of output instead, e.g.
282 6825a95bSMasahiro Yamada#
283 6825a95bSMasahiro Yamada#         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
284 6825a95bSMasahiro Yamada#         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
285 6825a95bSMasahiro Yamada#
286 6825a95bSMasahiro Yamada# If $(quiet) is empty, the whole command will be printed.
287 6825a95bSMasahiro Yamada# If it is set to "quiet_", only the short version will be printed.
288 6825a95bSMasahiro Yamada# If it is set to "silent_", nothing will be printed at all, since
289 6825a95bSMasahiro Yamada# the variable $(silent_cmd_cc_o_c) doesn't exist.
290 6825a95bSMasahiro Yamada#
291 6825a95bSMasahiro Yamada# A simple variant is to prefix commands with $(Q) - that's useful
292 6825a95bSMasahiro Yamada# for commands that shall be hidden in non-verbose mode.
293 6825a95bSMasahiro Yamada#
294 6825a95bSMasahiro Yamada#	$(Q)ln $@ :<
295 6825a95bSMasahiro Yamada#
296 6825a95bSMasahiro Yamada# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
297 6825a95bSMasahiro Yamada# If KBUILD_VERBOSE equals 1 then the above command is displayed.
298 6825a95bSMasahiro Yamada
299 6825a95bSMasahiro Yamadaifeq ($(KBUILD_VERBOSE),1)
300 6825a95bSMasahiro Yamada  quiet =
301 6825a95bSMasahiro Yamada  Q =
302 6825a95bSMasahiro Yamadaelse
303 6825a95bSMasahiro Yamada  quiet=quiet_
304 6825a95bSMasahiro Yamada  Q = @
305 6825a95bSMasahiro Yamadaendif
306 6825a95bSMasahiro Yamada
307 6825a95bSMasahiro Yamada# If the user is running make -s (silent mode), suppress echoing of
308 6825a95bSMasahiro Yamada# commands
309 6825a95bSMasahiro Yamada
310 6825a95bSMasahiro Yamadaifneq ($(filter s% -s%,$(MAKEFLAGS)),)
311 6825a95bSMasahiro Yamada  quiet=silent_
312 6825a95bSMasahiro Yamadaendif
313 6825a95bSMasahiro Yamada
314 6825a95bSMasahiro Yamadaexport quiet Q KBUILD_VERBOSE
315 6825a95bSMasahiro Yamada
316 6825a95bSMasahiro Yamada
317 9e414032SMasahiro Yamada# Look for make include files relative to root of kernel src
318 9e414032SMasahiro YamadaMAKEFLAGS += --include-dir=$(srctree)
319 9e414032SMasahiro Yamada
320 bf4b3de1SMasahiro Yamada# We need some generic definitions (do not try to remake the file).
321 bf4b3de1SMasahiro Yamada$(srctree)/scripts/Kbuild.include: ;
322 bf4b3de1SMasahiro Yamadainclude $(srctree)/scripts/Kbuild.include
323 bf4b3de1SMasahiro Yamada
324 f6322eb7SMasahiro Yamada# Make variables (CC, etc...)
325 f6322eb7SMasahiro Yamada
326 f6322eb7SMasahiro YamadaAS		= $(CROSS_COMPILE)as
327 f6322eb7SMasahiro Yamada# Always use GNU ld
328 f6322eb7SMasahiro Yamadaifneq ($(shell $(CROSS_COMPILE)ld.bfd -v 2> /dev/null),)
329 f6322eb7SMasahiro YamadaLD		= $(CROSS_COMPILE)ld.bfd
330 f6322eb7SMasahiro Yamadaelse
331 f6322eb7SMasahiro YamadaLD		= $(CROSS_COMPILE)ld
332 f6322eb7SMasahiro Yamadaendif
333 f6322eb7SMasahiro YamadaCC		= $(CROSS_COMPILE)gcc
334 f6322eb7SMasahiro YamadaCPP		= $(CC) -E
335 f6322eb7SMasahiro YamadaAR		= $(CROSS_COMPILE)ar
336 f6322eb7SMasahiro YamadaNM		= $(CROSS_COMPILE)nm
337 f6322eb7SMasahiro YamadaLDR		= $(CROSS_COMPILE)ldr
338 f6322eb7SMasahiro YamadaSTRIP		= $(CROSS_COMPILE)strip
339 f6322eb7SMasahiro YamadaOBJCOPY		= $(CROSS_COMPILE)objcopy
340 f6322eb7SMasahiro YamadaOBJDUMP		= $(CROSS_COMPILE)objdump
341 f6322eb7SMasahiro YamadaAWK		= awk
342 f6322eb7SMasahiro YamadaRANLIB		= $(CROSS_COMPILE)RANLIB
343 f6322eb7SMasahiro YamadaDTC		= dtc
344 f6322eb7SMasahiro YamadaCHECK		= sparse
345 f6322eb7SMasahiro Yamada
346 f6322eb7SMasahiro YamadaCHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
347 f6322eb7SMasahiro Yamada		  -Wbitwise -Wno-return-void -D__CHECK_ENDIAN__ $(CF)
348 f6322eb7SMasahiro Yamada
349 2b3c9d3dSMasahiro YamadaKBUILD_CPPFLAGS := -D__KERNEL__
350 2b3c9d3dSMasahiro Yamada
351 2b3c9d3dSMasahiro YamadaKBUILD_CFLAGS   := -Wall -Wstrict-prototypes \
352 2b3c9d3dSMasahiro Yamada		   -Wno-format-security \
353 2b3c9d3dSMasahiro Yamada		   -fno-builtin -ffreestanding
354 2b3c9d3dSMasahiro YamadaKBUILD_AFLAGS   := -D__ASSEMBLY__
355 2b3c9d3dSMasahiro Yamada
356 7424145fSMasahiro Yamada# Read UBOOTRELEASE from include/config/uboot.release (if it exists)
357 7424145fSMasahiro YamadaUBOOTRELEASE = $(shell cat include/config/uboot.release 2> /dev/null)
358 7424145fSMasahiro YamadaUBOOTVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
359 5f30f3beSMasahiro Yamada
360 7424145fSMasahiro Yamadaexport VERSION PATCHLEVEL SUBLEVEL UBOOTRELEASE UBOOTVERSION
361 433b2f1eSMasahiro Yamadaexport ARCH CPU BOARD VENDOR SOC
362 f6322eb7SMasahiro Yamadaexport CONFIG_SHELL HOSTCC HOSTCFLAGS HOSTLDFLAGS CROSS_COMPILE AS LD CC
363 f6322eb7SMasahiro Yamadaexport CPP AR NM LDR STRIP OBJCOPY OBJDUMP
364 f6322eb7SMasahiro Yamadaexport MAKE AWK
365 f6322eb7SMasahiro Yamadaexport DTC CHECK CHECKFLAGS
366 f6322eb7SMasahiro Yamada
367 fea1ca8eSMasahiro Yamadaexport KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE
368 2b3c9d3dSMasahiro Yamadaexport KBUILD_CFLAGS KBUILD_AFLAGS
369 2b3c9d3dSMasahiro Yamada
370 6825a95bSMasahiro Yamada# When compiling out-of-tree modules, put MODVERDIR in the module
371 6825a95bSMasahiro Yamada# tree rather than in the kernel tree. The kernel tree might
372 6825a95bSMasahiro Yamada# even be read-only.
373 6825a95bSMasahiro Yamadaexport MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions
374 6825a95bSMasahiro Yamada
375 6825a95bSMasahiro Yamada# Files to ignore in find ... statements
376 6825a95bSMasahiro Yamada
377 6825a95bSMasahiro YamadaRCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \
378 6825a95bSMasahiro Yamada		   -o -name .pc -o -name .hg -o -name .git \) -prune -o
379 6825a95bSMasahiro Yamadaexport RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
380 6825a95bSMasahiro Yamada			 --exclude CVS --exclude .pc --exclude .hg --exclude .git
381 6825a95bSMasahiro Yamada
382 6825a95bSMasahiro Yamada# ===========================================================================
383 6825a95bSMasahiro Yamada# Rules shared between *config targets and build targets
384 6825a95bSMasahiro Yamada
385 6825a95bSMasahiro Yamada# Basic helpers built in scripts/
386 6825a95bSMasahiro YamadaPHONY += scripts_basic
387 6825a95bSMasahiro Yamadascripts_basic:
388 6825a95bSMasahiro Yamada	$(Q)$(MAKE) $(build)=scripts/basic
389 6825a95bSMasahiro Yamada	$(Q)rm -f .tmp_quiet_recordmcount
390 6825a95bSMasahiro Yamada
391 6825a95bSMasahiro Yamada# To avoid any implicit rule to kick in, define an empty command.
392 6825a95bSMasahiro Yamadascripts/basic/%: scripts_basic ;
393 6825a95bSMasahiro Yamada
394 3341bfecSMasahiro YamadaPHONY += outputmakefile
395 3341bfecSMasahiro Yamada# outputmakefile generates a Makefile in the output directory, if using a
396 3341bfecSMasahiro Yamada# separate output directory. This allows convenient use of make in the
397 3341bfecSMasahiro Yamada# output directory.
398 3341bfecSMasahiro Yamadaoutputmakefile:
399 3341bfecSMasahiro Yamadaifneq ($(KBUILD_SRC),)
400 3341bfecSMasahiro Yamada	$(Q)ln -fsn $(srctree) source
401 3341bfecSMasahiro Yamada	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
402 3341bfecSMasahiro Yamada	    $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
403 3341bfecSMasahiro Yamadaendif
404 3341bfecSMasahiro Yamada
405 433b2f1eSMasahiro Yamada# To make sure we do not include .config for any of the *config targets
406 433b2f1eSMasahiro Yamada# catch them early, and hand them over to scripts/kconfig/Makefile
407 433b2f1eSMasahiro Yamada# It is allowed to specify more targets when calling make, including
408 433b2f1eSMasahiro Yamada# mixing *config targets and build targets.
409 433b2f1eSMasahiro Yamada# For example 'make oldconfig all'.
410 433b2f1eSMasahiro Yamada# Detect when mixed targets is specified, and make a second invocation
411 433b2f1eSMasahiro Yamada# of make so .config is not included in this case either (for *config).
412 6825a95bSMasahiro Yamada
413 7424145fSMasahiro Yamadaversion_h := include/generated/version_autogenerated.h
414 7424145fSMasahiro Yamadatimestamp_h := include/generated/timestamp_autogenerated.h
415 7424145fSMasahiro Yamada
416 433b2f1eSMasahiro Yamadano-dot-config-targets := clean clobber mrproper distclean \
417 27651187SMasahiro Yamada			 help %docs check% coccicheck \
418 ed1ca528SMasahiro Yamada			 ubootversion backup
419 2b3c9d3dSMasahiro Yamada
420 433b2f1eSMasahiro Yamadaconfig-targets := 0
421 433b2f1eSMasahiro Yamadamixed-targets  := 0
422 433b2f1eSMasahiro Yamadadot-config     := 1
423 2b3c9d3dSMasahiro Yamada
424 433b2f1eSMasahiro Yamadaifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
425 433b2f1eSMasahiro Yamada	ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
426 433b2f1eSMasahiro Yamada		dot-config := 0
427 2b3c9d3dSMasahiro Yamada	endif
428 2b3c9d3dSMasahiro Yamadaendif
429 2b3c9d3dSMasahiro Yamada
430 433b2f1eSMasahiro Yamadaifeq ($(KBUILD_EXTMOD),)
431 433b2f1eSMasahiro Yamada        ifneq ($(filter config %config,$(MAKECMDGOALS)),)
432 433b2f1eSMasahiro Yamada                config-targets := 1
433 433b2f1eSMasahiro Yamada                ifneq ($(filter-out config %config,$(MAKECMDGOALS)),)
434 433b2f1eSMasahiro Yamada                        mixed-targets := 1
435 433b2f1eSMasahiro Yamada                endif
436 433b2f1eSMasahiro Yamada        endif
437 433b2f1eSMasahiro Yamadaendif
438 433b2f1eSMasahiro Yamada
439 433b2f1eSMasahiro Yamadaifeq ($(mixed-targets),1)
440 433b2f1eSMasahiro Yamada# ===========================================================================
441 433b2f1eSMasahiro Yamada# We're called with mixed targets (*config and build targets).
442 433b2f1eSMasahiro Yamada# Handle them one by one.
443 433b2f1eSMasahiro Yamada
444 53bca5abSMasahiro YamadaPHONY += $(MAKECMDGOALS) build-one-by-one
445 53bca5abSMasahiro Yamada
446 53bca5abSMasahiro Yamada$(MAKECMDGOALS): build-one-by-one
447 53bca5abSMasahiro Yamada	@:
448 53bca5abSMasahiro Yamada
449 53bca5abSMasahiro Yamadabuild-one-by-one:
450 53bca5abSMasahiro Yamada	$(Q)set -e; \
451 53bca5abSMasahiro Yamada	for i in $(MAKECMDGOALS); do \
452 53bca5abSMasahiro Yamada		$(MAKE) -f $(srctree)/Makefile $$i; \
453 53bca5abSMasahiro Yamada	done
454 433b2f1eSMasahiro Yamada
455 433b2f1eSMasahiro Yamadaelse
456 433b2f1eSMasahiro Yamadaifeq ($(config-targets),1)
457 433b2f1eSMasahiro Yamada# ===========================================================================
458 433b2f1eSMasahiro Yamada# *config targets only - make sure prerequisites are updated, and descend
459 433b2f1eSMasahiro Yamada# in scripts/kconfig to make the *config target
460 433b2f1eSMasahiro Yamada
461 433b2f1eSMasahiro Yamada# Read arch specific Makefile to set KBUILD_DEFCONFIG as needed.
462 433b2f1eSMasahiro Yamada# KBUILD_DEFCONFIG may point out an alternative default configuration
463 433b2f1eSMasahiro Yamada# used for 'make defconfig'
464 433b2f1eSMasahiro Yamada
465 3341bfecSMasahiro Yamada%_config:: outputmakefile
466 433b2f1eSMasahiro Yamada	@$(MKCONFIG) -A $(@:_config=)
467 433b2f1eSMasahiro Yamada
468 433b2f1eSMasahiro Yamadaelse
469 433b2f1eSMasahiro Yamada# ===========================================================================
470 433b2f1eSMasahiro Yamada# Build targets only - this includes vmlinux, arch specific targets, clean
471 433b2f1eSMasahiro Yamada# targets and others. In general all targets except *config targets.
472 433b2f1eSMasahiro Yamada
473 433b2f1eSMasahiro Yamada# load ARCH, BOARD, and CPU configuration
474 433b2f1eSMasahiro Yamada-include include/config.mk
475 433b2f1eSMasahiro Yamada
476 433b2f1eSMasahiro Yamadaifeq ($(dot-config),1)
477 433b2f1eSMasahiro Yamada# Read in config
478 433b2f1eSMasahiro Yamada-include include/autoconf.mk
479 433b2f1eSMasahiro Yamada-include include/autoconf.mk.dep
480 433b2f1eSMasahiro Yamada
481 92b197f0SWolfgang Denk# load other configuration
482 433b2f1eSMasahiro Yamadainclude $(srctree)/config.mk
483 92b197f0SWolfgang Denk
484 433b2f1eSMasahiro Yamadaifeq ($(wildcard include/config.mk),)
485 433b2f1eSMasahiro Yamada$(error "System not configured - see README")
486 ced0715dSMasahiro Yamadaendif
487 fada9e20SSimon Glass
488 d51dfff7SIlya Yanok# If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use
489 d51dfff7SIlya Yanok# that (or fail if absent).  Otherwise, search for a linker script in a
490 d51dfff7SIlya Yanok# standard location.
491 d51dfff7SIlya Yanok
492 d51dfff7SIlya Yanokifndef LDSCRIPT
493 d51dfff7SIlya Yanok	#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug
494 d51dfff7SIlya Yanok	ifdef CONFIG_SYS_LDSCRIPT
495 d51dfff7SIlya Yanok		# need to strip off double quotes
496 4a377552SMasahiro Yamada		LDSCRIPT := $(srctree)/$(CONFIG_SYS_LDSCRIPT:"%"=%)
497 d51dfff7SIlya Yanok	endif
498 d51dfff7SIlya Yanokendif
499 d51dfff7SIlya Yanok
500 ee60197eSSimon Glass# If there is no specified link script, we look in a number of places for it
501 d51dfff7SIlya Yanokifndef LDSCRIPT
502 d51dfff7SIlya Yanok	ifeq ($(CONFIG_NAND_U_BOOT),y)
503 d51dfff7SIlya Yanok		LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
504 d51dfff7SIlya Yanok		ifeq ($(wildcard $(LDSCRIPT)),)
505 d51dfff7SIlya Yanok			LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot-nand.lds
506 d51dfff7SIlya Yanok		endif
507 d51dfff7SIlya Yanok	endif
508 d51dfff7SIlya Yanok	ifeq ($(wildcard $(LDSCRIPT)),)
509 d51dfff7SIlya Yanok		LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
510 d51dfff7SIlya Yanok	endif
511 d51dfff7SIlya Yanok	ifeq ($(wildcard $(LDSCRIPT)),)
512 d51dfff7SIlya Yanok		LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot.lds
513 d51dfff7SIlya Yanok	endif
514 d51dfff7SIlya Yanok	ifeq ($(wildcard $(LDSCRIPT)),)
515 ee60197eSSimon Glass		LDSCRIPT := $(TOPDIR)/arch/$(ARCH)/cpu/u-boot.lds
516 ee60197eSSimon Glass	endif
517 d51dfff7SIlya Yanokendif
518 d51dfff7SIlya Yanok
519 433b2f1eSMasahiro Yamadaelse
520 433b2f1eSMasahiro Yamada
521 433b2f1eSMasahiro Yamada
522 433b2f1eSMasahiro Yamadaendif # $(dot-config)
523 433b2f1eSMasahiro Yamada
524 433b2f1eSMasahiro YamadaKBUILD_CFLAGS += -Os #-fomit-frame-pointer
525 433b2f1eSMasahiro Yamada
526 433b2f1eSMasahiro Yamadaifdef BUILD_TAG
527 433b2f1eSMasahiro YamadaKBUILD_CFLAGS += -DBUILD_TAG='"$(BUILD_TAG)"'
528 433b2f1eSMasahiro Yamadaendif
529 433b2f1eSMasahiro Yamada
530 433b2f1eSMasahiro YamadaKBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
531 433b2f1eSMasahiro Yamada
532 433b2f1eSMasahiro YamadaKBUILD_CFLAGS	+= -g
533 433b2f1eSMasahiro Yamada# $(KBUILD_AFLAGS) sets -g, which causes gcc to pass a suitable -g<format>
534 433b2f1eSMasahiro Yamada# option to the assembler.
535 433b2f1eSMasahiro YamadaKBUILD_AFLAGS	+= -g
536 433b2f1eSMasahiro Yamada
537 433b2f1eSMasahiro Yamada# Report stack usage if supported
538 5b1f1f4aSMasahiro Yamadaifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-stack-usage.sh $(CC)),y)
539 5b1f1f4aSMasahiro Yamada	KBUILD_CFLAGS += -fstack-usage
540 5b1f1f4aSMasahiro Yamadaendif
541 433b2f1eSMasahiro Yamada
542 433b2f1eSMasahiro YamadaKBUILD_CFLAGS += $(call cc-option,-Wno-format-nonliteral)
543 433b2f1eSMasahiro Yamada
544 433b2f1eSMasahiro Yamada# turn jbsr into jsr for m68k
545 433b2f1eSMasahiro Yamadaifeq ($(ARCH),m68k)
546 433b2f1eSMasahiro Yamadaifeq ($(findstring 3.4,$(shell $(CC) --version)),3.4)
547 433b2f1eSMasahiro YamadaKBUILD_AFLAGS += -Wa,-gstabs,-S
548 433b2f1eSMasahiro Yamadaendif
549 433b2f1eSMasahiro Yamadaendif
550 433b2f1eSMasahiro Yamada
551 433b2f1eSMasahiro Yamadaifneq ($(CONFIG_SYS_TEXT_BASE),)
552 433b2f1eSMasahiro YamadaKBUILD_CPPFLAGS += -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE)
553 433b2f1eSMasahiro Yamadaendif
554 433b2f1eSMasahiro Yamada
555 433b2f1eSMasahiro Yamadaexport CONFIG_SYS_TEXT_BASE
556 433b2f1eSMasahiro Yamada
557 433b2f1eSMasahiro Yamada# Use UBOOTINCLUDE when you must reference the include/ directory.
558 433b2f1eSMasahiro Yamada# Needed to be compatible with the O= option
559 433b2f1eSMasahiro YamadaUBOOTINCLUDE    :=
560 433b2f1eSMasahiro Yamadaifneq ($(OBJTREE),$(SRCTREE))
561 433b2f1eSMasahiro YamadaUBOOTINCLUDE	+= -I$(OBJTREE)/include
562 433b2f1eSMasahiro Yamadaendif
563 433b2f1eSMasahiro YamadaUBOOTINCLUDE	+= -I$(srctree)/include \
564 433b2f1eSMasahiro Yamada		-I$(srctree)/arch/$(ARCH)/include
565 433b2f1eSMasahiro Yamada
566 433b2f1eSMasahiro YamadaNOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
567 433b2f1eSMasahiro YamadaCHECKFLAGS     += $(NOSTDINC_FLAGS)
568 433b2f1eSMasahiro Yamada
569 433b2f1eSMasahiro Yamada# FIX ME
570 433b2f1eSMasahiro Yamadacpp_flags := $(KBUILD_CPPFLAGS) $(CPPFLAGS) $(UBOOTINCLUDE) $(NOSTDINC_FLAGS)
571 433b2f1eSMasahiro Yamadac_flags := $(KBUILD_CFLAGS) $(cpp_flags)
572 433b2f1eSMasahiro Yamada
573 7ebf7443Swdenk#########################################################################
574 7ebf7443Swdenk# U-Boot objects....order is important (i.e. start must be first)
575 7ebf7443Swdenk
576 e8a8b824SMasahiro Yamadahead-y := $(CPUDIR)/start.o
577 e8a8b824SMasahiro Yamadahead-$(CONFIG_4xx) += arch/powerpc/cpu/ppc4xx/resetvec.o
578 e8a8b824SMasahiro Yamadahead-$(CONFIG_MPC85xx) += arch/powerpc/cpu/mpc85xx/resetvec.o
579 7ebf7443Swdenk
580 9e414032SMasahiro YamadaHAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(srctree)/board/$(VENDOR)/common/Makefile),y,n)
581 f9328639SMarian Balakowicz
582 656de6b8SMasahiro Yamadalibs-y += lib/
583 656de6b8SMasahiro Yamadalibs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
584 656de6b8SMasahiro Yamadalibs-y += $(CPUDIR)/
585 1d9f4105Swdenkifdef SOC
586 656de6b8SMasahiro Yamadalibs-y += $(CPUDIR)/$(SOC)/
587 1d9f4105Swdenkendif
588 656de6b8SMasahiro Yamadalibs-$(CONFIG_OF_EMBED) += dts/
589 656de6b8SMasahiro Yamadalibs-y += arch/$(ARCH)/lib/
590 656de6b8SMasahiro Yamadalibs-y += fs/
591 656de6b8SMasahiro Yamadalibs-y += net/
592 656de6b8SMasahiro Yamadalibs-y += disk/
593 656de6b8SMasahiro Yamadalibs-y += drivers/
594 *6494d708SSimon Glasslibs-$(CONFIG_DM) += drivers/core/
595 656de6b8SMasahiro Yamadalibs-y += drivers/dma/
596 656de6b8SMasahiro Yamadalibs-y += drivers/gpio/
597 656de6b8SMasahiro Yamadalibs-y += drivers/i2c/
598 656de6b8SMasahiro Yamadalibs-y += drivers/input/
599 656de6b8SMasahiro Yamadalibs-y += drivers/mmc/
600 656de6b8SMasahiro Yamadalibs-y += drivers/mtd/
601 656de6b8SMasahiro Yamadalibs-$(CONFIG_CMD_NAND) += drivers/mtd/nand/
602 656de6b8SMasahiro Yamadalibs-y += drivers/mtd/onenand/
603 656de6b8SMasahiro Yamadalibs-$(CONFIG_CMD_UBI) += drivers/mtd/ubi/
604 656de6b8SMasahiro Yamadalibs-y += drivers/mtd/spi/
605 656de6b8SMasahiro Yamadalibs-y += drivers/net/
606 656de6b8SMasahiro Yamadalibs-y += drivers/net/phy/
607 656de6b8SMasahiro Yamadalibs-y += drivers/pci/
608 656de6b8SMasahiro Yamadalibs-y += drivers/power/ \
609 e2906a59SMasahiro Yamada	drivers/power/fuel_gauge/ \
610 e2906a59SMasahiro Yamada	drivers/power/mfd/ \
611 e2906a59SMasahiro Yamada	drivers/power/pmic/ \
612 e2906a59SMasahiro Yamada	drivers/power/battery/
613 656de6b8SMasahiro Yamadalibs-y += drivers/spi/
614 656de6b8SMasahiro Yamadalibs-$(CONFIG_FMAN_ENET) += drivers/net/fm/
615 656de6b8SMasahiro Yamadalibs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
616 656de6b8SMasahiro Yamadalibs-y += drivers/serial/
617 656de6b8SMasahiro Yamadalibs-y += drivers/usb/eth/
618 656de6b8SMasahiro Yamadalibs-y += drivers/usb/gadget/
619 656de6b8SMasahiro Yamadalibs-y += drivers/usb/host/
620 656de6b8SMasahiro Yamadalibs-y += drivers/usb/musb/
621 656de6b8SMasahiro Yamadalibs-y += drivers/usb/musb-new/
622 656de6b8SMasahiro Yamadalibs-y += drivers/usb/phy/
623 656de6b8SMasahiro Yamadalibs-y += drivers/usb/ulpi/
624 656de6b8SMasahiro Yamadalibs-y += common/
625 656de6b8SMasahiro Yamadalibs-y += lib/libfdt/
626 656de6b8SMasahiro Yamadalibs-$(CONFIG_API) += api/
627 656de6b8SMasahiro Yamadalibs-$(CONFIG_HAS_POST) += post/
628 656de6b8SMasahiro Yamadalibs-y += test/
629 f9328639SMarian Balakowicz
630 24e8bee5SAlison Wangifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35 mxs vf610))
631 656de6b8SMasahiro Yamadalibs-y += arch/$(ARCH)/imx-common/
632 18936ee2SJason Liuendif
633 18936ee2SJason Liu
634 656de6b8SMasahiro Yamadalibs-$(CONFIG_ARM) += arch/arm/cpu/
635 656de6b8SMasahiro Yamadalibs-$(CONFIG_PPC) += arch/powerpc/cpu/
636 852bd07cSMinkyu Kang
637 656de6b8SMasahiro Yamadalibs-y += board/$(BOARDDIR)/
638 08e39a84SMasahiro Yamada
639 656de6b8SMasahiro Yamadalibs-y := $(sort $(libs-y))
640 656de6b8SMasahiro Yamada
641 656de6b8SMasahiro Yamadau-boot-dirs	:= $(patsubst %/,%,$(filter %/, $(libs-y))) tools examples
642 656de6b8SMasahiro Yamada
643 656de6b8SMasahiro Yamadau-boot-alldirs	:= $(sort $(u-boot-dirs) $(patsubst %/,%,$(filter %/, $(libs-))))
644 656de6b8SMasahiro Yamada
645 656de6b8SMasahiro Yamadalibs-y		:= $(patsubst %/, %/built-in.o, $(libs-y))
646 656de6b8SMasahiro Yamada
647 656de6b8SMasahiro Yamadau-boot-init := $(head-y)
648 656de6b8SMasahiro Yamadau-boot-main := $(libs-y)
649 656de6b8SMasahiro Yamada
650 a8c7c708Swdenk
651 4f7cb08eSwdenk# Add GCC lib
652 52b1bf2cSWolfgang Denkifdef USE_PRIVATE_LIBGCC
653 52b1bf2cSWolfgang Denkifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
654 6825a95bSMasahiro YamadaPLATFORM_LIBGCC = $(OBJTREE)/arch/$(ARCH)/lib/lib.a
655 52b1bf2cSWolfgang Denkelse
656 52b1bf2cSWolfgang DenkPLATFORM_LIBGCC = -L $(USE_PRIVATE_LIBGCC) -lgcc
657 52b1bf2cSWolfgang Denkendif
658 52b1bf2cSWolfgang Denkelse
659 6825a95bSMasahiro YamadaPLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(c_flags) -print-libgcc-file-name`) -lgcc
660 52b1bf2cSWolfgang Denkendif
661 52b1bf2cSWolfgang DenkPLATFORM_LIBS += $(PLATFORM_LIBGCC)
662 52b1bf2cSWolfgang Denkexport PLATFORM_LIBS
663 3d3befa7Swdenk
664 6ac9f479SMike Frysinger# Special flags for CPP when processing the linker script.
665 6ac9f479SMike Frysinger# Pass the version down so we can handle backwards compatibility
666 6ac9f479SMike Frysinger# on the fly.
667 6ac9f479SMike FrysingerLDPPFLAGS += \
668 6ac9f479SMike Frysinger	-include $(TOPDIR)/include/u-boot/u-boot.lds.h \
669 7e6403a6SSimon Glass	-DCPUDIR=$(CPUDIR) \
670 6ac9f479SMike Frysinger	$(shell $(LD) --version | \
671 6ac9f479SMike Frysinger	  sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p')
672 6ac9f479SMike Frysinger
673 7ebf7443Swdenk#########################################################################
674 bdccc4feSwdenk#########################################################################
675 7ebf7443Swdenk
676 f3a14d37SMike Frysingerifneq ($(CONFIG_BOARD_SIZE_LIMIT),)
677 f3a14d37SMike FrysingerBOARD_SIZE_CHECK = \
678 f3a14d37SMike Frysinger	@actual=`wc -c $@ | awk '{print $$1}'`; \
679 d060e6f4SJoe Hershberger	limit=`printf "%d" $(CONFIG_BOARD_SIZE_LIMIT)`; \
680 f3a14d37SMike Frysinger	if test $$actual -gt $$limit; then \
681 d060e6f4SJoe Hershberger		echo "$@ exceeds file size limit:" >&2 ; \
682 d060e6f4SJoe Hershberger		echo "  limit:  $$limit bytes" >&2 ; \
683 d060e6f4SJoe Hershberger		echo "  actual: $$actual bytes" >&2 ; \
684 d060e6f4SJoe Hershberger		echo "  excess: $$((actual - limit)) bytes" >&2; \
685 f3a14d37SMike Frysinger		exit 1; \
686 f3a14d37SMike Frysinger	fi
687 f3a14d37SMike Frysingerelse
688 f3a14d37SMike FrysingerBOARD_SIZE_CHECK =
689 f3a14d37SMike Frysingerendif
690 f3a14d37SMike Frysinger
691 8137af19SScott Wood# Statically apply RELA-style relocations (currently arm64 only)
692 8137af19SScott Woodifneq ($(CONFIG_STATIC_RELA),)
693 8137af19SScott Wood# $(1) is u-boot ELF, $(2) is u-boot bin, $(3) is text base
694 8137af19SScott WoodDO_STATIC_RELA = \
695 8137af19SScott Wood	start=$$($(NM) $(1) | grep __rel_dyn_start | cut -f 1 -d ' '); \
696 8137af19SScott Wood	end=$$($(NM) $(1) | grep __rel_dyn_end | cut -f 1 -d ' '); \
697 9e414032SMasahiro Yamada	tools/relocate-rela $(2) $(3) $$start $$end
698 8137af19SScott Woodelse
699 8137af19SScott WoodDO_STATIC_RELA =
700 8137af19SScott Woodendif
701 8137af19SScott Wood
702 3e88337bSMike Frysinger# Always append ALL so that arch config.mk's can add custom ones
703 9e414032SMasahiro YamadaALL-y += u-boot.srec u-boot.bin System.map
704 e935a374SHaiying Wang
705 9e414032SMasahiro YamadaALL-$(CONFIG_NAND_U_BOOT) += u-boot-nand.bin
706 9e414032SMasahiro YamadaALL-$(CONFIG_ONENAND_U_BOOT) += u-boot-onenand.bin
707 9e414032SMasahiro YamadaALL-$(CONFIG_RAMBOOT_PBL) += u-boot.pbl
708 9e414032SMasahiro YamadaALL-$(CONFIG_SPL) += spl/u-boot-spl.bin
709 9e414032SMasahiro YamadaALL-$(CONFIG_SPL_FRAMEWORK) += u-boot.img
710 9e414032SMasahiro YamadaALL-$(CONFIG_TPL) += tpl/u-boot-tpl.bin
711 0d1e8aacSMasahiro YamadaALL-$(CONFIG_OF_SEPARATE) += u-boot.dtb u-boot-dtb.bin
712 714a5621SSimon GlassALL-$(CONFIG_OF_HOSTFILE) += u-boot.dtb
713 b343bbb5SVadim Bendeburyifneq ($(CONFIG_SPL_TARGET),)
714 9e414032SMasahiro YamadaALL-$(CONFIG_SPL) += $(CONFIG_SPL_TARGET:"%"=%)
715 b343bbb5SVadim Bendeburyendif
716 9e414032SMasahiro YamadaALL-$(CONFIG_REMAKE_ELF) += u-boot.elf
717 7ebf7443Swdenk
718 12b7b70cSAllen Martin# enable combined SPL/u-boot/dtb rules for tegra
719 6d6c0baeSTom Warrenifneq ($(CONFIG_TEGRA),)
720 7dcd3a21SVidya Sagarifeq ($(CONFIG_SPL),y)
721 12b7b70cSAllen Martinifeq ($(CONFIG_OF_SEPARATE),y)
722 9e414032SMasahiro YamadaALL-y += u-boot-dtb-tegra.bin
723 12b7b70cSAllen Martinelse
724 9e414032SMasahiro YamadaALL-y += u-boot-nodtb-tegra.bin
725 12b7b70cSAllen Martinendif
726 12b7b70cSAllen Martinendif
727 7dcd3a21SVidya Sagarendif
728 12b7b70cSAllen Martin
729 ad0fed46SMasahiro YamadaLDFLAGS_u-boot += $(LDFLAGS_FINAL)
730 433b2f1eSMasahiro Yamadaifneq ($(CONFIG_SYS_TEXT_BASE),)
731 433b2f1eSMasahiro YamadaLDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
732 433b2f1eSMasahiro Yamadaendif
733 71f84ef0SMasahiro Yamada
734 f9c235fdSMasahiro Yamadaquiet_cmd_objcopy = OBJCOPY $@
735 f9c235fdSMasahiro Yamadacmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
736 f9c235fdSMasahiro Yamada
737 9bf215b0SMasahiro Yamadaquiet_cmd_mkimage = UIMAGE  $@
738 9bf215b0SMasahiro Yamadacmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
739 9bf215b0SMasahiro Yamada	$(if $(KBUILD_VERBOSE:1=), >/dev/null)
740 9bf215b0SMasahiro Yamada
741 ee0acfa2SMasahiro Yamadaquiet_cmd_cat = CAT     $@
742 ee0acfa2SMasahiro Yamadacmd_cat = cat $(filter-out $(PHONY), $^) > $@
743 ee0acfa2SMasahiro Yamada
744 982a1199SMasahiro Yamadaappend = cat $(filter-out $< $(PHONY), $^) >> $@
745 982a1199SMasahiro Yamada
746 982a1199SMasahiro Yamadaquiet_cmd_pad_cat = CAT     $@
747 982a1199SMasahiro Yamadacmd_pad_cat = $(cmd_objcopy) && $(append) || rm -f $@
748 982a1199SMasahiro Yamada
749 656de6b8SMasahiro Yamadaall:		$(ALL-y)
750 7ebf7443Swdenk
751 6ab6b2afSMasahiro YamadaPHONY += dtbs
752 6ab6b2afSMasahiro Yamadadtbs dts/dt.dtb: checkdtc u-boot
753 6ab6b2afSMasahiro Yamada	$(Q)$(MAKE) $(build)=dts dtbs
754 2c0f79e4SSimon Glass
755 ee0acfa2SMasahiro Yamadau-boot-dtb.bin: u-boot.bin dts/dt.dtb FORCE
756 ee0acfa2SMasahiro Yamada	$(call if_changed,cat)
757 2c0f79e4SSimon Glass
758 0d1e8aacSMasahiro Yamadaquiet_cmd_copy = COPY    $@
759 0d1e8aacSMasahiro Yamada      cmd_copy = cp $< $@
760 0d1e8aacSMasahiro Yamada
761 0d1e8aacSMasahiro Yamadau-boot.dtb: dts/dt.dtb
762 0d1e8aacSMasahiro Yamada	$(call cmd,copy)
763 0d1e8aacSMasahiro Yamada
764 f9c235fdSMasahiro YamadaOBJCOPYFLAGS_u-boot.hex := -O ihex
765 6310eb9dSwdenk
766 f9c235fdSMasahiro YamadaOBJCOPYFLAGS_u-boot.srec := -O srec
767 7ebf7443Swdenk
768 f9c235fdSMasahiro Yamadau-boot.hex u-boot.srec: u-boot FORCE
769 f9c235fdSMasahiro Yamada	$(call if_changed,objcopy)
770 f9c235fdSMasahiro Yamada
771 f9c235fdSMasahiro YamadaOBJCOPYFLAGS_u-boot.bin := -O binary
772 f9c235fdSMasahiro Yamada
773 f9c235fdSMasahiro Yamadau-boot.bin: u-boot FORCE
774 f9c235fdSMasahiro Yamada	$(call if_changed,objcopy)
775 8137af19SScott Wood	$(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
776 f3a14d37SMike Frysinger	$(BOARD_SIZE_CHECK)
777 7ebf7443Swdenk
778 9e414032SMasahiro Yamadau-boot.ldr:	u-boot
779 76d82187SMike Frysinger		$(CREATE_LDR_ENV)
780 68e56324SMike Frysinger		$(LDR) -T $(CONFIG_BFIN_CPU) -c $@ $< $(LDR_FLAGS)
781 f3a14d37SMike Frysinger		$(BOARD_SIZE_CHECK)
782 94a91e24SMike Frysinger
783 f9c235fdSMasahiro YamadaOBJCOPYFLAGS_u-boot.ldr.hex := -I binary -O ihex
784 94a91e24SMike Frysinger
785 f9c235fdSMasahiro YamadaOBJCOPYFLAGS_u-boot.ldr.srec := -I binary -O srec
786 f9c235fdSMasahiro Yamada
787 f9c235fdSMasahiro Yamadau-boot.ldr.hex u-boot.ldr.srec: u-boot.ldr FORCE
788 f9c235fdSMasahiro Yamada	$(call if_changed,objcopy)
789 94a91e24SMike Frysinger
790 b40bda6bSStefan Roese#
791 b40bda6bSStefan Roese# U-Boot entry point, needed for booting of full-blown U-Boot
792 b40bda6bSStefan Roese# from the SPL U-Boot version.
793 b40bda6bSStefan Roese#
794 b40bda6bSStefan Roeseifndef CONFIG_SYS_UBOOT_START
795 b40bda6bSStefan RoeseCONFIG_SYS_UBOOT_START := 0
796 b40bda6bSStefan Roeseendif
797 b40bda6bSStefan Roese
798 9bf215b0SMasahiro YamadaMKIMAGEFLAGS_u-boot.img = -A $(ARCH) -T firmware -C none -O u-boot \
799 9bf215b0SMasahiro Yamada	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
800 9bf215b0SMasahiro Yamada	-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
801 9bf215b0SMasahiro Yamada
802 9bf215b0SMasahiro YamadaMKIMAGEFLAGS_u-boot.kwb = -n $(CONFIG_SYS_KWD_CONFIG) -T kwbimage \
803 9bf215b0SMasahiro Yamada		-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE)
804 9bf215b0SMasahiro Yamada
805 9bf215b0SMasahiro YamadaMKIMAGEFLAGS_u-boot.pbl = -n $(CONFIG_SYS_FSL_PBL_RCW) \
806 9bf215b0SMasahiro Yamada		-R $(CONFIG_SYS_FSL_PBL_PBI) -T pblimage
807 9bf215b0SMasahiro Yamada
808 9bf215b0SMasahiro Yamadau-boot.img u-boot.kwb u-boot.pbl: u-boot.bin FORCE
809 9bf215b0SMasahiro Yamada	$(call if_changed,mkimage)
810 bdccc4feSwdenk
811 656de6b8SMasahiro Yamadau-boot.imx: u-boot.bin
812 4e0c8abcSMasahiro Yamada	$(Q)$(MAKE) $(build)=arch/arm/imx-common $@
813 8edcde5eSStefano Babic
814 9e414032SMasahiro Yamadau-boot.sha1:	u-boot.bin
815 9e414032SMasahiro Yamada		tools/ubsha1 u-boot.bin
816 566a494fSHeiko Schocher
817 9e414032SMasahiro Yamadau-boot.dis:	u-boot
818 7ebf7443Swdenk		$(OBJDUMP) -d $< > $@
819 7ebf7443Swdenk
820 3aa29de0SYing Zhangifdef CONFIG_TPL
821 9e414032SMasahiro YamadaSPL_PAYLOAD := tpl/u-boot-with-tpl.bin
822 3aa29de0SYing Zhangelse
823 9e414032SMasahiro YamadaSPL_PAYLOAD := u-boot.bin
824 3aa29de0SYing Zhangendif
825 74752baaSScott Wood
826 982a1199SMasahiro YamadaOBJCOPYFLAGS_u-boot-with-spl.bin = -I binary -O binary \
827 982a1199SMasahiro Yamada				   --pad-to=$(CONFIG_SPL_PAD_TO)
828 982a1199SMasahiro Yamadau-boot-with-spl.bin: spl/u-boot-spl.bin $(SPL_PAYLOAD) FORCE
829 982a1199SMasahiro Yamada	$(call if_changed,pad_cat)
830 3aa29de0SYing Zhang
831 982a1199SMasahiro YamadaOBJCOPYFLAGS_u-boot-with-tpl.bin = -I binary -O binary \
832 982a1199SMasahiro Yamada				   --pad-to=$(CONFIG_TPL_PAD_TO)
833 982a1199SMasahiro Yamadatpl/u-boot-with-tpl.bin: tpl/u-boot-tpl.bin u-boot.bin FORCE
834 982a1199SMasahiro Yamada	$(call if_changed,pad_cat)
835 7816f2cfSHeiko Schocher
836 630d2345SMasahiro YamadaSPL: spl/u-boot-spl.bin FORCE
837 630d2345SMasahiro Yamada	$(Q)$(MAKE) $(build)=arch/arm/imx-common $@
838 630d2345SMasahiro Yamada
839 630d2345SMasahiro Yamadau-boot-with-spl.imx u-boot-with-nand-spl.imx: SPL u-boot.bin FORCE
840 4e0c8abcSMasahiro Yamada	$(Q)$(MAKE) $(build)=arch/arm/imx-common $@
841 7d5a5c79SBenoît Thébaudeau
842 9bf215b0SMasahiro YamadaMKIMAGEFLAGS_u-boot.ubl = -n $(UBL_CONFIG) -T ublimage -e $(CONFIG_SYS_TEXT_BASE)
843 9bf215b0SMasahiro Yamada
844 9bf215b0SMasahiro Yamadau-boot.ubl: u-boot-with-spl.bin FORCE
845 9bf215b0SMasahiro Yamada	$(call if_changed,mkimage)
846 277f00f5SJosé Miguel Gonçalves
847 982a1199SMasahiro YamadaMKIMAGEFLAGS_u-boot-spl.ais = -s -n $(if $(CONFIG_AIS_CONFIG_FILE), \
848 982a1199SMasahiro Yamada	$(srctree)/$(CONFIG_AIS_CONFIG_FILE:"%"=%),"/dev/null") \
849 982a1199SMasahiro Yamada	-T aisimage -e $(CONFIG_SPL_TEXT_BASE)
850 982a1199SMasahiro Yamadaspl/u-boot-spl.ais: spl/u-boot-spl.bin FORCE
851 982a1199SMasahiro Yamada	$(call if_changed,mkimage)
852 d36d8859SChristian Riesch
853 982a1199SMasahiro YamadaOBJCOPYFLAGS_u-boot.ais = -I binary -O binary --pad-to=$(CONFIG_SPL_MAX_SIZE)
854 982a1199SMasahiro Yamadau-boot.ais: spl/u-boot-spl.ais u-boot.img FORCE
855 982a1199SMasahiro Yamada	$(call if_changed,pad_cat)
856 a5453555SOtavio Salvador
857 9e414032SMasahiro Yamadau-boot.sb: u-boot.bin spl/u-boot-spl.bin
858 03c7b3fcSMasahiro Yamada	$(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs $(objtree)/u-boot.sb
859 30b9b932SMarek Vasut
860 94aebe6cSStefan Roese# On x600 (SPEAr600) U-Boot is appended to U-Boot SPL.
861 94aebe6cSStefan Roese# Both images are created using mkimage (crc etc), so that the ROM
862 94aebe6cSStefan Roese# bootloader can check its integrity. Padding needs to be done to the
863 94aebe6cSStefan Roese# SPL image (with mkimage header) and not the binary. Otherwise the resulting image
864 94aebe6cSStefan Roese# which is loaded/copied by the ROM bootloader to SRAM doesn't fit.
865 94aebe6cSStefan Roese# The resulting image containing both U-Boot images is called u-boot.spr
866 982a1199SMasahiro YamadaMKIMAGEFLAGS_u-boot-spl.img = -A $(ARCH) -T firmware -C none \
867 982a1199SMasahiro Yamada	-a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n XLOADER
868 982a1199SMasahiro Yamadaspl/u-boot-spl.img: spl/u-boot-spl.bin FORCE
869 982a1199SMasahiro Yamada	$(call if_changed,mkimage)
870 982a1199SMasahiro Yamada
871 982a1199SMasahiro YamadaOBJCOPYFLAGS_u-boot.spr = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \
872 982a1199SMasahiro Yamada			  --gap-fill=0xff
873 982a1199SMasahiro Yamadau-boot.spr: spl/u-boot-spl.img u-boot.img FORCE
874 982a1199SMasahiro Yamada	$(call if_changed,pad_cat)
875 94aebe6cSStefan Roese
876 6d6c0baeSTom Warrenifneq ($(CONFIG_TEGRA),)
877 982a1199SMasahiro YamadaOBJCOPYFLAGS_u-boot-nodtb-tegra.bin = -O binary --pad-to=$(CONFIG_SYS_TEXT_BASE)
878 982a1199SMasahiro Yamadau-boot-nodtb-tegra.bin: spl/u-boot-spl u-boot.bin FORCE
879 982a1199SMasahiro Yamada	$(call if_changed,pad_cat)
880 9972db5cSStephen Warren
881 9972db5cSStephen Warrenifeq ($(CONFIG_OF_SEPARATE),y)
882 ee0acfa2SMasahiro Yamadau-boot-dtb-tegra.bin: u-boot-nodtb-tegra.bin dts/dt.dtb FORCE
883 ee0acfa2SMasahiro Yamada	$(call if_changed,cat)
884 9972db5cSStephen Warrenendif
885 984df4ecSAllen Martinendif
886 984df4ecSAllen Martin
887 ee0acfa2SMasahiro Yamadau-boot-img.bin: spl/u-boot-spl.bin u-boot.img FORCE
888 ee0acfa2SMasahiro Yamada	$(call if_changed,cat)
889 fb3d2b8aSStefan Roese
890 ecddccd0SStefan Roese# PPC4xx needs the SPL at the end of the image, since the reset vector
891 ecddccd0SStefan Roese# is located at 0xfffffffc. So we can't use the "u-boot-img.bin" target
892 ecddccd0SStefan Roese# and need to introduce a new build target with the full blown U-Boot
893 ecddccd0SStefan Roese# at the start padded up to the start of the SPL image. And then concat
894 ecddccd0SStefan Roese# the SPL image to the end.
895 982a1199SMasahiro Yamada
896 982a1199SMasahiro YamadaOBJCOPYFLAGS_u-boot-img-spl-at-end.bin := -I binary -O binary \
897 982a1199SMasahiro Yamada	--pad-to=$(CONFIG_UBOOT_PAD_TO) --gap-fill=0xff
898 982a1199SMasahiro Yamadau-boot-img-spl-at-end.bin: u-boot.img spl/u-boot-spl.bin FORCE
899 982a1199SMasahiro Yamada	$(call if_changed,pad_cat)
900 ecddccd0SStefan Roese
901 f4dc714aSScott Wood# Create a new ELF from a raw binary file.  This is useful for arm64
902 f4dc714aSScott Wood# where static relocation needs to be performed on the raw binary,
903 f4dc714aSScott Wood# but certain simulators only accept an ELF file (but don't do the
904 f4dc714aSScott Wood# relocation).
905 f4dc714aSScott Wood# FIXME refactor dts/Makefile to share target/arch detection
906 9e414032SMasahiro Yamadau-boot.elf: u-boot.bin
907 f4dc714aSScott Wood	@$(OBJCOPY)  -B aarch64 -I binary -O elf64-littleaarch64 \
908 9e414032SMasahiro Yamada		$< u-boot-elf.o
909 9e414032SMasahiro Yamada	@$(LD) u-boot-elf.o -o $@ \
910 f4dc714aSScott Wood		--defsym=_start=$(CONFIG_SYS_TEXT_BASE) \
911 f4dc714aSScott Wood		-Ttext=$(CONFIG_SYS_TEXT_BASE)
912 f4dc714aSScott Wood
913 ad0fed46SMasahiro Yamada# Rule to link u-boot
914 ad0fed46SMasahiro Yamada# May be overridden by arch/$(ARCH)/config.mk
915 ad0fed46SMasahiro Yamadaquiet_cmd_u-boot__ ?= LD      $@
916 ad0fed46SMasahiro Yamada      cmd_u-boot__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_u-boot) -o $@ \
917 ad0fed46SMasahiro Yamada      -T u-boot.lds $(u-boot-init)                             \
918 ad0fed46SMasahiro Yamada      --start-group $(u-boot-main) --end-group                 \
919 ad0fed46SMasahiro Yamada      $(PLATFORM_LIBS) -Map u-boot.map
920 86eb49b3SSimon Glass
921 656de6b8SMasahiro Yamadau-boot:	$(u-boot-init) $(u-boot-main) u-boot.lds
922 ad0fed46SMasahiro Yamada	$(call if_changed,u-boot__)
923 ecb1dc89SMike Frysingerifeq ($(CONFIG_KALLSYMS),y)
924 9e414032SMasahiro Yamada	smap=`$(call SYSTEM_MAP,u-boot) | \
925 1aada9cdSWolfgang Denk		awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \
926 6825a95bSMasahiro Yamada	$(CC) $(c_flags) -DSYSTEM_MAP="\"$${smap}\"" \
927 9e414032SMasahiro Yamada		-c $(srctree)/common/system_map.c -o common/system_map.o
928 ad0fed46SMasahiro Yamada	$(call cmd,u-boot__) common/system_map.o
929 ecb1dc89SMike Frysingerendif
930 7ebf7443Swdenk
931 656de6b8SMasahiro Yamada# The actual objects are generated when descending,
932 656de6b8SMasahiro Yamada# make sure no implicit rule kicks in
933 656de6b8SMasahiro Yamada$(sort $(u-boot-init) $(u-boot-main)): $(u-boot-dirs) ;
934 f9328639SMarian Balakowicz
935 656de6b8SMasahiro Yamada# Handle descending into subdirectories listed in $(vmlinux-dirs)
936 656de6b8SMasahiro Yamada# Preset locale variables to speed up the build process. Limit locale
937 656de6b8SMasahiro Yamada# tweaks to this spot to avoid wrong language settings when running
938 656de6b8SMasahiro Yamada# make menuconfig etc.
939 656de6b8SMasahiro Yamada# Error messages still appears in the original language
940 a8c7c708Swdenk
941 656de6b8SMasahiro YamadaPHONY += $(u-boot-dirs)
942 6378008aSMasahiro Yamada$(u-boot-dirs): prepare scripts
943 6825a95bSMasahiro Yamada	$(Q)$(MAKE) $(build)=$@
944 940db16dSMasahiro Yamada
945 7424145fSMasahiro Yamadatools: prepare
946 656de6b8SMasahiro Yamada# The "tools" are needed early
947 656de6b8SMasahiro Yamada$(filter-out tools, $(u-boot-dirs)): tools
948 656de6b8SMasahiro Yamada# The "examples" conditionally depend on U-Boot (say, when USE_PRIVATE_LIBGCC
949 656de6b8SMasahiro Yamada# is "yes"), so compile examples after U-Boot is compiled.
950 656de6b8SMasahiro Yamadaexamples: $(filter-out examples, $(u-boot-dirs))
951 656de6b8SMasahiro Yamada
952 7424145fSMasahiro Yamadadefine filechk_uboot.release
953 7424145fSMasahiro Yamada	echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
954 7424145fSMasahiro Yamadaendef
955 7424145fSMasahiro Yamada
956 7424145fSMasahiro Yamada# Store (new) UBOOTRELEASE string in include/config/uboot.release
957 7424145fSMasahiro Yamadainclude/config/uboot.release: Makefile FORCE
958 7424145fSMasahiro Yamada	$(call filechk,uboot.release)
959 7424145fSMasahiro Yamada
960 7424145fSMasahiro Yamada
961 3341bfecSMasahiro Yamada# Things we need to do before we recursively start building the kernel
962 3341bfecSMasahiro Yamada# or the modules are listed in "prepare".
963 3341bfecSMasahiro Yamada# A multi level approach is used. prepareN is processed before prepareN-1.
964 3341bfecSMasahiro Yamada# archprepare is used in arch Makefiles and when processed asm symlink,
965 3341bfecSMasahiro Yamada# version.h and scripts_basic is processed / created.
966 3341bfecSMasahiro Yamada
967 3341bfecSMasahiro Yamada# Listed in dependency order
968 3341bfecSMasahiro YamadaPHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
969 3341bfecSMasahiro Yamada
970 3341bfecSMasahiro Yamada# prepare3 is used to check if we are building in a separate output directory,
971 3341bfecSMasahiro Yamada# and if so do:
972 3341bfecSMasahiro Yamada# 1) Check that make has not been executed in the kernel src $(srctree)
973 7424145fSMasahiro Yamadaprepare3: include/config/uboot.release
974 3341bfecSMasahiro Yamadaifneq ($(KBUILD_SRC),)
975 3341bfecSMasahiro Yamada	@$(kecho) '  Using $(srctree) as source for u-boot'
976 3341bfecSMasahiro Yamada	$(Q)if [ -f $(srctree)/include/config.mk ]; then \
977 3341bfecSMasahiro Yamada		echo >&2 "  $(srctree) is not clean, please run 'make mrproper'"; \
978 3341bfecSMasahiro Yamada		echo >&2 "  in the '$(srctree)' directory.";\
979 3341bfecSMasahiro Yamada		/bin/false; \
980 3341bfecSMasahiro Yamada	fi;
981 3341bfecSMasahiro Yamadaendif
982 3341bfecSMasahiro Yamada
983 3341bfecSMasahiro Yamada# prepare2 creates a makefile if using a separate output directory
984 3341bfecSMasahiro Yamadaprepare2: prepare3 outputmakefile
985 3341bfecSMasahiro Yamada
986 7424145fSMasahiro Yamadaprepare1: prepare2 $(version_h) $(timestamp_h)
987 331b45fbSMasahiro Yamadaifeq ($(__HAVE_ARCH_GENERIC_BOARD),)
988 331b45fbSMasahiro Yamadaifeq ($(CONFIG_SYS_GENERIC_BOARD),y)
989 331b45fbSMasahiro Yamada	@echo >&2 "  Your architecture does not support generic board."
990 331b45fbSMasahiro Yamada	@echo >&2 "  Please undefine CONFIG_SYS_GENERIC_BOARD in your board config file."
991 331b45fbSMasahiro Yamada	@/bin/false
992 331b45fbSMasahiro Yamadaendif
993 331b45fbSMasahiro Yamadaendif
994 4a377552SMasahiro Yamadaifeq ($(wildcard $(LDSCRIPT)),)
995 4a377552SMasahiro Yamada	@echo >&2 "  Could not find linker script."
996 4a377552SMasahiro Yamada	@/bin/false
997 4a377552SMasahiro Yamadaendif
998 7ebf7443Swdenk
999 3341bfecSMasahiro Yamadaarchprepare: prepare1 scripts_basic
1000 a8c7c708Swdenk
1001 6a44d806SMasahiro Yamadaprepare0: archprepare FORCE
1002 6a44d806SMasahiro Yamada	$(Q)$(MAKE) $(build)=.
1003 7ebf7443Swdenk
1004 3341bfecSMasahiro Yamada# All the preparing..
1005 3341bfecSMasahiro Yamadaprepare: prepare0
1006 349e83f0SChe-liang Chiou
1007 7424145fSMasahiro Yamada# Generate some files
1008 7424145fSMasahiro Yamada# ---------------------------------------------------------------------------
1009 7424145fSMasahiro Yamada
1010 7424145fSMasahiro Yamadadefine filechk_version.h
1011 7424145fSMasahiro Yamada	(echo \#define PLAIN_VERSION \"$(UBOOTRELEASE)\"; \
1012 7424145fSMasahiro Yamada	echo \#define U_BOOT_VERSION \"U-Boot \" PLAIN_VERSION; \
1013 7424145fSMasahiro Yamada	echo \#define CC_VERSION_STRING \"$$($(CC) --version | head -n 1)\"; \
1014 7424145fSMasahiro Yamada	echo \#define LD_VERSION_STRING \"$$($(LD) --version | head -n 1)\"; )
1015 7424145fSMasahiro Yamadaendef
1016 7424145fSMasahiro Yamada
1017 7424145fSMasahiro Yamadadefine filechk_timestamp.h
1018 7424145fSMasahiro Yamada	(LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \
1019 7424145fSMasahiro Yamada	LC_ALL=C date +'#define U_BOOT_TIME "%T"')
1020 7424145fSMasahiro Yamadaendef
1021 7424145fSMasahiro Yamada
1022 7424145fSMasahiro Yamada$(version_h): $(srctree)/Makefile FORCE
1023 7424145fSMasahiro Yamada	$(call filechk,version.h)
1024 7424145fSMasahiro Yamada
1025 7424145fSMasahiro Yamada$(timestamp_h): $(srctree)/Makefile FORCE
1026 7424145fSMasahiro Yamada	$(call filechk,timestamp.h)
1027 7424145fSMasahiro Yamada
1028 433b2f1eSMasahiro Yamada#
1029 433b2f1eSMasahiro Yamada# Auto-generate the autoconf.mk file (which is included by all makefiles)
1030 433b2f1eSMasahiro Yamada#
1031 433b2f1eSMasahiro Yamada# This target actually generates 2 files; autoconf.mk and autoconf.mk.dep.
1032 433b2f1eSMasahiro Yamada# the dep file is only include in this top level makefile to determine when
1033 433b2f1eSMasahiro Yamada# to regenerate the autoconf.mk file.
1034 1aada9cdSWolfgang Denk
1035 433b2f1eSMasahiro Yamadaquiet_cmd_autoconf_dep = GEN     $@
1036 433b2f1eSMasahiro Yamada      cmd_autoconf_dep = $(CC) -x c -DDO_DEPS_ONLY -M $(c_flags) \
1037 433b2f1eSMasahiro Yamada	-MQ include/autoconf.mk $(srctree)/include/common.h > $@ || rm $@
1038 887e2ec9SStefan Roese
1039 433b2f1eSMasahiro Yamadainclude/autoconf.mk.dep: include/config.h include/common.h
1040 433b2f1eSMasahiro Yamada	$(call cmd,autoconf_dep)
1041 887e2ec9SStefan Roese
1042 433b2f1eSMasahiro Yamadaquiet_cmd_autoconf = GEN     $@
1043 433b2f1eSMasahiro Yamada      cmd_autoconf = \
1044 433b2f1eSMasahiro Yamada	$(CPP) $(c_flags) -DDO_DEPS_ONLY -dM $(srctree)/include/common.h > $@.tmp && \
1045 433b2f1eSMasahiro Yamada	sed -n -f $(srctree)/tools/scripts/define2mk.sed $@.tmp > $@; \
1046 433b2f1eSMasahiro Yamada	rm $@.tmp
1047 5df2ee27SDaniel Schwierzeck
1048 433b2f1eSMasahiro Yamadainclude/autoconf.mk: include/config.h
1049 433b2f1eSMasahiro Yamada	$(call cmd,autoconf)
1050 433b2f1eSMasahiro Yamada
1051 6378008aSMasahiro Yamada# ---------------------------------------------------------------------------
1052 6378008aSMasahiro Yamada
1053 6378008aSMasahiro YamadaPHONY += depend dep
1054 6378008aSMasahiro Yamadadepend dep:
1055 6378008aSMasahiro Yamada	@echo '*** Warning: make $@ is unnecessary now.'
1056 6378008aSMasahiro Yamada
1057 6378008aSMasahiro Yamada# ---------------------------------------------------------------------------
1058 04a34c96SMasahiro Yamadaquiet_cmd_cpp_lds = LDS     $@
1059 04a34c96SMasahiro Yamadacmd_cpp_lds = $(CPP) $(cpp_flags) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ \
1060 04a34c96SMasahiro Yamada		-x assembler-with-cpp -P -o $@ $<
1061 6378008aSMasahiro Yamada
1062 04a34c96SMasahiro Yamadau-boot.lds: $(LDSCRIPT) prepare FORCE
1063 04a34c96SMasahiro Yamada	$(call if_changed,cpp_lds)
1064 f2302d44SStefan Roese
1065 ee0acfa2SMasahiro YamadaPHONY += nand_spl
1066 6378008aSMasahiro Yamadanand_spl: prepare
1067 03c7b3fcSMasahiro Yamada	$(Q)$(MAKE) $(build)=nand_spl/board/$(BOARDDIR) all
1068 3d5a335cSMasahiro Yamada	@echo >&2
1069 3d5a335cSMasahiro Yamada	@echo >&2 "==================== WARNING ====================="
1070 3d5a335cSMasahiro Yamada	@echo >&2 "nand_spl will not be included in v2014.07 release."
1071 3d5a335cSMasahiro Yamada	@echo >&2 "Please switch over to SPL."
1072 3d5a335cSMasahiro Yamada	@echo >&2 "Otherwise, this board will be removed."
1073 3d5a335cSMasahiro Yamada	@echo >&2 "=================================================="
1074 3d5a335cSMasahiro Yamada	@echo >&2
1075 ca6189dbSKyungmin Park
1076 ee0acfa2SMasahiro Yamadanand_spl/u-boot-spl-16k.bin: nand_spl
1077 ee0acfa2SMasahiro Yamada	@:
1078 ee0acfa2SMasahiro Yamada
1079 ee0acfa2SMasahiro Yamadau-boot-nand.bin: nand_spl/u-boot-spl-16k.bin u-boot.bin FORCE
1080 ee0acfa2SMasahiro Yamada	$(call if_changed,cat)
1081 0d3c62e4SChander Kashyap
1082 982a1199SMasahiro Yamadaspl/u-boot-spl.bin: spl/u-boot-spl
1083 982a1199SMasahiro Yamada	@:
1084 982a1199SMasahiro Yamadaspl/u-boot-spl: tools prepare
1085 03c7b3fcSMasahiro Yamada	$(Q)$(MAKE) obj=spl -f $(srctree)/spl/Makefile all
1086 0d3c62e4SChander Kashyap
1087 6378008aSMasahiro Yamadatpl/u-boot-tpl.bin: tools prepare
1088 03c7b3fcSMasahiro Yamada	$(Q)$(MAKE) obj=tpl -f $(srctree)/spl/Makefile all CONFIG_TPL_BUILD=y
1089 3aa29de0SYing Zhang
1090 656de6b8SMasahiro YamadaTAG_SUBDIRS := $(u-boot-dirs) include
1091 a340c325SJean-Christophe PLAGNIOL-VILLARD
1092 857d9ea6SHorst KronstorferFIND := find
1093 857d9ea6SHorst KronstorferFINDFLAGS := -L
1094 857d9ea6SHorst Kronstorfer
1095 f9328639SMarian Balakowicztags ctags:
1096 9e414032SMasahiro Yamada		ctags -w -o ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
1097 e5e4e705SLi Yang						-name '*.[chS]' -print`
1098 7ebf7443Swdenk
1099 7ebf7443Swdenketags:
1100 857d9ea6SHorst Kronstorfer		etags -a -o $(obj)etags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
1101 e5e4e705SLi Yang						-name '*.[chS]' -print`
1102 ffda586fSLi Yangcscope:
1103 857d9ea6SHorst Kronstorfer		$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) -name '*.[chS]' -print > \
1104 857d9ea6SHorst Kronstorfer						cscope.files
1105 ffda586fSLi Yang		cscope -b -q -k
1106 7ebf7443Swdenk
1107 ecb1dc89SMike FrysingerSYSTEM_MAP = \
1108 ecb1dc89SMike Frysinger		$(NM) $1 | \
1109 7ebf7443Swdenk		grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
1110 ecb1dc89SMike Frysinger		LC_ALL=C sort
1111 9e414032SMasahiro YamadaSystem.map:	u-boot
1112 bc8bb6ecSMasahiro Yamada		@$(call SYSTEM_MAP,$<) > $@
1113 7ebf7443Swdenk
1114 06a119a0STom Rinicheckthumb:
1115 06a119a0STom Rini	@if test $(call cc-version) -lt 0404; then \
1116 06a119a0STom Rini		echo -n '*** Your GCC does not produce working '; \
1117 06a119a0STom Rini		echo 'binaries in THUMB mode.'; \
1118 06a119a0STom Rini		echo '*** Your board is configured for THUMB mode.'; \
1119 06a119a0STom Rini		false; \
1120 06a119a0STom Rini	fi
1121 6ec63f41SScott Wood
1122 6ec63f41SScott Wood# GCC 3.x is reported to have problems generating the type of relocation
1123 6ec63f41SScott Wood# that U-Boot wants.
1124 6ec63f41SScott Wood# See http://lists.denx.de/pipermail/u-boot/2012-September/135156.html
1125 6ec63f41SScott Woodcheckgcc4:
1126 6ec63f41SScott Wood	@if test $(call cc-version) -lt 0400; then \
1127 6ec63f41SScott Wood		echo -n '*** Your GCC is too old, please upgrade to GCC 4.x or newer'; \
1128 6ec63f41SScott Wood		false; \
1129 6ec63f41SScott Wood	fi
1130 6ec63f41SScott Wood
1131 501ebdf2SStephen Warrencheckdtc:
1132 501ebdf2SStephen Warren	@if test $(call dtc-version) -lt 0104; then \
1133 501ebdf2SStephen Warren		echo '*** Your dtc is too old, please upgrade to dtc 1.4 or newer'; \
1134 501ebdf2SStephen Warren		false; \
1135 501ebdf2SStephen Warren	fi
1136 501ebdf2SStephen Warren
1137 7ebf7443Swdenk#########################################################################
1138 7ebf7443Swdenk
1139 54799e45SScott Wood# ARM relocations should all be R_ARM_RELATIVE (32-bit) or
1140 54799e45SScott Wood# R_AARCH64_RELATIVE (64-bit).
1141 9e414032SMasahiro Yamadacheckarmreloc: u-boot
1142 54799e45SScott Wood	@RELOC="`$(CROSS_COMPILE)readelf -r -W $< | cut -d ' ' -f 4 | \
1143 54799e45SScott Wood		grep R_A | sort -u`"; \
1144 54799e45SScott Wood	if test "$$RELOC" != "R_ARM_RELATIVE" -a \
1145 54799e45SScott Wood		 "$$RELOC" != "R_AARCH64_RELATIVE"; then \
1146 54799e45SScott Wood		echo "$< contains unexpected relocations: $$RELOC"; \
1147 54799e45SScott Wood		false; \
1148 54799e45SScott Wood	fi
1149 c37980c3SAlbert ARIBAUD
1150 7424145fSMasahiro Yamadaenv: scripts_basic
1151 3f76e984SMasahiro Yamada	$(Q)$(MAKE) $(build)=tools/$@
1152 0358df42SMike Frysinger
1153 2887c473SMasahiro Yamadatools-all: HOST_TOOLS_ALL=y
1154 2887c473SMasahiro Yamadatools-all: env tools ;
1155 0358df42SMike Frysinger
1156 4e53a258SWolfgang Denk.PHONY : CHANGELOG
1157 4e53a258SWolfgang DenkCHANGELOG:
1158 b985b5d6SBen Warren	git log --no-merges U-Boot-1_1_5.. | \
1159 b985b5d6SBen Warren	unexpand -a | sed -e 's/\s\s*$$//' > $@
1160 4e53a258SWolfgang Denk
1161 0a823aa2SHarald Welteinclude/license.h: tools/bin2header COPYING
1162 0a823aa2SHarald Welte	cat COPYING | gzip -9 -c | ./tools/bin2header license_gzip > include/license.h
1163 7ebf7443Swdenk#########################################################################
1164 7ebf7443Swdenk
1165 efcf8619SMasahiro Yamada###
1166 efcf8619SMasahiro Yamada# Cleaning is done on three levels.
1167 efcf8619SMasahiro Yamada# make clean     Delete most generated files
1168 efcf8619SMasahiro Yamada#                Leave enough to build external modules
1169 efcf8619SMasahiro Yamada# make mrproper  Delete the current configuration, and all generated files
1170 efcf8619SMasahiro Yamada# make distclean Remove editor backup files, patch leftover files and the like
1171 7ebf7443Swdenk
1172 efcf8619SMasahiro Yamada# Directories & files removed with 'make clean'
1173 efcf8619SMasahiro YamadaCLEAN_DIRS  += $(MODVERDIR)
1174 efcf8619SMasahiro YamadaCLEAN_FILES += u-boot.lds include/bmp_logo.h include/bmp_logo_data.h \
1175 6ab6b2afSMasahiro Yamada	       board/*/config.tmp board/*/*/config.tmp \
1176 efcf8619SMasahiro Yamada	       include/autoconf.mk* include/spl-autoconf.mk \
1177 433b2f1eSMasahiro Yamada	       include/tpl-autoconf.mk
1178 a6862bc1SWolfgang Denk
1179 efcf8619SMasahiro Yamada# Directories & files removed with 'make clobber'
1180 efcf8619SMasahiro YamadaCLOBBER_DIRS  += $(patsubst %,spl/%, $(filter-out Makefile, \
1181 efcf8619SMasahiro Yamada		 $(shell ls -1 spl 2>/dev/null))) \
1182 efcf8619SMasahiro Yamada		 tpl
1183 73c8b52bSMasahiro YamadaCLOBBER_FILES += u-boot* MLO* SPL System.map nand_spl/u-boot*
1184 9f4a4206SMike Frysinger
1185 efcf8619SMasahiro Yamada# Directories & files removed with 'make mrproper'
1186 efcf8619SMasahiro YamadaMRPROPER_DIRS  += include/config include/generated
1187 efcf8619SMasahiro YamadaMRPROPER_FILES += .config .config.old \
1188 efcf8619SMasahiro Yamada		  tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
1189 efcf8619SMasahiro Yamada		  include/config.h include/config.mk
1190 7ebf7443Swdenk
1191 efcf8619SMasahiro Yamada# clean - Delete most, but leave enough to build external modules
1192 efcf8619SMasahiro Yamada#
1193 efcf8619SMasahiro Yamadaclean: rm-dirs  := $(CLEAN_DIRS)
1194 efcf8619SMasahiro Yamadaclean: rm-files := $(CLEAN_FILES)
1195 7ebf7443Swdenk
1196 efcf8619SMasahiro Yamadaclean-dirs	:= $(foreach f,$(u-boot-alldirs),$(if $(wildcard $f/Makefile),$f))
1197 734329f9SAndy Fleming
1198 efcf8619SMasahiro Yamadaclean-dirs      := $(addprefix _clean_, $(clean-dirs) doc/DocBook)
1199 7ebf7443Swdenk
1200 efcf8619SMasahiro YamadaPHONY += $(clean-dirs) clean archclean
1201 efcf8619SMasahiro Yamada$(clean-dirs):
1202 efcf8619SMasahiro Yamada	$(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
1203 efcf8619SMasahiro Yamada
1204 efcf8619SMasahiro Yamada# TODO: Do not use *.cfgtmp
1205 efcf8619SMasahiro Yamadaclean: $(clean-dirs)
1206 efcf8619SMasahiro Yamada	$(call cmd,rmdirs)
1207 efcf8619SMasahiro Yamada	$(call cmd,rmfiles)
1208 efcf8619SMasahiro Yamada	@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
1209 efcf8619SMasahiro Yamada		\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
1210 efcf8619SMasahiro Yamada		-o -name '*.ko.*' -o -name '*.su' -o -name '*.cfgtmp' \
1211 efcf8619SMasahiro Yamada		-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
1212 efcf8619SMasahiro Yamada		-o -name '*.symtypes' -o -name 'modules.order' \
1213 efcf8619SMasahiro Yamada		-o -name modules.builtin -o -name '.tmp_*.o.*' \
1214 efcf8619SMasahiro Yamada		-o -name '*.gcno' \) -type f -print | xargs rm -f
1215 efcf8619SMasahiro Yamada	@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
1216 efcf8619SMasahiro Yamada		-path './nand_spl/*' -type l -print | xargs rm -f
1217 efcf8619SMasahiro Yamada
1218 efcf8619SMasahiro Yamada# clobber
1219 efcf8619SMasahiro Yamada#
1220 efcf8619SMasahiro Yamadaclobber: rm-dirs  := $(CLOBBER_DIRS)
1221 efcf8619SMasahiro Yamadaclobber: rm-files := $(CLOBBER_FILES)
1222 efcf8619SMasahiro Yamada
1223 efcf8619SMasahiro YamadaPHONY += clobber
1224 efcf8619SMasahiro Yamada
1225 efcf8619SMasahiro Yamadaclobber: clean
1226 efcf8619SMasahiro Yamada	$(call cmd,rmdirs)
1227 efcf8619SMasahiro Yamada	$(call cmd,rmfiles)
1228 efcf8619SMasahiro Yamada
1229 efcf8619SMasahiro Yamada# mrproper - Delete all generated files, including .config
1230 efcf8619SMasahiro Yamada#
1231 efcf8619SMasahiro Yamadamrproper: rm-dirs  := $(wildcard $(MRPROPER_DIRS))
1232 efcf8619SMasahiro Yamadamrproper: rm-files := $(wildcard $(MRPROPER_FILES))
1233 efcf8619SMasahiro Yamadamrproper-dirs      := $(addprefix _mrproper_,scripts)
1234 efcf8619SMasahiro Yamada
1235 efcf8619SMasahiro YamadaPHONY += $(mrproper-dirs) mrproper archmrproper
1236 efcf8619SMasahiro Yamada$(mrproper-dirs):
1237 efcf8619SMasahiro Yamada	$(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
1238 efcf8619SMasahiro Yamada
1239 efcf8619SMasahiro Yamadamrproper: clobber $(mrproper-dirs)
1240 efcf8619SMasahiro Yamada	$(call cmd,rmdirs)
1241 efcf8619SMasahiro Yamada	$(call cmd,rmfiles)
1242 efcf8619SMasahiro Yamada	@rm -f arch/*/include/asm/arch arch/*/include/asm/proc
1243 efcf8619SMasahiro Yamada
1244 efcf8619SMasahiro Yamada# distclean
1245 efcf8619SMasahiro Yamada#
1246 efcf8619SMasahiro YamadaPHONY += distclean
1247 efcf8619SMasahiro Yamada
1248 433b2f1eSMasahiro Yamadadistclean: mrproper
1249 efcf8619SMasahiro Yamada	@find $(srctree) $(RCS_FIND_IGNORE) \
1250 efcf8619SMasahiro Yamada		\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
1251 efcf8619SMasahiro Yamada		-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
1252 efcf8619SMasahiro Yamada		-o -name '.*.rej' \
1253 efcf8619SMasahiro Yamada		-o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
1254 efcf8619SMasahiro Yamada		-type f -print | xargs rm -f
1255 7ebf7443Swdenk
1256 7ebf7443Swdenkbackup:
1257 7ebf7443Swdenk	F=`basename $(TOPDIR)` ; cd .. ; \
1258 d6b93714SIlya Yanok	gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
1259 7ebf7443Swdenk
1260 ed1ca528SMasahiro Yamadahelp:
1261 ed1ca528SMasahiro Yamada	@echo  'Cleaning targets:'
1262 ed1ca528SMasahiro Yamada	@echo  '  clean		  - Remove most generated files but keep the config and'
1263 ed1ca528SMasahiro Yamada	@echo  '                    necessities for testing u-boot'
1264 ed1ca528SMasahiro Yamada	@echo  '  clobber	  - Remove most generated files but keep the config'
1265 ed1ca528SMasahiro Yamada	@echo  '  mrproper	  - Remove all generated files + config + various backup files'
1266 ed1ca528SMasahiro Yamada	@echo  '  distclean	  - mrproper + remove editor backup and patch files'
1267 ed1ca528SMasahiro Yamada	@echo  ''
1268 ed1ca528SMasahiro Yamada# uncomment after adding Kconfig feature
1269 ed1ca528SMasahiro Yamada#	@echo  'Configuration targets:'
1270 ed1ca528SMasahiro Yamada#	@$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
1271 ed1ca528SMasahiro Yamada#	@echo  ''
1272 ed1ca528SMasahiro Yamada	@echo  'Other generic targets:'
1273 ed1ca528SMasahiro Yamada	@echo  '  all		  - Build all necessary images depending on configuration'
1274 ed1ca528SMasahiro Yamada	@echo  '  u-boot	  - Build the bare u-boot'
1275 ed1ca528SMasahiro Yamada	@echo  '  dir/            - Build all files in dir and below'
1276 ed1ca528SMasahiro Yamada	@echo  '  dir/file.[oisS] - Build specified target only'
1277 ed1ca528SMasahiro Yamada	@echo  '  dir/file.lst    - Build specified mixed source/assembly target only'
1278 ed1ca528SMasahiro Yamada	@echo  '                    (requires a recent binutils and recent build (System.map))'
1279 ed1ca528SMasahiro Yamada	@echo  '  tags/TAGS	  - Generate tags file for editors'
1280 ed1ca528SMasahiro Yamada	@echo  '  cscope	  - Generate cscope index'
1281 ed1ca528SMasahiro Yamada	@echo  '  ubootrelease	  - Output the release version string'
1282 ed1ca528SMasahiro Yamada	@echo  '  ubootversion	  - Output the version stored in Makefile'
1283 ed1ca528SMasahiro Yamada	@echo  ''
1284 ed1ca528SMasahiro Yamada	@echo  'Static analysers'
1285 ed1ca528SMasahiro Yamada	@echo  '  checkstack      - Generate a list of stack hogs'
1286 ed1ca528SMasahiro Yamada	@echo  ''
1287 ed1ca528SMasahiro Yamada	@echo  'Documentation targets:'
1288 ed1ca528SMasahiro Yamada	@$(MAKE) -f $(srctree)/doc/DocBook/Makefile dochelp
1289 ed1ca528SMasahiro Yamada	@echo  ''
1290 ed1ca528SMasahiro Yamada	@echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
1291 ed1ca528SMasahiro Yamada	@echo  '  make V=2   [targets] 2 => give reason for rebuild of target'
1292 ed1ca528SMasahiro Yamada	@echo  '  make O=dir [targets] Locate all output files in "dir", including .config'
1293 ed1ca528SMasahiro Yamada	@echo  '  make C=1   [targets] Check all c source with $$CHECK (sparse by default)'
1294 ed1ca528SMasahiro Yamada	@echo  '  make C=2   [targets] Force check of all c source with $$CHECK'
1295 ed1ca528SMasahiro Yamada	@echo  '  make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
1296 ed1ca528SMasahiro Yamada	@echo  '  make W=n   [targets] Enable extra gcc checks, n=1,2,3 where'
1297 ed1ca528SMasahiro Yamada	@echo  '		1: warnings which may be relevant and do not occur too often'
1298 ed1ca528SMasahiro Yamada	@echo  '		2: warnings which occur quite often but may still be relevant'
1299 ed1ca528SMasahiro Yamada	@echo  '		3: more obscure warnings, can most likely be ignored'
1300 ed1ca528SMasahiro Yamada	@echo  '		Multiple levels can be combined with W=12 or W=123'
1301 ed1ca528SMasahiro Yamada	@echo  ''
1302 ed1ca528SMasahiro Yamada	@echo  'Execute "make" or "make all" to build all targets marked with [*] '
1303 ed1ca528SMasahiro Yamada	@echo  'For further info see the ./README file'
1304 ed1ca528SMasahiro Yamada
1305 8fac9c7bSMasahiro Yamada
1306 8fac9c7bSMasahiro Yamada# Documentation targets
1307 8fac9c7bSMasahiro Yamada# ---------------------------------------------------------------------------
1308 8fac9c7bSMasahiro Yamada%docs: scripts_basic FORCE
1309 8fac9c7bSMasahiro Yamada	$(Q)$(MAKE) $(build)=scripts build_docproc
1310 8fac9c7bSMasahiro Yamada	$(Q)$(MAKE) $(build)=doc/DocBook $@
1311 8fac9c7bSMasahiro Yamada
1312 3341bfecSMasahiro Yamada# Dummies...
1313 3341bfecSMasahiro YamadaPHONY += prepare scripts
1314 3341bfecSMasahiro Yamadaprepare: ;
1315 3341bfecSMasahiro Yamadascripts: ;
1316 9e414032SMasahiro Yamada
1317 433b2f1eSMasahiro Yamadaendif #ifeq ($(config-targets),1)
1318 433b2f1eSMasahiro Yamadaendif #ifeq ($(mixed-targets),1)
1319 433b2f1eSMasahiro Yamada
1320 ed1ca528SMasahiro YamadaPHONY += checkstack ubootrelease ubootversion
1321 ed1ca528SMasahiro Yamada
1322 ed1ca528SMasahiro Yamadacheckstack:
1323 ed1ca528SMasahiro Yamada	$(OBJDUMP) -d u-boot $$(find . -name u-boot-spl) | \
1324 ed1ca528SMasahiro Yamada	$(PERL) $(src)/scripts/checkstack.pl $(ARCH)
1325 ed1ca528SMasahiro Yamada
1326 ed1ca528SMasahiro Yamadaubootrelease:
1327 ed1ca528SMasahiro Yamada	@echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
1328 ed1ca528SMasahiro Yamada
1329 ed1ca528SMasahiro Yamadaubootversion:
1330 ed1ca528SMasahiro Yamada	@echo $(UBOOTVERSION)
1331 ed1ca528SMasahiro Yamada
1332 886d86e8SMasahiro Yamada# Single targets
1333 886d86e8SMasahiro Yamada# ---------------------------------------------------------------------------
1334 886d86e8SMasahiro Yamada# Single targets are compatible with:
1335 886d86e8SMasahiro Yamada# - build with mixed source and output
1336 886d86e8SMasahiro Yamada# - build with separate output dir 'make O=...'
1337 886d86e8SMasahiro Yamada# - external modules
1338 886d86e8SMasahiro Yamada#
1339 886d86e8SMasahiro Yamada#  target-dir => where to store outputfile
1340 886d86e8SMasahiro Yamada#  build-dir  => directory in kernel source tree to use
1341 886d86e8SMasahiro Yamada
1342 886d86e8SMasahiro Yamadaifeq ($(KBUILD_EXTMOD),)
1343 886d86e8SMasahiro Yamada        build-dir  = $(patsubst %/,%,$(dir $@))
1344 886d86e8SMasahiro Yamada        target-dir = $(dir $@)
1345 886d86e8SMasahiro Yamadaelse
1346 886d86e8SMasahiro Yamada        zap-slash=$(filter-out .,$(patsubst %/,%,$(dir $@)))
1347 886d86e8SMasahiro Yamada        build-dir  = $(KBUILD_EXTMOD)$(if $(zap-slash),/$(zap-slash))
1348 886d86e8SMasahiro Yamada        target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))
1349 886d86e8SMasahiro Yamadaendif
1350 886d86e8SMasahiro Yamada
1351 886d86e8SMasahiro Yamada%.s: %.c prepare scripts FORCE
1352 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1353 886d86e8SMasahiro Yamada%.i: %.c prepare scripts FORCE
1354 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1355 886d86e8SMasahiro Yamada%.o: %.c prepare scripts FORCE
1356 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1357 886d86e8SMasahiro Yamada%.lst: %.c prepare scripts FORCE
1358 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1359 886d86e8SMasahiro Yamada%.s: %.S prepare scripts FORCE
1360 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1361 886d86e8SMasahiro Yamada%.o: %.S prepare scripts FORCE
1362 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1363 886d86e8SMasahiro Yamada%.symtypes: %.c prepare scripts FORCE
1364 886d86e8SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1365 886d86e8SMasahiro Yamada
1366 886d86e8SMasahiro Yamada# Modules
1367 886d86e8SMasahiro Yamada/: prepare scripts FORCE
1368 886d86e8SMasahiro Yamada	$(cmd_crmodverdir)
1369 886d86e8SMasahiro Yamada	$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1370 886d86e8SMasahiro Yamada	$(build)=$(build-dir)
1371 886d86e8SMasahiro Yamada%/: prepare scripts FORCE
1372 886d86e8SMasahiro Yamada	$(cmd_crmodverdir)
1373 886d86e8SMasahiro Yamada	$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1374 886d86e8SMasahiro Yamada	$(build)=$(build-dir)
1375 886d86e8SMasahiro Yamada%.ko: prepare scripts FORCE
1376 886d86e8SMasahiro Yamada	$(cmd_crmodverdir)
1377 886d86e8SMasahiro Yamada	$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1)   \
1378 886d86e8SMasahiro Yamada	$(build)=$(build-dir) $(@:.ko=.o)
1379 886d86e8SMasahiro Yamada	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
1380 886d86e8SMasahiro Yamada
1381 886d86e8SMasahiro Yamada# FIXME Should go into a make.lib or something
1382 886d86e8SMasahiro Yamada# ===========================================================================
1383 886d86e8SMasahiro Yamada
1384 efcf8619SMasahiro Yamadaquiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN   $(wildcard $(rm-dirs)))
1385 efcf8619SMasahiro Yamada      cmd_rmdirs = rm -rf $(rm-dirs)
1386 efcf8619SMasahiro Yamada
1387 efcf8619SMasahiro Yamadaquiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
1388 efcf8619SMasahiro Yamada      cmd_rmfiles = rm -f $(rm-files)
1389 efcf8619SMasahiro Yamada
1390 f9c235fdSMasahiro Yamada# read all saved command lines
1391 f9c235fdSMasahiro Yamada
1392 f9c235fdSMasahiro Yamadatargets := $(wildcard $(sort $(targets)))
1393 f9c235fdSMasahiro Yamadacmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
1394 f9c235fdSMasahiro Yamada
1395 f9c235fdSMasahiro Yamadaifneq ($(cmd_files),)
1396 f9c235fdSMasahiro Yamada  $(cmd_files): ;	# Do not try to update included dependency files
1397 f9c235fdSMasahiro Yamada  include $(cmd_files)
1398 f9c235fdSMasahiro Yamadaendif
1399 f9c235fdSMasahiro Yamada
1400 efcf8619SMasahiro Yamada# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=dir
1401 efcf8619SMasahiro Yamada# Usage:
1402 efcf8619SMasahiro Yamada# $(Q)$(MAKE) $(clean)=dir
1403 efcf8619SMasahiro Yamadaclean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj
1404 efcf8619SMasahiro Yamada
1405 9e414032SMasahiro Yamadaendif	# skip-makefile
1406 9e414032SMasahiro Yamada
1407 9e414032SMasahiro YamadaPHONY += FORCE
1408 9e414032SMasahiro YamadaFORCE:
1409 9e414032SMasahiro Yamada
1410 9e414032SMasahiro Yamada# Declare the contents of the .PHONY variable as phony.  We keep that
1411 9e414032SMasahiro Yamada# information in a variable so we can use it in if_changed and friends.
1412 9e414032SMasahiro Yamada.PHONY: $(PHONY)
1413