xref: /openbmc/u-boot/Makefile (revision 6ab6b2af)
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 d19ad726STom RiniPATCHLEVEL = 01
10 211e4754SWolfgang DenkSUBLEVEL =
11 b44bd2c7STom RiniEXTRAVERSION =
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 6825a95bSMasahiro Yamadaendif
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 5f30f3beSMasahiro YamadaTIMESTAMP_FILE = include/generated/timestamp_autogenerated.h
184 5f30f3beSMasahiro YamadaVERSION_FILE = include/generated/version_autogenerated.h
185 5f30f3beSMasahiro Yamada
186 5f30f3beSMasahiro YamadaHOSTARCH := $(shell uname -m | \
187 5f30f3beSMasahiro Yamada	sed -e s/i.86/x86/ \
188 5f30f3beSMasahiro Yamada	    -e s/sun4u/sparc64/ \
189 5f30f3beSMasahiro Yamada	    -e s/arm.*/arm/ \
190 5f30f3beSMasahiro Yamada	    -e s/sa110/arm/ \
191 5f30f3beSMasahiro Yamada	    -e s/ppc64/powerpc/ \
192 5f30f3beSMasahiro Yamada	    -e s/ppc/powerpc/ \
193 5f30f3beSMasahiro Yamada	    -e s/macppc/powerpc/\
194 5f30f3beSMasahiro Yamada	    -e s/sh.*/sh/)
195 5f30f3beSMasahiro Yamada
196 5f30f3beSMasahiro YamadaHOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
197 5f30f3beSMasahiro Yamada	    sed -e 's/\(cygwin\).*/cygwin/')
198 5f30f3beSMasahiro Yamada
199 5f30f3beSMasahiro Yamadaexport	HOSTARCH HOSTOS
200 5f30f3beSMasahiro Yamada
201 5f30f3beSMasahiro Yamada# Deal with colliding definitions from tcsh etc.
202 5f30f3beSMasahiro YamadaVENDOR=
203 5f30f3beSMasahiro Yamada
204 5f30f3beSMasahiro Yamada#########################################################################
205 5f30f3beSMasahiro Yamada
206 1ea6bcd8SMike Frysinger# set default to nothing for native builds
207 a5284efdSWolfgang Denkifeq ($(HOSTARCH),$(ARCH))
208 1ea6bcd8SMike FrysingerCROSS_COMPILE ?=
209 7ebf7443Swdenkendif
210 7ebf7443Swdenk
211 f6322eb7SMasahiro Yamada# SHELL used by kbuild
212 f6322eb7SMasahiro YamadaCONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
213 f6322eb7SMasahiro Yamada	  else if [ -x /bin/bash ]; then echo /bin/bash; \
214 f6322eb7SMasahiro Yamada	  else echo sh; fi ; fi)
215 f6322eb7SMasahiro Yamada
216 f6322eb7SMasahiro YamadaHOSTCC       = gcc
217 f6322eb7SMasahiro YamadaHOSTCFLAGS   = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
218 f6322eb7SMasahiro Yamada
219 f6322eb7SMasahiro Yamadaifeq ($(HOSTOS),cygwin)
220 f6322eb7SMasahiro YamadaHOSTCFLAGS	+= -ansi
221 f6322eb7SMasahiro Yamadaendif
222 f6322eb7SMasahiro Yamada
223 f6322eb7SMasahiro Yamada# Mac OS X / Darwin's C preprocessor is Apple specific.  It
224 f6322eb7SMasahiro Yamada# generates numerous errors and warnings.  We want to bypass it
225 f6322eb7SMasahiro Yamada# and use GNU C's cpp.	To do this we pass the -traditional-cpp
226 f6322eb7SMasahiro Yamada# option to the compiler.  Note that the -traditional-cpp flag
227 f6322eb7SMasahiro Yamada# DOES NOT have the same semantics as GNU C's flag, all it does
228 f6322eb7SMasahiro Yamada# is invoke the GNU preprocessor in stock ANSI/ISO C fashion.
229 f6322eb7SMasahiro Yamada#
230 f6322eb7SMasahiro Yamada# Apple's linker is similar, thanks to the new 2 stage linking
231 f6322eb7SMasahiro Yamada# multiple symbol definitions are treated as errors, hence the
232 f6322eb7SMasahiro Yamada# -multiply_defined suppress option to turn off this error.
233 f6322eb7SMasahiro Yamada#
234 f6322eb7SMasahiro Yamadaifeq ($(HOSTOS),darwin)
235 f6322eb7SMasahiro Yamada# get major and minor product version (e.g. '10' and '6' for Snow Leopard)
236 f6322eb7SMasahiro YamadaDARWIN_MAJOR_VERSION	= $(shell sw_vers -productVersion | cut -f 1 -d '.')
237 f6322eb7SMasahiro YamadaDARWIN_MINOR_VERSION	= $(shell sw_vers -productVersion | cut -f 2 -d '.')
238 f6322eb7SMasahiro Yamada
239 f6322eb7SMasahiro Yamadaos_x_before	= $(shell if [ $(DARWIN_MAJOR_VERSION) -le $(1) -a \
240 f6322eb7SMasahiro Yamada	$(DARWIN_MINOR_VERSION) -le $(2) ] ; then echo "$(3)"; else echo "$(4)"; fi ;)
241 f6322eb7SMasahiro Yamada
242 f6322eb7SMasahiro Yamada# Snow Leopards build environment has no longer restrictions as described above
243 f6322eb7SMasahiro YamadaHOSTCC       = $(call os_x_before, 10, 5, "cc", "gcc")
244 f6322eb7SMasahiro YamadaHOSTCFLAGS  += $(call os_x_before, 10, 4, "-traditional-cpp")
245 f6322eb7SMasahiro YamadaHOSTLDFLAGS += $(call os_x_before, 10, 5, "-multiply_defined suppress")
246 f6322eb7SMasahiro Yamadaendif
247 f6322eb7SMasahiro Yamada
248 6825a95bSMasahiro Yamada# Decide whether to build built-in, modular, or both.
249 6825a95bSMasahiro Yamada# Normally, just do built-in.
250 6825a95bSMasahiro Yamada
251 6825a95bSMasahiro YamadaKBUILD_MODULES :=
252 6825a95bSMasahiro YamadaKBUILD_BUILTIN := 1
253 6825a95bSMasahiro Yamada
254 6825a95bSMasahiro Yamada#	If we have only "make modules", don't compile built-in objects.
255 6825a95bSMasahiro Yamada#	When we're building modules with modversions, we need to consider
256 6825a95bSMasahiro Yamada#	the built-in objects during the descend as well, in order to
257 6825a95bSMasahiro Yamada#	make sure the checksums are up to date before we record them.
258 6825a95bSMasahiro Yamada
259 6825a95bSMasahiro Yamadaifeq ($(MAKECMDGOALS),modules)
260 6825a95bSMasahiro Yamada  KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
261 6825a95bSMasahiro Yamadaendif
262 6825a95bSMasahiro Yamada
263 6825a95bSMasahiro Yamada#	If we have "make <whatever> modules", compile modules
264 6825a95bSMasahiro Yamada#	in addition to whatever we do anyway.
265 6825a95bSMasahiro Yamada#	Just "make" or "make all" shall build modules as well
266 6825a95bSMasahiro Yamada
267 6825a95bSMasahiro Yamada# U-Boot does not need modules
268 6825a95bSMasahiro Yamada#ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
269 6825a95bSMasahiro Yamada#  KBUILD_MODULES := 1
270 6825a95bSMasahiro Yamada#endif
271 6825a95bSMasahiro Yamada
272 6825a95bSMasahiro Yamada#ifeq ($(MAKECMDGOALS),)
273 6825a95bSMasahiro Yamada#  KBUILD_MODULES := 1
274 6825a95bSMasahiro Yamada#endif
275 6825a95bSMasahiro Yamada
276 6825a95bSMasahiro Yamadaexport KBUILD_MODULES KBUILD_BUILTIN
277 6825a95bSMasahiro Yamadaexport KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
278 6825a95bSMasahiro Yamada
279 6825a95bSMasahiro Yamada# Beautify output
280 6825a95bSMasahiro Yamada# ---------------------------------------------------------------------------
281 6825a95bSMasahiro Yamada#
282 6825a95bSMasahiro Yamada# Normally, we echo the whole command before executing it. By making
283 6825a95bSMasahiro Yamada# that echo $($(quiet)$(cmd)), we now have the possibility to set
284 6825a95bSMasahiro Yamada# $(quiet) to choose other forms of output instead, e.g.
285 6825a95bSMasahiro Yamada#
286 6825a95bSMasahiro Yamada#         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
287 6825a95bSMasahiro Yamada#         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
288 6825a95bSMasahiro Yamada#
289 6825a95bSMasahiro Yamada# If $(quiet) is empty, the whole command will be printed.
290 6825a95bSMasahiro Yamada# If it is set to "quiet_", only the short version will be printed.
291 6825a95bSMasahiro Yamada# If it is set to "silent_", nothing will be printed at all, since
292 6825a95bSMasahiro Yamada# the variable $(silent_cmd_cc_o_c) doesn't exist.
293 6825a95bSMasahiro Yamada#
294 6825a95bSMasahiro Yamada# A simple variant is to prefix commands with $(Q) - that's useful
295 6825a95bSMasahiro Yamada# for commands that shall be hidden in non-verbose mode.
296 6825a95bSMasahiro Yamada#
297 6825a95bSMasahiro Yamada#	$(Q)ln $@ :<
298 6825a95bSMasahiro Yamada#
299 6825a95bSMasahiro Yamada# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
300 6825a95bSMasahiro Yamada# If KBUILD_VERBOSE equals 1 then the above command is displayed.
301 6825a95bSMasahiro Yamada
302 6825a95bSMasahiro Yamadaifeq ($(KBUILD_VERBOSE),1)
303 6825a95bSMasahiro Yamada  quiet =
304 6825a95bSMasahiro Yamada  Q =
305 6825a95bSMasahiro Yamadaelse
306 6825a95bSMasahiro Yamada  quiet=quiet_
307 6825a95bSMasahiro Yamada  Q = @
308 6825a95bSMasahiro Yamadaendif
309 6825a95bSMasahiro Yamada
310 6825a95bSMasahiro Yamada# If the user is running make -s (silent mode), suppress echoing of
311 6825a95bSMasahiro Yamada# commands
312 6825a95bSMasahiro Yamada
313 6825a95bSMasahiro Yamadaifneq ($(filter s% -s%,$(MAKEFLAGS)),)
314 6825a95bSMasahiro Yamada  quiet=silent_
315 6825a95bSMasahiro Yamadaendif
316 6825a95bSMasahiro Yamada
317 6825a95bSMasahiro Yamadaexport quiet Q KBUILD_VERBOSE
318 6825a95bSMasahiro Yamada
319 6825a95bSMasahiro Yamada
320 9e414032SMasahiro Yamada# Look for make include files relative to root of kernel src
321 9e414032SMasahiro YamadaMAKEFLAGS += --include-dir=$(srctree)
322 9e414032SMasahiro Yamada
323 bf4b3de1SMasahiro Yamada# We need some generic definitions (do not try to remake the file).
324 bf4b3de1SMasahiro Yamada$(srctree)/scripts/Kbuild.include: ;
325 bf4b3de1SMasahiro Yamadainclude $(srctree)/scripts/Kbuild.include
326 bf4b3de1SMasahiro Yamada
327 f6322eb7SMasahiro Yamada# Make variables (CC, etc...)
328 f6322eb7SMasahiro Yamada
329 f6322eb7SMasahiro YamadaAS		= $(CROSS_COMPILE)as
330 f6322eb7SMasahiro Yamada# Always use GNU ld
331 f6322eb7SMasahiro Yamadaifneq ($(shell $(CROSS_COMPILE)ld.bfd -v 2> /dev/null),)
332 f6322eb7SMasahiro YamadaLD		= $(CROSS_COMPILE)ld.bfd
333 f6322eb7SMasahiro Yamadaelse
334 f6322eb7SMasahiro YamadaLD		= $(CROSS_COMPILE)ld
335 f6322eb7SMasahiro Yamadaendif
336 f6322eb7SMasahiro YamadaCC		= $(CROSS_COMPILE)gcc
337 f6322eb7SMasahiro YamadaCPP		= $(CC) -E
338 f6322eb7SMasahiro YamadaAR		= $(CROSS_COMPILE)ar
339 f6322eb7SMasahiro YamadaNM		= $(CROSS_COMPILE)nm
340 f6322eb7SMasahiro YamadaLDR		= $(CROSS_COMPILE)ldr
341 f6322eb7SMasahiro YamadaSTRIP		= $(CROSS_COMPILE)strip
342 f6322eb7SMasahiro YamadaOBJCOPY		= $(CROSS_COMPILE)objcopy
343 f6322eb7SMasahiro YamadaOBJDUMP		= $(CROSS_COMPILE)objdump
344 f6322eb7SMasahiro YamadaAWK		= awk
345 f6322eb7SMasahiro YamadaRANLIB		= $(CROSS_COMPILE)RANLIB
346 f6322eb7SMasahiro YamadaDTC		= dtc
347 f6322eb7SMasahiro YamadaCHECK		= sparse
348 f6322eb7SMasahiro Yamada
349 f6322eb7SMasahiro YamadaCHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
350 f6322eb7SMasahiro Yamada		  -Wbitwise -Wno-return-void -D__CHECK_ENDIAN__ $(CF)
351 f6322eb7SMasahiro Yamada
352 2b3c9d3dSMasahiro YamadaKBUILD_CPPFLAGS := -D__KERNEL__
353 2b3c9d3dSMasahiro Yamada
354 2b3c9d3dSMasahiro YamadaKBUILD_CFLAGS   := -Wall -Wstrict-prototypes \
355 2b3c9d3dSMasahiro Yamada		   -Wno-format-security \
356 2b3c9d3dSMasahiro Yamada		   -fno-builtin -ffreestanding
357 2b3c9d3dSMasahiro YamadaKBUILD_AFLAGS   := -D__ASSEMBLY__
358 2b3c9d3dSMasahiro Yamada
359 5f30f3beSMasahiro YamadaU_BOOT_VERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
360 5f30f3beSMasahiro Yamada
361 5f30f3beSMasahiro Yamadaexport VERSION PATCHLEVEL SUBLEVEL U_BOOT_VERSION
362 433b2f1eSMasahiro Yamadaexport ARCH CPU BOARD VENDOR SOC
363 f6322eb7SMasahiro Yamadaexport CONFIG_SHELL HOSTCC HOSTCFLAGS HOSTLDFLAGS CROSS_COMPILE AS LD CC
364 f6322eb7SMasahiro Yamadaexport CPP AR NM LDR STRIP OBJCOPY OBJDUMP
365 f6322eb7SMasahiro Yamadaexport MAKE AWK
366 f6322eb7SMasahiro Yamadaexport DTC CHECK CHECKFLAGS
367 f6322eb7SMasahiro Yamada
368 fea1ca8eSMasahiro Yamadaexport KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE
369 2b3c9d3dSMasahiro Yamadaexport KBUILD_CFLAGS KBUILD_AFLAGS
370 2b3c9d3dSMasahiro Yamada
371 6825a95bSMasahiro Yamada# When compiling out-of-tree modules, put MODVERDIR in the module
372 6825a95bSMasahiro Yamada# tree rather than in the kernel tree. The kernel tree might
373 6825a95bSMasahiro Yamada# even be read-only.
374 6825a95bSMasahiro Yamadaexport MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions
375 6825a95bSMasahiro Yamada
376 6825a95bSMasahiro Yamada# Files to ignore in find ... statements
377 6825a95bSMasahiro Yamada
378 6825a95bSMasahiro YamadaRCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \
379 6825a95bSMasahiro Yamada		   -o -name .pc -o -name .hg -o -name .git \) -prune -o
380 6825a95bSMasahiro Yamadaexport RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
381 6825a95bSMasahiro Yamada			 --exclude CVS --exclude .pc --exclude .hg --exclude .git
382 6825a95bSMasahiro Yamada
383 6825a95bSMasahiro Yamada# ===========================================================================
384 6825a95bSMasahiro Yamada# Rules shared between *config targets and build targets
385 6825a95bSMasahiro Yamada
386 6825a95bSMasahiro Yamada# Basic helpers built in scripts/
387 6825a95bSMasahiro YamadaPHONY += scripts_basic
388 6825a95bSMasahiro Yamadascripts_basic:
389 6825a95bSMasahiro Yamada	$(Q)$(MAKE) $(build)=scripts/basic
390 6825a95bSMasahiro Yamada	$(Q)rm -f .tmp_quiet_recordmcount
391 6825a95bSMasahiro Yamada
392 6825a95bSMasahiro Yamada# To avoid any implicit rule to kick in, define an empty command.
393 6825a95bSMasahiro Yamadascripts/basic/%: scripts_basic ;
394 6825a95bSMasahiro Yamada
395 3341bfecSMasahiro YamadaPHONY += outputmakefile
396 3341bfecSMasahiro Yamada# outputmakefile generates a Makefile in the output directory, if using a
397 3341bfecSMasahiro Yamada# separate output directory. This allows convenient use of make in the
398 3341bfecSMasahiro Yamada# output directory.
399 3341bfecSMasahiro Yamadaoutputmakefile:
400 3341bfecSMasahiro Yamadaifneq ($(KBUILD_SRC),)
401 3341bfecSMasahiro Yamada	$(Q)ln -fsn $(srctree) source
402 3341bfecSMasahiro Yamada	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
403 3341bfecSMasahiro Yamada	    $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
404 3341bfecSMasahiro Yamadaendif
405 3341bfecSMasahiro Yamada
406 433b2f1eSMasahiro Yamada# To make sure we do not include .config for any of the *config targets
407 433b2f1eSMasahiro Yamada# catch them early, and hand them over to scripts/kconfig/Makefile
408 433b2f1eSMasahiro Yamada# It is allowed to specify more targets when calling make, including
409 433b2f1eSMasahiro Yamada# mixing *config targets and build targets.
410 433b2f1eSMasahiro Yamada# For example 'make oldconfig all'.
411 433b2f1eSMasahiro Yamada# Detect when mixed targets is specified, and make a second invocation
412 433b2f1eSMasahiro Yamada# of make so .config is not included in this case either (for *config).
413 6825a95bSMasahiro Yamada
414 433b2f1eSMasahiro Yamadano-dot-config-targets := clean clobber mrproper distclean \
415 433b2f1eSMasahiro Yamada			 cscope TAGS %tags help %docs check% coccicheck \
416 433b2f1eSMasahiro Yamada			 backup
417 2b3c9d3dSMasahiro Yamada
418 433b2f1eSMasahiro Yamadaconfig-targets := 0
419 433b2f1eSMasahiro Yamadamixed-targets  := 0
420 433b2f1eSMasahiro Yamadadot-config     := 1
421 2b3c9d3dSMasahiro Yamada
422 433b2f1eSMasahiro Yamadaifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
423 433b2f1eSMasahiro Yamada	ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
424 433b2f1eSMasahiro Yamada		dot-config := 0
425 2b3c9d3dSMasahiro Yamada	endif
426 2b3c9d3dSMasahiro Yamadaendif
427 2b3c9d3dSMasahiro Yamada
428 433b2f1eSMasahiro Yamadaifeq ($(KBUILD_EXTMOD),)
429 433b2f1eSMasahiro Yamada        ifneq ($(filter config %config,$(MAKECMDGOALS)),)
430 433b2f1eSMasahiro Yamada                config-targets := 1
431 433b2f1eSMasahiro Yamada                ifneq ($(filter-out config %config,$(MAKECMDGOALS)),)
432 433b2f1eSMasahiro Yamada                        mixed-targets := 1
433 433b2f1eSMasahiro Yamada                endif
434 433b2f1eSMasahiro Yamada        endif
435 433b2f1eSMasahiro Yamadaendif
436 433b2f1eSMasahiro Yamada
437 433b2f1eSMasahiro Yamadaifeq ($(mixed-targets),1)
438 433b2f1eSMasahiro Yamada# ===========================================================================
439 433b2f1eSMasahiro Yamada# We're called with mixed targets (*config and build targets).
440 433b2f1eSMasahiro Yamada# Handle them one by one.
441 433b2f1eSMasahiro Yamada
442 53bca5abSMasahiro YamadaPHONY += $(MAKECMDGOALS) build-one-by-one
443 53bca5abSMasahiro Yamada
444 53bca5abSMasahiro Yamada$(MAKECMDGOALS): build-one-by-one
445 53bca5abSMasahiro Yamada	@:
446 53bca5abSMasahiro Yamada
447 53bca5abSMasahiro Yamadabuild-one-by-one:
448 53bca5abSMasahiro Yamada	$(Q)set -e; \
449 53bca5abSMasahiro Yamada	for i in $(MAKECMDGOALS); do \
450 53bca5abSMasahiro Yamada		$(MAKE) -f $(srctree)/Makefile $$i; \
451 53bca5abSMasahiro Yamada	done
452 433b2f1eSMasahiro Yamada
453 433b2f1eSMasahiro Yamadaelse
454 433b2f1eSMasahiro Yamadaifeq ($(config-targets),1)
455 433b2f1eSMasahiro Yamada# ===========================================================================
456 433b2f1eSMasahiro Yamada# *config targets only - make sure prerequisites are updated, and descend
457 433b2f1eSMasahiro Yamada# in scripts/kconfig to make the *config target
458 433b2f1eSMasahiro Yamada
459 433b2f1eSMasahiro Yamada# Read arch specific Makefile to set KBUILD_DEFCONFIG as needed.
460 433b2f1eSMasahiro Yamada# KBUILD_DEFCONFIG may point out an alternative default configuration
461 433b2f1eSMasahiro Yamada# used for 'make defconfig'
462 433b2f1eSMasahiro Yamada
463 3341bfecSMasahiro Yamada%_config:: outputmakefile
464 433b2f1eSMasahiro Yamada	@$(MKCONFIG) -A $(@:_config=)
465 433b2f1eSMasahiro Yamada
466 433b2f1eSMasahiro Yamadaelse
467 433b2f1eSMasahiro Yamada# ===========================================================================
468 433b2f1eSMasahiro Yamada# Build targets only - this includes vmlinux, arch specific targets, clean
469 433b2f1eSMasahiro Yamada# targets and others. In general all targets except *config targets.
470 433b2f1eSMasahiro Yamada
471 433b2f1eSMasahiro Yamada# load ARCH, BOARD, and CPU configuration
472 433b2f1eSMasahiro Yamada-include include/config.mk
473 433b2f1eSMasahiro Yamada
474 433b2f1eSMasahiro Yamadaifeq ($(dot-config),1)
475 433b2f1eSMasahiro Yamada# Read in config
476 433b2f1eSMasahiro Yamada-include include/autoconf.mk
477 433b2f1eSMasahiro Yamada-include include/autoconf.mk.dep
478 433b2f1eSMasahiro Yamada
479 92b197f0SWolfgang Denk# load other configuration
480 433b2f1eSMasahiro Yamadainclude $(srctree)/config.mk
481 92b197f0SWolfgang Denk
482 433b2f1eSMasahiro Yamadaifeq ($(wildcard include/config.mk),)
483 433b2f1eSMasahiro Yamada$(error "System not configured - see README")
484 ced0715dSMasahiro Yamadaendif
485 ced0715dSMasahiro Yamada
486 ced0715dSMasahiro Yamadaifeq ($(__HAVE_ARCH_GENERIC_BOARD),)
487 ced0715dSMasahiro Yamadaifneq ($(CONFIG_SYS_GENERIC_BOARD),)
488 433b2f1eSMasahiro Yamada$(error Your architecture does not support generic board. \
489 ced0715dSMasahiro YamadaPlease undefined CONFIG_SYS_GENERIC_BOARD in your board config file)
490 ced0715dSMasahiro Yamadaendif
491 fada9e20SSimon Glassendif
492 6825a95bSMasahiro Yamada
493 d51dfff7SIlya Yanok# If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use
494 d51dfff7SIlya Yanok# that (or fail if absent).  Otherwise, search for a linker script in a
495 d51dfff7SIlya Yanok# standard location.
496 d51dfff7SIlya Yanok
497 ee60197eSSimon GlassLDSCRIPT_MAKEFILE_DIR = $(dir $(LDSCRIPT))
498 ee60197eSSimon Glass
499 d51dfff7SIlya Yanokifndef LDSCRIPT
500 d51dfff7SIlya Yanok	#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug
501 d51dfff7SIlya Yanok	ifdef CONFIG_SYS_LDSCRIPT
502 d51dfff7SIlya Yanok		# need to strip off double quotes
503 a8c07541SMasahiro Yamada		LDSCRIPT := $(CONFIG_SYS_LDSCRIPT:"%"=%)
504 d51dfff7SIlya Yanok	endif
505 d51dfff7SIlya Yanokendif
506 d51dfff7SIlya Yanok
507 ee60197eSSimon Glass# If there is no specified link script, we look in a number of places for it
508 d51dfff7SIlya Yanokifndef LDSCRIPT
509 d51dfff7SIlya Yanok	ifeq ($(CONFIG_NAND_U_BOOT),y)
510 d51dfff7SIlya Yanok		LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
511 d51dfff7SIlya Yanok		ifeq ($(wildcard $(LDSCRIPT)),)
512 d51dfff7SIlya Yanok			LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot-nand.lds
513 d51dfff7SIlya Yanok		endif
514 d51dfff7SIlya Yanok	endif
515 d51dfff7SIlya Yanok	ifeq ($(wildcard $(LDSCRIPT)),)
516 d51dfff7SIlya Yanok		LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
517 d51dfff7SIlya Yanok	endif
518 d51dfff7SIlya Yanok	ifeq ($(wildcard $(LDSCRIPT)),)
519 d51dfff7SIlya Yanok		LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot.lds
520 d51dfff7SIlya Yanok	endif
521 d51dfff7SIlya Yanok	ifeq ($(wildcard $(LDSCRIPT)),)
522 ee60197eSSimon Glass		LDSCRIPT := $(TOPDIR)/arch/$(ARCH)/cpu/u-boot.lds
523 ee60197eSSimon Glass		# We don't expect a Makefile here
524 ee60197eSSimon Glass		LDSCRIPT_MAKEFILE_DIR =
525 ee60197eSSimon Glass	endif
526 ee60197eSSimon Glass	ifeq ($(wildcard $(LDSCRIPT)),)
527 d51dfff7SIlya Yanok$(error could not find linker script)
528 d51dfff7SIlya Yanok	endif
529 d51dfff7SIlya Yanokendif
530 d51dfff7SIlya Yanok
531 433b2f1eSMasahiro Yamadaelse
532 433b2f1eSMasahiro Yamada
533 433b2f1eSMasahiro Yamada
534 433b2f1eSMasahiro Yamadaendif # $(dot-config)
535 433b2f1eSMasahiro Yamada
536 433b2f1eSMasahiro YamadaKBUILD_CFLAGS += -Os #-fomit-frame-pointer
537 433b2f1eSMasahiro Yamada
538 433b2f1eSMasahiro Yamadaifdef BUILD_TAG
539 433b2f1eSMasahiro YamadaKBUILD_CFLAGS += -DBUILD_TAG='"$(BUILD_TAG)"'
540 433b2f1eSMasahiro Yamadaendif
541 433b2f1eSMasahiro Yamada
542 433b2f1eSMasahiro YamadaKBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
543 433b2f1eSMasahiro Yamada
544 433b2f1eSMasahiro YamadaKBUILD_CFLAGS	+= -g
545 433b2f1eSMasahiro Yamada# $(KBUILD_AFLAGS) sets -g, which causes gcc to pass a suitable -g<format>
546 433b2f1eSMasahiro Yamada# option to the assembler.
547 433b2f1eSMasahiro YamadaKBUILD_AFLAGS	+= -g
548 433b2f1eSMasahiro Yamada
549 433b2f1eSMasahiro Yamada# Report stack usage if supported
550 433b2f1eSMasahiro YamadaKBUILD_CFLAGS += $(call cc-option,-fstack-usage)
551 433b2f1eSMasahiro Yamada
552 433b2f1eSMasahiro YamadaKBUILD_CFLAGS += $(call cc-option,-Wno-format-nonliteral)
553 433b2f1eSMasahiro Yamada
554 433b2f1eSMasahiro Yamada# turn jbsr into jsr for m68k
555 433b2f1eSMasahiro Yamadaifeq ($(ARCH),m68k)
556 433b2f1eSMasahiro Yamadaifeq ($(findstring 3.4,$(shell $(CC) --version)),3.4)
557 433b2f1eSMasahiro YamadaKBUILD_AFLAGS += -Wa,-gstabs,-S
558 433b2f1eSMasahiro Yamadaendif
559 433b2f1eSMasahiro Yamadaendif
560 433b2f1eSMasahiro Yamada
561 433b2f1eSMasahiro Yamadaifneq ($(CONFIG_SYS_TEXT_BASE),)
562 433b2f1eSMasahiro YamadaKBUILD_CPPFLAGS += -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE)
563 433b2f1eSMasahiro Yamadaendif
564 433b2f1eSMasahiro Yamada
565 433b2f1eSMasahiro Yamadaexport CONFIG_SYS_TEXT_BASE
566 433b2f1eSMasahiro Yamada
567 433b2f1eSMasahiro Yamada# Use UBOOTINCLUDE when you must reference the include/ directory.
568 433b2f1eSMasahiro Yamada# Needed to be compatible with the O= option
569 433b2f1eSMasahiro YamadaUBOOTINCLUDE    :=
570 433b2f1eSMasahiro Yamadaifneq ($(OBJTREE),$(SRCTREE))
571 433b2f1eSMasahiro YamadaUBOOTINCLUDE	+= -I$(OBJTREE)/include
572 433b2f1eSMasahiro Yamadaendif
573 433b2f1eSMasahiro YamadaUBOOTINCLUDE	+= -I$(srctree)/include \
574 433b2f1eSMasahiro Yamada		-I$(srctree)/arch/$(ARCH)/include
575 433b2f1eSMasahiro Yamada
576 433b2f1eSMasahiro YamadaNOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
577 433b2f1eSMasahiro YamadaCHECKFLAGS     += $(NOSTDINC_FLAGS)
578 433b2f1eSMasahiro Yamada
579 433b2f1eSMasahiro Yamada# FIX ME
580 433b2f1eSMasahiro Yamadacpp_flags := $(KBUILD_CPPFLAGS) $(CPPFLAGS) $(UBOOTINCLUDE) $(NOSTDINC_FLAGS)
581 433b2f1eSMasahiro Yamadac_flags := $(KBUILD_CFLAGS) $(cpp_flags)
582 433b2f1eSMasahiro Yamada
583 656de6b8SMasahiro Yamada.PHONY : $(VERSION_FILE) $(TIMESTAMP_FILE)
584 433b2f1eSMasahiro Yamada
585 7ebf7443Swdenk#########################################################################
586 7ebf7443Swdenk# U-Boot objects....order is important (i.e. start must be first)
587 7ebf7443Swdenk
588 e8a8b824SMasahiro Yamadahead-y := $(CPUDIR)/start.o
589 e8a8b824SMasahiro Yamadahead-$(CONFIG_4xx) += arch/powerpc/cpu/ppc4xx/resetvec.o
590 e8a8b824SMasahiro Yamadahead-$(CONFIG_MPC85xx) += arch/powerpc/cpu/mpc85xx/resetvec.o
591 7ebf7443Swdenk
592 9e414032SMasahiro YamadaHAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(srctree)/board/$(VENDOR)/common/Makefile),y,n)
593 8b5a0264SDaniel Schwierzeck
594 656de6b8SMasahiro Yamadalibs-y += lib/
595 656de6b8SMasahiro Yamadalibs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
596 656de6b8SMasahiro Yamadalibs-y += $(CPUDIR)/
597 1d9f4105Swdenkifdef SOC
598 656de6b8SMasahiro Yamadalibs-y += $(CPUDIR)/$(SOC)/
599 1d9f4105Swdenkendif
600 656de6b8SMasahiro Yamadalibs-$(CONFIG_IXP4XX_NPE) += drivers/net/npe/
601 656de6b8SMasahiro Yamadalibs-$(CONFIG_OF_EMBED) += dts/
602 656de6b8SMasahiro Yamadalibs-y += arch/$(ARCH)/lib/
603 656de6b8SMasahiro Yamadalibs-y += fs/
604 656de6b8SMasahiro Yamadalibs-y += net/
605 656de6b8SMasahiro Yamadalibs-y += disk/
606 656de6b8SMasahiro Yamadalibs-y += drivers/
607 656de6b8SMasahiro Yamadalibs-y += drivers/dma/
608 656de6b8SMasahiro Yamadalibs-y += drivers/gpio/
609 656de6b8SMasahiro Yamadalibs-y += drivers/i2c/
610 656de6b8SMasahiro Yamadalibs-y += drivers/input/
611 656de6b8SMasahiro Yamadalibs-y += drivers/mmc/
612 656de6b8SMasahiro Yamadalibs-y += drivers/mtd/
613 656de6b8SMasahiro Yamadalibs-$(CONFIG_CMD_NAND) += drivers/mtd/nand/
614 656de6b8SMasahiro Yamadalibs-y += drivers/mtd/onenand/
615 656de6b8SMasahiro Yamadalibs-$(CONFIG_CMD_UBI) += drivers/mtd/ubi/
616 656de6b8SMasahiro Yamadalibs-y += drivers/mtd/spi/
617 656de6b8SMasahiro Yamadalibs-y += drivers/net/
618 656de6b8SMasahiro Yamadalibs-y += drivers/net/phy/
619 656de6b8SMasahiro Yamadalibs-y += drivers/pci/
620 656de6b8SMasahiro Yamadalibs-y += drivers/power/ \
621 e2906a59SMasahiro Yamada	drivers/power/fuel_gauge/ \
622 e2906a59SMasahiro Yamada	drivers/power/mfd/ \
623 e2906a59SMasahiro Yamada	drivers/power/pmic/ \
624 e2906a59SMasahiro Yamada	drivers/power/battery/
625 656de6b8SMasahiro Yamadalibs-y += drivers/spi/
626 656de6b8SMasahiro Yamadalibs-$(CONFIG_FMAN_ENET) += drivers/net/fm/
627 656de6b8SMasahiro Yamadalibs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
628 656de6b8SMasahiro Yamadalibs-y += drivers/serial/
629 656de6b8SMasahiro Yamadalibs-y += drivers/usb/eth/
630 656de6b8SMasahiro Yamadalibs-y += drivers/usb/gadget/
631 656de6b8SMasahiro Yamadalibs-y += drivers/usb/host/
632 656de6b8SMasahiro Yamadalibs-y += drivers/usb/musb/
633 656de6b8SMasahiro Yamadalibs-y += drivers/usb/musb-new/
634 656de6b8SMasahiro Yamadalibs-y += drivers/usb/phy/
635 656de6b8SMasahiro Yamadalibs-y += drivers/usb/ulpi/
636 656de6b8SMasahiro Yamadalibs-y += common/
637 656de6b8SMasahiro Yamadalibs-y += lib/libfdt/
638 656de6b8SMasahiro Yamadalibs-$(CONFIG_API) += api/
639 656de6b8SMasahiro Yamadalibs-$(CONFIG_HAS_POST) += post/
640 656de6b8SMasahiro Yamadalibs-y += test/
641 f9328639SMarian Balakowicz
642 24e8bee5SAlison Wangifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35 mxs vf610))
643 656de6b8SMasahiro Yamadalibs-y += arch/$(ARCH)/imx-common/
644 18936ee2SJason Liuendif
645 18936ee2SJason Liu
646 656de6b8SMasahiro Yamadalibs-$(CONFIG_ARM) += arch/arm/cpu/
647 656de6b8SMasahiro Yamadalibs-$(CONFIG_PPC) += arch/powerpc/cpu/
648 852bd07cSMinkyu Kang
649 656de6b8SMasahiro Yamadalibs-y += board/$(BOARDDIR)/
650 08e39a84SMasahiro Yamada
651 656de6b8SMasahiro Yamadalibs-y := $(sort $(libs-y))
652 656de6b8SMasahiro Yamada
653 656de6b8SMasahiro Yamadau-boot-dirs	:= $(patsubst %/,%,$(filter %/, $(libs-y))) tools examples
654 656de6b8SMasahiro Yamada
655 656de6b8SMasahiro Yamadau-boot-alldirs	:= $(sort $(u-boot-dirs) $(patsubst %/,%,$(filter %/, $(libs-))))
656 656de6b8SMasahiro Yamada
657 656de6b8SMasahiro Yamadalibs-y		:= $(patsubst %/, %/built-in.o, $(libs-y))
658 656de6b8SMasahiro Yamada
659 656de6b8SMasahiro Yamadau-boot-init := $(head-y)
660 656de6b8SMasahiro Yamadau-boot-main := $(libs-y)
661 656de6b8SMasahiro Yamada
662 a8c7c708Swdenk
663 4f7cb08eSwdenk# Add GCC lib
664 52b1bf2cSWolfgang Denkifdef USE_PRIVATE_LIBGCC
665 52b1bf2cSWolfgang Denkifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
666 6825a95bSMasahiro YamadaPLATFORM_LIBGCC = $(OBJTREE)/arch/$(ARCH)/lib/lib.a
667 52b1bf2cSWolfgang Denkelse
668 52b1bf2cSWolfgang DenkPLATFORM_LIBGCC = -L $(USE_PRIVATE_LIBGCC) -lgcc
669 52b1bf2cSWolfgang Denkendif
670 52b1bf2cSWolfgang Denkelse
671 6825a95bSMasahiro YamadaPLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(c_flags) -print-libgcc-file-name`) -lgcc
672 52b1bf2cSWolfgang Denkendif
673 52b1bf2cSWolfgang DenkPLATFORM_LIBS += $(PLATFORM_LIBGCC)
674 52b1bf2cSWolfgang Denkexport PLATFORM_LIBS
675 3d3befa7Swdenk
676 6ac9f479SMike Frysinger# Special flags for CPP when processing the linker script.
677 6ac9f479SMike Frysinger# Pass the version down so we can handle backwards compatibility
678 6ac9f479SMike Frysinger# on the fly.
679 6ac9f479SMike FrysingerLDPPFLAGS += \
680 6ac9f479SMike Frysinger	-include $(TOPDIR)/include/u-boot/u-boot.lds.h \
681 7e6403a6SSimon Glass	-DCPUDIR=$(CPUDIR) \
682 6ac9f479SMike Frysinger	$(shell $(LD) --version | \
683 6ac9f479SMike Frysinger	  sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p')
684 6ac9f479SMike Frysinger
685 7ebf7443Swdenk#########################################################################
686 bdccc4feSwdenk#########################################################################
687 7ebf7443Swdenk
688 f3a14d37SMike Frysingerifneq ($(CONFIG_BOARD_SIZE_LIMIT),)
689 f3a14d37SMike FrysingerBOARD_SIZE_CHECK = \
690 f3a14d37SMike Frysinger	@actual=`wc -c $@ | awk '{print $$1}'`; \
691 d060e6f4SJoe Hershberger	limit=`printf "%d" $(CONFIG_BOARD_SIZE_LIMIT)`; \
692 f3a14d37SMike Frysinger	if test $$actual -gt $$limit; then \
693 d060e6f4SJoe Hershberger		echo "$@ exceeds file size limit:" >&2 ; \
694 d060e6f4SJoe Hershberger		echo "  limit:  $$limit bytes" >&2 ; \
695 d060e6f4SJoe Hershberger		echo "  actual: $$actual bytes" >&2 ; \
696 d060e6f4SJoe Hershberger		echo "  excess: $$((actual - limit)) bytes" >&2; \
697 f3a14d37SMike Frysinger		exit 1; \
698 f3a14d37SMike Frysinger	fi
699 f3a14d37SMike Frysingerelse
700 f3a14d37SMike FrysingerBOARD_SIZE_CHECK =
701 f3a14d37SMike Frysingerendif
702 f3a14d37SMike Frysinger
703 8137af19SScott Wood# Statically apply RELA-style relocations (currently arm64 only)
704 8137af19SScott Woodifneq ($(CONFIG_STATIC_RELA),)
705 8137af19SScott Wood# $(1) is u-boot ELF, $(2) is u-boot bin, $(3) is text base
706 8137af19SScott WoodDO_STATIC_RELA = \
707 8137af19SScott Wood	start=$$($(NM) $(1) | grep __rel_dyn_start | cut -f 1 -d ' '); \
708 8137af19SScott Wood	end=$$($(NM) $(1) | grep __rel_dyn_end | cut -f 1 -d ' '); \
709 9e414032SMasahiro Yamada	tools/relocate-rela $(2) $(3) $$start $$end
710 8137af19SScott Woodelse
711 8137af19SScott WoodDO_STATIC_RELA =
712 8137af19SScott Woodendif
713 8137af19SScott Wood
714 3e88337bSMike Frysinger# Always append ALL so that arch config.mk's can add custom ones
715 9e414032SMasahiro YamadaALL-y += u-boot.srec u-boot.bin System.map
716 e935a374SHaiying Wang
717 9e414032SMasahiro YamadaALL-$(CONFIG_NAND_U_BOOT) += u-boot-nand.bin
718 9e414032SMasahiro YamadaALL-$(CONFIG_ONENAND_U_BOOT) += u-boot-onenand.bin
719 9e414032SMasahiro YamadaALL-$(CONFIG_RAMBOOT_PBL) += u-boot.pbl
720 9e414032SMasahiro YamadaALL-$(CONFIG_SPL) += spl/u-boot-spl.bin
721 9e414032SMasahiro YamadaALL-$(CONFIG_SPL_FRAMEWORK) += u-boot.img
722 9e414032SMasahiro YamadaALL-$(CONFIG_TPL) += tpl/u-boot-tpl.bin
723 *6ab6b2afSMasahiro YamadaALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb.bin
724 b343bbb5SVadim Bendeburyifneq ($(CONFIG_SPL_TARGET),)
725 9e414032SMasahiro YamadaALL-$(CONFIG_SPL) += $(CONFIG_SPL_TARGET:"%"=%)
726 b343bbb5SVadim Bendeburyendif
727 9e414032SMasahiro YamadaALL-$(CONFIG_REMAKE_ELF) += u-boot.elf
728 7ebf7443Swdenk
729 12b7b70cSAllen Martin# enable combined SPL/u-boot/dtb rules for tegra
730 6d6c0baeSTom Warrenifneq ($(CONFIG_TEGRA),)
731 7dcd3a21SVidya Sagarifeq ($(CONFIG_SPL),y)
732 12b7b70cSAllen Martinifeq ($(CONFIG_OF_SEPARATE),y)
733 9e414032SMasahiro YamadaALL-y += u-boot-dtb-tegra.bin
734 12b7b70cSAllen Martinelse
735 9e414032SMasahiro YamadaALL-y += u-boot-nodtb-tegra.bin
736 12b7b70cSAllen Martinendif
737 12b7b70cSAllen Martinendif
738 7dcd3a21SVidya Sagarendif
739 12b7b70cSAllen Martin
740 433b2f1eSMasahiro YamadaLDFLAGS_u-boot += -T u-boot.lds $(LDFLAGS_FINAL)
741 433b2f1eSMasahiro Yamadaifneq ($(CONFIG_SYS_TEXT_BASE),)
742 433b2f1eSMasahiro YamadaLDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
743 433b2f1eSMasahiro Yamadaendif
744 433b2f1eSMasahiro Yamada
745 656de6b8SMasahiro Yamadaall:		$(ALL-y)
746 7ebf7443Swdenk
747 *6ab6b2afSMasahiro YamadaPHONY += dtbs
748 *6ab6b2afSMasahiro Yamadadtbs dts/dt.dtb: checkdtc u-boot
749 *6ab6b2afSMasahiro Yamada	$(Q)$(MAKE) $(build)=dts dtbs
750 2c0f79e4SSimon Glass
751 *6ab6b2afSMasahiro Yamadau-boot-dtb.bin: u-boot.bin dts/dt.dtb
752 2c0f79e4SSimon Glass		cat $^ >$@
753 2c0f79e4SSimon Glass
754 9e414032SMasahiro Yamadau-boot.hex:	u-boot
755 6310eb9dSwdenk		$(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@
756 6310eb9dSwdenk
757 9e414032SMasahiro Yamadau-boot.srec:	u-boot
758 47ed5dd0SAlbert ARIBAUD		$(OBJCOPY) ${OBJCFLAGS} -O srec $< $@
759 7ebf7443Swdenk
760 9e414032SMasahiro Yamadau-boot.bin:	u-boot
761 7ebf7443Swdenk		$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
762 8137af19SScott Wood		$(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
763 f3a14d37SMike Frysinger		$(BOARD_SIZE_CHECK)
764 7ebf7443Swdenk
765 9e414032SMasahiro Yamadau-boot.ldr:	u-boot
766 76d82187SMike Frysinger		$(CREATE_LDR_ENV)
767 68e56324SMike Frysinger		$(LDR) -T $(CONFIG_BFIN_CPU) -c $@ $< $(LDR_FLAGS)
768 f3a14d37SMike Frysinger		$(BOARD_SIZE_CHECK)
769 94a91e24SMike Frysinger
770 9e414032SMasahiro Yamadau-boot.ldr.hex:	u-boot.ldr
771 94a91e24SMike Frysinger		$(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ -I binary
772 94a91e24SMike Frysinger
773 9e414032SMasahiro Yamadau-boot.ldr.srec:	u-boot.ldr
774 94a91e24SMike Frysinger		$(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ -I binary
775 94a91e24SMike Frysinger
776 b40bda6bSStefan Roese#
777 b40bda6bSStefan Roese# U-Boot entry point, needed for booting of full-blown U-Boot
778 b40bda6bSStefan Roese# from the SPL U-Boot version.
779 b40bda6bSStefan Roese#
780 b40bda6bSStefan Roeseifndef CONFIG_SYS_UBOOT_START
781 b40bda6bSStefan RoeseCONFIG_SYS_UBOOT_START := 0
782 b40bda6bSStefan Roeseendif
783 b40bda6bSStefan Roese
784 9e414032SMasahiro Yamadau-boot.img:	u-boot.bin
785 9e414032SMasahiro Yamada		tools/mkimage -A $(ARCH) -T firmware -C none \
786 b40bda6bSStefan Roese		-O u-boot -a $(CONFIG_SYS_TEXT_BASE) \
787 b40bda6bSStefan Roese		-e $(CONFIG_SYS_UBOOT_START) \
788 881a87ecSWolfgang Denk		-n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \
789 bdccc4feSwdenk			sed -e 's/"[	 ]*$$/ for $(BOARD) board"/') \
790 bdccc4feSwdenk		-d $< $@
791 bdccc4feSwdenk
792 656de6b8SMasahiro Yamadau-boot.imx: u-boot.bin
793 9e414032SMasahiro Yamada		$(MAKE) $(build)=arch/arm/imx-common $(objtree)/u-boot.imx
794 8edcde5eSStefano Babic
795 9e414032SMasahiro Yamadau-boot.kwb:       u-boot.bin
796 9e414032SMasahiro Yamada		tools/mkimage -n $(CONFIG_SYS_KWD_CONFIG) -T kwbimage \
797 2ea88b06SEric Cooper		-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) -d $< $@
798 aa0c7a86SPrafulla Wadaskar
799 9e414032SMasahiro Yamadau-boot.pbl:	u-boot.bin
800 9e414032SMasahiro Yamada		tools/mkimage -n $(CONFIG_SYS_FSL_PBL_RCW) \
801 690e4258SPrabhakar Kushwaha		-R $(CONFIG_SYS_FSL_PBL_PBI) -T pblimage \
802 5d898a00SShaohui Xie		-d $< $@
803 5d898a00SShaohui Xie
804 9e414032SMasahiro Yamadau-boot.sha1:	u-boot.bin
805 9e414032SMasahiro Yamada		tools/ubsha1 u-boot.bin
806 566a494fSHeiko Schocher
807 9e414032SMasahiro Yamadau-boot.dis:	u-boot
808 7ebf7443Swdenk		$(OBJDUMP) -d $< > $@
809 7ebf7443Swdenk
810 3aa29de0SYing Zhang# $@ is output, $(1) and $(2) are inputs, $(3) is padded intermediate,
811 3aa29de0SYing Zhang# $(4) is pad-to
812 3aa29de0SYing ZhangSPL_PAD_APPEND = \
813 3aa29de0SYing Zhang		$(OBJCOPY) ${OBJCFLAGS} --pad-to=$(4) -I binary -O binary \
814 9e414032SMasahiro Yamada		$(1) $(3); \
815 9e414032SMasahiro Yamada		cat $(3) $(2) > $@; \
816 9e414032SMasahiro Yamada		rm $(3)
817 74752baaSScott Wood
818 3aa29de0SYing Zhangifdef CONFIG_TPL
819 9e414032SMasahiro YamadaSPL_PAYLOAD := tpl/u-boot-with-tpl.bin
820 3aa29de0SYing Zhangelse
821 9e414032SMasahiro YamadaSPL_PAYLOAD := u-boot.bin
822 3aa29de0SYing Zhangendif
823 74752baaSScott Wood
824 9e414032SMasahiro Yamadau-boot-with-spl.bin: spl/u-boot-spl.bin $(SPL_PAYLOAD)
825 3aa29de0SYing Zhang		$(call SPL_PAD_APPEND,$<,$(SPL_PAYLOAD),spl/u-boot-spl-pad.bin,$(CONFIG_SPL_PAD_TO))
826 3aa29de0SYing Zhang
827 9e414032SMasahiro Yamadatpl/u-boot-with-tpl.bin: tpl/u-boot-tpl.bin u-boot.bin
828 9e414032SMasahiro Yamada		$(call SPL_PAD_APPEND,$<,u-boot.bin,tpl/u-boot-tpl-pad.bin,$(CONFIG_TPL_PAD_TO))
829 7816f2cfSHeiko Schocher
830 9e414032SMasahiro Yamadau-boot-with-spl.imx: spl/u-boot-spl.bin u-boot.bin
831 9e414032SMasahiro Yamada		$(MAKE) $(build)=arch/arm/imx-common \
832 ba597609SBenoît Thébaudeau			$(OBJTREE)/u-boot-with-spl.imx
833 ba597609SBenoît Thébaudeau
834 9e414032SMasahiro Yamadau-boot-with-nand-spl.imx: spl/u-boot-spl.bin u-boot.bin
835 9e414032SMasahiro Yamada		$(MAKE) $(build)=arch/arm/imx-common \
836 7d5a5c79SBenoît Thébaudeau			$(OBJTREE)/u-boot-with-nand-spl.imx
837 7d5a5c79SBenoît Thébaudeau
838 9e414032SMasahiro Yamadau-boot.ubl:       u-boot-with-spl.bin
839 9e414032SMasahiro Yamada		tools/mkimage -n $(UBL_CONFIG) -T ublimage \
840 9e414032SMasahiro Yamada		-e $(CONFIG_SYS_TEXT_BASE) -d $< u-boot.ubl
841 277f00f5SJosé Miguel Gonçalves
842 9e414032SMasahiro Yamadau-boot.ais:       spl/u-boot-spl.bin u-boot.img
843 9e414032SMasahiro Yamada		tools/mkimage -s -n $(if $(CONFIG_AIS_CONFIG_FILE),$(srctree)/$(CONFIG_AIS_CONFIG_FILE:"%"=%),"/dev/null") \
844 6d660e77SSughosh Ganu			-T aisimage \
845 d36d8859SChristian Riesch			-e $(CONFIG_SPL_TEXT_BASE) \
846 9e414032SMasahiro Yamada			-d spl/u-boot-spl.bin \
847 9e414032SMasahiro Yamada			spl/u-boot-spl.ais
848 d36d8859SChristian Riesch		$(OBJCOPY) ${OBJCFLAGS} -I binary \
849 d36d8859SChristian Riesch			--pad-to=$(CONFIG_SPL_MAX_SIZE) -O binary \
850 9e414032SMasahiro Yamada			spl/u-boot-spl.ais spl/u-boot-spl-pad.ais
851 9e414032SMasahiro Yamada		cat spl/u-boot-spl-pad.ais u-boot.img > u-boot.ais
852 d36d8859SChristian Riesch
853 a5453555SOtavio Salvador
854 9e414032SMasahiro Yamadau-boot.sb:       u-boot.bin spl/u-boot-spl.bin
855 9e414032SMasahiro Yamada		$(MAKE) $(build)=$(CPUDIR)/$(SOC)/ $(OBJTREE)/u-boot.sb
856 30b9b932SMarek Vasut
857 94aebe6cSStefan Roese# On x600 (SPEAr600) U-Boot is appended to U-Boot SPL.
858 94aebe6cSStefan Roese# Both images are created using mkimage (crc etc), so that the ROM
859 94aebe6cSStefan Roese# bootloader can check its integrity. Padding needs to be done to the
860 94aebe6cSStefan Roese# SPL image (with mkimage header) and not the binary. Otherwise the resulting image
861 94aebe6cSStefan Roese# which is loaded/copied by the ROM bootloader to SRAM doesn't fit.
862 94aebe6cSStefan Roese# The resulting image containing both U-Boot images is called u-boot.spr
863 9e414032SMasahiro Yamadau-boot.spr:	u-boot.img spl/u-boot-spl.bin
864 9e414032SMasahiro Yamada		tools/mkimage -A $(ARCH) -T firmware -C none \
865 94aebe6cSStefan Roese		-a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n XLOADER \
866 9e414032SMasahiro Yamada		-d spl/u-boot-spl.bin $@
867 57270260SMasahiro Yamada		$(OBJCOPY) -I binary -O binary \
868 57270260SMasahiro Yamada			--pad-to=$(CONFIG_SPL_PAD_TO) --gap-fill=0xff $@
869 9e414032SMasahiro Yamada		cat u-boot.img >> $@
870 94aebe6cSStefan Roese
871 6d6c0baeSTom Warrenifneq ($(CONFIG_TEGRA),)
872 9e414032SMasahiro Yamadau-boot-nodtb-tegra.bin: spl/u-boot-spl.bin u-boot.bin
873 9e414032SMasahiro Yamada		$(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SYS_TEXT_BASE) -O binary spl/u-boot-spl spl/u-boot-spl-pad.bin
874 9e414032SMasahiro Yamada		cat spl/u-boot-spl-pad.bin u-boot.bin > $@
875 9e414032SMasahiro Yamada		rm spl/u-boot-spl-pad.bin
876 9972db5cSStephen Warren
877 9972db5cSStephen Warrenifeq ($(CONFIG_OF_SEPARATE),y)
878 *6ab6b2afSMasahiro Yamadau-boot-dtb-tegra.bin: u-boot-nodtb-tegra.bin dts/dt.dtb
879 *6ab6b2afSMasahiro Yamada		cat $^ > $@
880 9972db5cSStephen Warrenendif
881 984df4ecSAllen Martinendif
882 984df4ecSAllen Martin
883 9e414032SMasahiro Yamadau-boot-img.bin: spl/u-boot-spl.bin u-boot.img
884 9e414032SMasahiro Yamada		cat spl/u-boot-spl.bin u-boot.img > $@
885 fb3d2b8aSStefan Roese
886 ecddccd0SStefan Roese# PPC4xx needs the SPL at the end of the image, since the reset vector
887 ecddccd0SStefan Roese# is located at 0xfffffffc. So we can't use the "u-boot-img.bin" target
888 ecddccd0SStefan Roese# and need to introduce a new build target with the full blown U-Boot
889 ecddccd0SStefan Roese# at the start padded up to the start of the SPL image. And then concat
890 ecddccd0SStefan Roese# the SPL image to the end.
891 9e414032SMasahiro Yamadau-boot-img-spl-at-end.bin: spl/u-boot-spl.bin u-boot.img
892 57270260SMasahiro Yamada		$(OBJCOPY) -I binary -O binary --pad-to=$(CONFIG_UBOOT_PAD_TO) \
893 9e414032SMasahiro Yamada			 --gap-fill=0xff u-boot.img $@
894 9e414032SMasahiro Yamada		cat spl/u-boot-spl.bin >> $@
895 ecddccd0SStefan Roese
896 f4dc714aSScott Wood# Create a new ELF from a raw binary file.  This is useful for arm64
897 f4dc714aSScott Wood# where static relocation needs to be performed on the raw binary,
898 f4dc714aSScott Wood# but certain simulators only accept an ELF file (but don't do the
899 f4dc714aSScott Wood# relocation).
900 f4dc714aSScott Wood# FIXME refactor dts/Makefile to share target/arch detection
901 9e414032SMasahiro Yamadau-boot.elf: u-boot.bin
902 f4dc714aSScott Wood	@$(OBJCOPY)  -B aarch64 -I binary -O elf64-littleaarch64 \
903 9e414032SMasahiro Yamada		$< u-boot-elf.o
904 9e414032SMasahiro Yamada	@$(LD) u-boot-elf.o -o $@ \
905 f4dc714aSScott Wood		--defsym=_start=$(CONFIG_SYS_TEXT_BASE) \
906 f4dc714aSScott Wood		-Ttext=$(CONFIG_SYS_TEXT_BASE)
907 f4dc714aSScott Wood
908 86eb49b3SSimon Glassifeq ($(CONFIG_SANDBOX),y)
909 86eb49b3SSimon GlassGEN_UBOOT = \
910 9e414032SMasahiro Yamada		$(CC) $(SYMS) -T u-boot.lds \
911 656de6b8SMasahiro Yamada			-Wl,--start-group $(u-boot-main) -Wl,--end-group \
912 86eb49b3SSimon Glass			$(PLATFORM_LIBS) -Wl,-Map -Wl,u-boot.map -o u-boot
913 86eb49b3SSimon Glasselse
914 ecb1dc89SMike FrysingerGEN_UBOOT = \
915 9e414032SMasahiro Yamada		$(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \
916 656de6b8SMasahiro Yamada			$(u-boot-init) \
917 656de6b8SMasahiro Yamada			--start-group $(u-boot-main) --end-group $(PLATFORM_LIBS) \
918 b2184c31Swdenk			-Map u-boot.map -o u-boot
919 86eb49b3SSimon Glassendif
920 86eb49b3SSimon Glass
921 656de6b8SMasahiro Yamadau-boot:	$(u-boot-init) $(u-boot-main) u-boot.lds
922 ecb1dc89SMike Frysinger		$(GEN_UBOOT)
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 9e414032SMasahiro Yamada		$(GEN_UBOOT) 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 3341bfecSMasahiro Yamada$(u-boot-dirs): depend prepare scripts
943 6825a95bSMasahiro Yamada	$(Q)$(MAKE) $(build)=$@
944 940db16dSMasahiro Yamada
945 656de6b8SMasahiro Yamadatools: $(TIMESTAMP_FILE) $(VERSION_FILE)
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 3341bfecSMasahiro Yamada# Things we need to do before we recursively start building the kernel
953 3341bfecSMasahiro Yamada# or the modules are listed in "prepare".
954 3341bfecSMasahiro Yamada# A multi level approach is used. prepareN is processed before prepareN-1.
955 3341bfecSMasahiro Yamada# archprepare is used in arch Makefiles and when processed asm symlink,
956 3341bfecSMasahiro Yamada# version.h and scripts_basic is processed / created.
957 3341bfecSMasahiro Yamada
958 3341bfecSMasahiro Yamada# Listed in dependency order
959 3341bfecSMasahiro YamadaPHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
960 3341bfecSMasahiro Yamada
961 3341bfecSMasahiro Yamada# prepare3 is used to check if we are building in a separate output directory,
962 3341bfecSMasahiro Yamada# and if so do:
963 3341bfecSMasahiro Yamada# 1) Check that make has not been executed in the kernel src $(srctree)
964 3341bfecSMasahiro Yamadaprepare3:
965 3341bfecSMasahiro Yamadaifneq ($(KBUILD_SRC),)
966 3341bfecSMasahiro Yamada	@$(kecho) '  Using $(srctree) as source for u-boot'
967 3341bfecSMasahiro Yamada	$(Q)if [ -f $(srctree)/include/config.mk ]; then \
968 3341bfecSMasahiro Yamada		echo >&2 "  $(srctree) is not clean, please run 'make mrproper'"; \
969 3341bfecSMasahiro Yamada		echo >&2 "  in the '$(srctree)' directory.";\
970 3341bfecSMasahiro Yamada		/bin/false; \
971 3341bfecSMasahiro Yamada	fi;
972 3341bfecSMasahiro Yamadaendif
973 3341bfecSMasahiro Yamada
974 3341bfecSMasahiro Yamada# prepare2 creates a makefile if using a separate output directory
975 3341bfecSMasahiro Yamadaprepare2: prepare3 outputmakefile
976 3341bfecSMasahiro Yamada
977 3341bfecSMasahiro Yamadaprepare1: prepare2
978 3341bfecSMasahiro Yamada	@:
979 3341bfecSMasahiro Yamada
980 3341bfecSMasahiro Yamadaarchprepare: prepare1 scripts_basic
981 3341bfecSMasahiro Yamada
982 3341bfecSMasahiro Yamadaprepare0: archprepare FORCE
983 3341bfecSMasahiro Yamada	@:
984 3341bfecSMasahiro Yamada
985 3341bfecSMasahiro Yamada# All the preparing..
986 3341bfecSMasahiro Yamadaprepare: prepare0
987 349e83f0SChe-liang Chiou
988 433b2f1eSMasahiro Yamada#
989 433b2f1eSMasahiro Yamada# Auto-generate the autoconf.mk file (which is included by all makefiles)
990 433b2f1eSMasahiro Yamada#
991 433b2f1eSMasahiro Yamada# This target actually generates 2 files; autoconf.mk and autoconf.mk.dep.
992 433b2f1eSMasahiro Yamada# the dep file is only include in this top level makefile to determine when
993 433b2f1eSMasahiro Yamada# to regenerate the autoconf.mk file.
994 433b2f1eSMasahiro Yamada
995 433b2f1eSMasahiro Yamadaquiet_cmd_autoconf_dep = GEN     $@
996 433b2f1eSMasahiro Yamada      cmd_autoconf_dep = $(CC) -x c -DDO_DEPS_ONLY -M $(c_flags) \
997 433b2f1eSMasahiro Yamada	-MQ include/autoconf.mk $(srctree)/include/common.h > $@ || rm $@
998 433b2f1eSMasahiro Yamada
999 433b2f1eSMasahiro Yamadainclude/autoconf.mk.dep: include/config.h include/common.h
1000 433b2f1eSMasahiro Yamada	$(call cmd,autoconf_dep)
1001 433b2f1eSMasahiro Yamada
1002 433b2f1eSMasahiro Yamadaquiet_cmd_autoconf = GEN     $@
1003 433b2f1eSMasahiro Yamada      cmd_autoconf = \
1004 433b2f1eSMasahiro Yamada	$(CPP) $(c_flags) -DDO_DEPS_ONLY -dM $(srctree)/include/common.h > $@.tmp && \
1005 433b2f1eSMasahiro Yamada	sed -n -f $(srctree)/tools/scripts/define2mk.sed $@.tmp > $@; \
1006 433b2f1eSMasahiro Yamada	rm $@.tmp
1007 433b2f1eSMasahiro Yamada
1008 433b2f1eSMasahiro Yamadainclude/autoconf.mk: include/config.h
1009 433b2f1eSMasahiro Yamada	$(call cmd,autoconf)
1010 433b2f1eSMasahiro Yamada
1011 9e414032SMasahiro Yamadau-boot.lds: $(LDSCRIPT) depend
1012 6825a95bSMasahiro Yamada		$(CPP) $(cpp_flags) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$< >$@
1013 1aada9cdSWolfgang Denk
1014 3341bfecSMasahiro Yamadanand_spl:	$(TIMESTAMP_FILE) $(VERSION_FILE) depend prepare
1015 9e414032SMasahiro Yamada		$(MAKE) $(build)=nand_spl/board/$(BOARDDIR) all
1016 887e2ec9SStefan Roese
1017 9e414032SMasahiro Yamadau-boot-nand.bin:	nand_spl u-boot.bin
1018 9e414032SMasahiro Yamada		cat nand_spl/u-boot-spl-16k.bin u-boot.bin > u-boot-nand.bin
1019 887e2ec9SStefan Roese
1020 3341bfecSMasahiro Yamadaspl/u-boot-spl.bin: tools depend prepare
1021 9e414032SMasahiro Yamada		$(MAKE) obj=spl -f $(srctree)/spl/Makefile all
1022 5df2ee27SDaniel Schwierzeck
1023 3341bfecSMasahiro Yamadatpl/u-boot-tpl.bin: tools depend prepare
1024 9e414032SMasahiro Yamada		$(MAKE) obj=tpl -f $(srctree)/spl/Makefile all CONFIG_TPL_BUILD=y
1025 3aa29de0SYing Zhang
1026 2a998793SDaniel Hobi# Explicitly make _depend in subdirs containing multiple targets to prevent
1027 2a998793SDaniel Hobi# parallel sub-makes creating .depend files simultaneously.
1028 16a354f9SWolfgang Denkdepend dep:	$(TIMESTAMP_FILE) $(VERSION_FILE) \
1029 9e414032SMasahiro Yamada		include/generated/generic-asm-offsets.h \
1030 9e414032SMasahiro Yamada		include/generated/asm-offsets.h
1031 7ebf7443Swdenk
1032 656de6b8SMasahiro YamadaTAG_SUBDIRS := $(u-boot-dirs) include
1033 a340c325SJean-Christophe PLAGNIOL-VILLARD
1034 857d9ea6SHorst KronstorferFIND := find
1035 857d9ea6SHorst KronstorferFINDFLAGS := -L
1036 857d9ea6SHorst Kronstorfer
1037 47f15711SMasahiro YamadaPHONY += checkstack
1038 47f15711SMasahiro Yamada
1039 1064d980STom Rinicheckstack:
1040 47f15711SMasahiro Yamada	$(OBJDUMP) -d u-boot $$(find . -name u-boot-spl) | \
1041 47f15711SMasahiro Yamada	$(PERL) $(src)/scripts/checkstack.pl $(ARCH)
1042 1064d980STom Rini
1043 f9328639SMarian Balakowicztags ctags:
1044 9e414032SMasahiro Yamada		ctags -w -o ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
1045 e5e4e705SLi Yang						-name '*.[chS]' -print`
1046 7ebf7443Swdenk
1047 7ebf7443Swdenketags:
1048 857d9ea6SHorst Kronstorfer		etags -a -o $(obj)etags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
1049 e5e4e705SLi Yang						-name '*.[chS]' -print`
1050 ffda586fSLi Yangcscope:
1051 857d9ea6SHorst Kronstorfer		$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) -name '*.[chS]' -print > \
1052 857d9ea6SHorst Kronstorfer						cscope.files
1053 ffda586fSLi Yang		cscope -b -q -k
1054 7ebf7443Swdenk
1055 ecb1dc89SMike FrysingerSYSTEM_MAP = \
1056 ecb1dc89SMike Frysinger		$(NM) $1 | \
1057 7ebf7443Swdenk		grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
1058 ecb1dc89SMike Frysinger		LC_ALL=C sort
1059 9e414032SMasahiro YamadaSystem.map:	u-boot
1060 bc8bb6ecSMasahiro Yamada		@$(call SYSTEM_MAP,$<) > $@
1061 7ebf7443Swdenk
1062 06a119a0STom Rinicheckthumb:
1063 06a119a0STom Rini	@if test $(call cc-version) -lt 0404; then \
1064 06a119a0STom Rini		echo -n '*** Your GCC does not produce working '; \
1065 06a119a0STom Rini		echo 'binaries in THUMB mode.'; \
1066 06a119a0STom Rini		echo '*** Your board is configured for THUMB mode.'; \
1067 06a119a0STom Rini		false; \
1068 06a119a0STom Rini	fi
1069 6ec63f41SScott Wood
1070 6ec63f41SScott Wood# GCC 3.x is reported to have problems generating the type of relocation
1071 6ec63f41SScott Wood# that U-Boot wants.
1072 6ec63f41SScott Wood# See http://lists.denx.de/pipermail/u-boot/2012-September/135156.html
1073 6ec63f41SScott Woodcheckgcc4:
1074 6ec63f41SScott Wood	@if test $(call cc-version) -lt 0400; then \
1075 6ec63f41SScott Wood		echo -n '*** Your GCC is too old, please upgrade to GCC 4.x or newer'; \
1076 6ec63f41SScott Wood		false; \
1077 6ec63f41SScott Wood	fi
1078 6ec63f41SScott Wood
1079 501ebdf2SStephen Warrencheckdtc:
1080 501ebdf2SStephen Warren	@if test $(call dtc-version) -lt 0104; then \
1081 501ebdf2SStephen Warren		echo '*** Your dtc is too old, please upgrade to dtc 1.4 or newer'; \
1082 501ebdf2SStephen Warren		false; \
1083 501ebdf2SStephen Warren	fi
1084 501ebdf2SStephen Warren
1085 47f15711SMasahiro Yamadaquiet_cmd_offsets = GEN     $@
1086 47f15711SMasahiro Yamada      cmd_offsets = $(srctree)/tools/scripts/make-asm-offsets $< $@
1087 47f15711SMasahiro Yamada
1088 47f15711SMasahiro Yamadainclude/generated/generic-asm-offsets.h: lib/asm-offsets.s
1089 47f15711SMasahiro Yamada	$(call cmd,offsets)
1090 47f15711SMasahiro Yamada
1091 47f15711SMasahiro Yamadaquiet_cmd_asm-offsets.s = CC      $@
1092 47f15711SMasahiro Yamada      cmd_asm-offsets.s = mkdir -p lib; \
1093 16a354f9SWolfgang Denk		$(CC) -DDO_DEPS_ONLY \
1094 6825a95bSMasahiro Yamada		$(c_flags) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) \
1095 47f15711SMasahiro Yamada		-o $@ $< -c -S
1096 47f15711SMasahiro Yamada
1097 47f15711SMasahiro Yamadalib/asm-offsets.s: $(srctree)/lib/asm-offsets.c include/config.h
1098 47f15711SMasahiro Yamada	$(call cmd,asm-offsets.s)
1099 16a354f9SWolfgang Denk
1100 9e414032SMasahiro Yamadainclude/generated/asm-offsets.h: $(CPUDIR)/$(SOC)/asm-offsets.s
1101 47f15711SMasahiro Yamada	$(call cmd,offsets)
1102 a4814a69SStefano Babic
1103 47f15711SMasahiro Yamadaquiet_cmd_soc_asm-offsets.s = CC      $@
1104 47f15711SMasahiro Yamada      cmd_soc_asm-offsets.s = mkdir -p $(CPUDIR)/$(SOC); \
1105 9e414032SMasahiro Yamada	if [ -f $(srctree)/$(CPUDIR)/$(SOC)/asm-offsets.c ];then \
1106 a4814a69SStefano Babic		$(CC) -DDO_DEPS_ONLY \
1107 6825a95bSMasahiro Yamada		$(c_flags) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) \
1108 9e414032SMasahiro Yamada			-o $@ $(srctree)/$(CPUDIR)/$(SOC)/asm-offsets.c -c -S; \
1109 a4814a69SStefano Babic	else \
1110 a4814a69SStefano Babic		touch $@; \
1111 a4814a69SStefano Babic	fi
1112 a4814a69SStefano Babic
1113 47f15711SMasahiro Yamada$(CPUDIR)/$(SOC)/asm-offsets.s:	include/config.h
1114 47f15711SMasahiro Yamada	$(call cmd,soc_asm-offsets.s)
1115 47f15711SMasahiro Yamada
1116 7ebf7443Swdenk#########################################################################
1117 7ebf7443Swdenk
1118 54799e45SScott Wood# ARM relocations should all be R_ARM_RELATIVE (32-bit) or
1119 54799e45SScott Wood# R_AARCH64_RELATIVE (64-bit).
1120 9e414032SMasahiro Yamadacheckarmreloc: u-boot
1121 54799e45SScott Wood	@RELOC="`$(CROSS_COMPILE)readelf -r -W $< | cut -d ' ' -f 4 | \
1122 54799e45SScott Wood		grep R_A | sort -u`"; \
1123 54799e45SScott Wood	if test "$$RELOC" != "R_ARM_RELATIVE" -a \
1124 54799e45SScott Wood		 "$$RELOC" != "R_AARCH64_RELATIVE"; then \
1125 54799e45SScott Wood		echo "$< contains unexpected relocations: $$RELOC"; \
1126 54799e45SScott Wood		false; \
1127 54799e45SScott Wood	fi
1128 c37980c3SAlbert ARIBAUD
1129 28abd48fSIlya Yanok$(VERSION_FILE):
1130 14ce91b1SMike Frysinger		@mkdir -p $(dir $(VERSION_FILE))
1131 dd88ab32SMasahiro Yamada		@( localvers='$(shell $(TOPDIR)/scripts/setlocalversion $(TOPDIR))' ; \
1132 28abd48fSIlya Yanok		   printf '#define PLAIN_VERSION "%s%s"\n' \
1133 28abd48fSIlya Yanok			"$(U_BOOT_VERSION)" "$${localvers}" ; \
1134 28abd48fSIlya Yanok		   printf '#define U_BOOT_VERSION "U-Boot %s%s"\n' \
1135 28abd48fSIlya Yanok			"$(U_BOOT_VERSION)" "$${localvers}" ; \
1136 28abd48fSIlya Yanok		) > $@.tmp
1137 28abd48fSIlya Yanok		@( printf '#define CC_VERSION_STRING "%s"\n' \
1138 28abd48fSIlya Yanok		 '$(shell $(CC) --version | head -n 1)' )>>  $@.tmp
1139 28abd48fSIlya Yanok		@( printf '#define LD_VERSION_STRING "%s"\n' \
1140 28abd48fSIlya Yanok		 '$(shell $(LD) -v | head -n 1)' )>>  $@.tmp
1141 28abd48fSIlya Yanok		@cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@
1142 28abd48fSIlya Yanok
1143 249b53a6SLoïc Minier$(TIMESTAMP_FILE):
1144 249b53a6SLoïc Minier		@mkdir -p $(dir $(TIMESTAMP_FILE))
1145 a76406fbSLoïc Minier		@LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"' > $@.tmp
1146 a76406fbSLoïc Minier		@LC_ALL=C date +'#define U_BOOT_TIME "%T"' >> $@.tmp
1147 a76406fbSLoïc Minier		@cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@
1148 249b53a6SLoïc Minier
1149 2887c473SMasahiro Yamadaenv: depend scripts_basic
1150 3f76e984SMasahiro Yamada	$(Q)$(MAKE) $(build)=tools/$@
1151 940db16dSMasahiro Yamada
1152 2887c473SMasahiro Yamadatools-all: HOST_TOOLS_ALL=y
1153 2887c473SMasahiro Yamadatools-all: env tools ;
1154 0358df42SMike Frysinger
1155 4e53a258SWolfgang Denk.PHONY : CHANGELOG
1156 4e53a258SWolfgang DenkCHANGELOG:
1157 b985b5d6SBen Warren	git log --no-merges U-Boot-1_1_5.. | \
1158 b985b5d6SBen Warren	unexpand -a | sed -e 's/\s\s*$$//' > $@
1159 4e53a258SWolfgang Denk
1160 0a823aa2SHarald Welteinclude/license.h: tools/bin2header COPYING
1161 0a823aa2SHarald Welte	cat COPYING | gzip -9 -c | ./tools/bin2header license_gzip > include/license.h
1162 7ebf7443Swdenk#########################################################################
1163 7ebf7443Swdenk
1164 efcf8619SMasahiro Yamada###
1165 efcf8619SMasahiro Yamada# Cleaning is done on three levels.
1166 efcf8619SMasahiro Yamada# make clean     Delete most generated files
1167 efcf8619SMasahiro Yamada#                Leave enough to build external modules
1168 efcf8619SMasahiro Yamada# make mrproper  Delete the current configuration, and all generated files
1169 efcf8619SMasahiro Yamada# make distclean Remove editor backup files, patch leftover files and the like
1170 a6862bc1SWolfgang Denk
1171 efcf8619SMasahiro Yamada# Directories & files removed with 'make clean'
1172 efcf8619SMasahiro YamadaCLEAN_DIRS  += $(MODVERDIR)
1173 efcf8619SMasahiro YamadaCLEAN_FILES += u-boot.lds include/bmp_logo.h include/bmp_logo_data.h \
1174 *6ab6b2afSMasahiro Yamada	       board/*/config.tmp board/*/*/config.tmp \
1175 efcf8619SMasahiro Yamada	       include/autoconf.mk* include/spl-autoconf.mk \
1176 433b2f1eSMasahiro Yamada	       include/tpl-autoconf.mk
1177 433b2f1eSMasahiro Yamada
1178 efcf8619SMasahiro Yamada# Directories & files removed with 'make clobber'
1179 efcf8619SMasahiro YamadaCLOBBER_DIRS  += $(patsubst %,spl/%, $(filter-out Makefile, \
1180 efcf8619SMasahiro Yamada		 $(shell ls -1 spl 2>/dev/null))) \
1181 efcf8619SMasahiro Yamada		 tpl
1182 efcf8619SMasahiro YamadaCLOBBER_FILES += u-boot* MLO MLO* SPL System.map nand_spl/u-boot*
1183 efcf8619SMasahiro Yamada
1184 efcf8619SMasahiro Yamada# Directories & files removed with 'make mrproper'
1185 efcf8619SMasahiro YamadaMRPROPER_DIRS  += include/config include/generated
1186 efcf8619SMasahiro YamadaMRPROPER_FILES += .config .config.old \
1187 efcf8619SMasahiro Yamada		  tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
1188 efcf8619SMasahiro Yamada		  include/config.h include/config.mk
1189 efcf8619SMasahiro Yamada
1190 efcf8619SMasahiro Yamada# clean - Delete most, but leave enough to build external modules
1191 efcf8619SMasahiro Yamada#
1192 efcf8619SMasahiro Yamadaclean: rm-dirs  := $(CLEAN_DIRS)
1193 efcf8619SMasahiro Yamadaclean: rm-files := $(CLEAN_FILES)
1194 efcf8619SMasahiro Yamada
1195 efcf8619SMasahiro Yamadaclean-dirs	:= $(foreach f,$(u-boot-alldirs),$(if $(wildcard $f/Makefile),$f))
1196 efcf8619SMasahiro Yamada
1197 efcf8619SMasahiro Yamadaclean-dirs      := $(addprefix _clean_, $(clean-dirs) doc/DocBook)
1198 efcf8619SMasahiro Yamada
1199 efcf8619SMasahiro YamadaPHONY += $(clean-dirs) clean archclean
1200 efcf8619SMasahiro Yamada$(clean-dirs):
1201 efcf8619SMasahiro Yamada	$(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
1202 efcf8619SMasahiro Yamada
1203 efcf8619SMasahiro Yamada# TODO: Do not use *.cfgtmp
1204 efcf8619SMasahiro Yamadaclean: $(clean-dirs)
1205 efcf8619SMasahiro Yamada	$(call cmd,rmdirs)
1206 efcf8619SMasahiro Yamada	$(call cmd,rmfiles)
1207 efcf8619SMasahiro Yamada	@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
1208 efcf8619SMasahiro Yamada		\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
1209 efcf8619SMasahiro Yamada		-o -name '*.ko.*' -o -name '*.su' -o -name '*.cfgtmp' \
1210 efcf8619SMasahiro Yamada		-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
1211 efcf8619SMasahiro Yamada		-o -name '*.symtypes' -o -name 'modules.order' \
1212 efcf8619SMasahiro Yamada		-o -name modules.builtin -o -name '.tmp_*.o.*' \
1213 efcf8619SMasahiro Yamada		-o -name '*.gcno' \) -type f -print | xargs rm -f
1214 efcf8619SMasahiro Yamada	@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
1215 efcf8619SMasahiro Yamada		-path './nand_spl/*' -type l -print | xargs rm -f
1216 efcf8619SMasahiro Yamada
1217 efcf8619SMasahiro Yamada# clobber
1218 efcf8619SMasahiro Yamada#
1219 efcf8619SMasahiro Yamadaclobber: rm-dirs  := $(CLOBBER_DIRS)
1220 efcf8619SMasahiro Yamadaclobber: rm-files := $(CLOBBER_FILES)
1221 efcf8619SMasahiro Yamada
1222 efcf8619SMasahiro YamadaPHONY += clobber
1223 efcf8619SMasahiro Yamada
1224 efcf8619SMasahiro Yamadaclobber: clean
1225 efcf8619SMasahiro Yamada	$(call cmd,rmdirs)
1226 efcf8619SMasahiro Yamada	$(call cmd,rmfiles)
1227 efcf8619SMasahiro Yamada
1228 efcf8619SMasahiro Yamada# mrproper - Delete all generated files, including .config
1229 efcf8619SMasahiro Yamada#
1230 efcf8619SMasahiro Yamadamrproper: rm-dirs  := $(wildcard $(MRPROPER_DIRS))
1231 efcf8619SMasahiro Yamadamrproper: rm-files := $(wildcard $(MRPROPER_FILES))
1232 efcf8619SMasahiro Yamadamrproper-dirs      := $(addprefix _mrproper_,scripts)
1233 efcf8619SMasahiro Yamada
1234 efcf8619SMasahiro YamadaPHONY += $(mrproper-dirs) mrproper archmrproper
1235 efcf8619SMasahiro Yamada$(mrproper-dirs):
1236 efcf8619SMasahiro Yamada	$(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
1237 efcf8619SMasahiro Yamada
1238 efcf8619SMasahiro Yamadamrproper: clobber $(mrproper-dirs)
1239 efcf8619SMasahiro Yamada	$(call cmd,rmdirs)
1240 efcf8619SMasahiro Yamada	$(call cmd,rmfiles)
1241 efcf8619SMasahiro Yamada	@rm -f arch/*/include/asm/arch arch/*/include/asm/proc
1242 efcf8619SMasahiro Yamada
1243 efcf8619SMasahiro Yamada# distclean
1244 efcf8619SMasahiro Yamada#
1245 efcf8619SMasahiro YamadaPHONY += distclean
1246 efcf8619SMasahiro Yamada
1247 433b2f1eSMasahiro Yamadadistclean: mrproper
1248 efcf8619SMasahiro Yamada	@find $(srctree) $(RCS_FIND_IGNORE) \
1249 efcf8619SMasahiro Yamada		\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
1250 efcf8619SMasahiro Yamada		-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
1251 efcf8619SMasahiro Yamada		-o -name '.*.rej' \
1252 efcf8619SMasahiro Yamada		-o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
1253 efcf8619SMasahiro Yamada		-type f -print | xargs rm -f
1254 7ebf7443Swdenk
1255 7ebf7443Swdenkbackup:
1256 7ebf7443Swdenk	F=`basename $(TOPDIR)` ; cd .. ; \
1257 d6b93714SIlya Yanok	gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
1258 7ebf7443Swdenk
1259 8fac9c7bSMasahiro Yamada
1260 8fac9c7bSMasahiro Yamada# Documentation targets
1261 8fac9c7bSMasahiro Yamada# ---------------------------------------------------------------------------
1262 8fac9c7bSMasahiro Yamada%docs: scripts_basic FORCE
1263 8fac9c7bSMasahiro Yamada	$(Q)$(MAKE) $(build)=scripts build_docproc
1264 8fac9c7bSMasahiro Yamada	$(Q)$(MAKE) $(build)=doc/DocBook $@
1265 8fac9c7bSMasahiro Yamada
1266 3341bfecSMasahiro Yamada# Dummies...
1267 3341bfecSMasahiro YamadaPHONY += prepare scripts
1268 3341bfecSMasahiro Yamadaprepare: ;
1269 3341bfecSMasahiro Yamadascripts: ;
1270 9e414032SMasahiro Yamada
1271 433b2f1eSMasahiro Yamadaendif #ifeq ($(config-targets),1)
1272 433b2f1eSMasahiro Yamadaendif #ifeq ($(mixed-targets),1)
1273 433b2f1eSMasahiro Yamada
1274 efcf8619SMasahiro Yamadaquiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN   $(wildcard $(rm-dirs)))
1275 efcf8619SMasahiro Yamada      cmd_rmdirs = rm -rf $(rm-dirs)
1276 efcf8619SMasahiro Yamada
1277 efcf8619SMasahiro Yamadaquiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
1278 efcf8619SMasahiro Yamada      cmd_rmfiles = rm -f $(rm-files)
1279 efcf8619SMasahiro Yamada
1280 efcf8619SMasahiro Yamada# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=dir
1281 efcf8619SMasahiro Yamada# Usage:
1282 efcf8619SMasahiro Yamada# $(Q)$(MAKE) $(clean)=dir
1283 efcf8619SMasahiro Yamadaclean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj
1284 efcf8619SMasahiro Yamada
1285 9e414032SMasahiro Yamadaendif	# skip-makefile
1286 9e414032SMasahiro Yamada
1287 9e414032SMasahiro YamadaPHONY += FORCE
1288 9e414032SMasahiro YamadaFORCE:
1289 9e414032SMasahiro Yamada
1290 9e414032SMasahiro Yamada# Declare the contents of the .PHONY variable as phony.  We keep that
1291 9e414032SMasahiro Yamada# information in a variable so we can use it in if_changed and friends.
1292 9e414032SMasahiro Yamada.PHONY: $(PHONY)
1293