Merge tag 'signed-efi-next' of git://github.com/agraf/u-boot
[platform/kernel/u-boot.git] / Makefile
1 # SPDX-License-Identifier: GPL-2.0+
2
3 VERSION = 2018
4 PATCHLEVEL = 05
5 SUBLEVEL =
6 EXTRAVERSION =
7 NAME =
8
9 # *DOCUMENTATION*
10 # To see a list of typical targets execute "make help"
11 # More info can be located in ./README
12 # Comments in this file are targeted only to the developer, do not
13 # expect to learn how to build the kernel reading this file.
14
15 # o Do not use make's built-in rules and variables
16 #   (this increases performance and avoids hard-to-debug behaviour);
17 # o Look for make include files relative to root of kernel src
18 MAKEFLAGS += -rR --include-dir=$(CURDIR)
19
20 # Avoid funny character set dependencies
21 unexport LC_ALL
22 LC_COLLATE=C
23 LC_NUMERIC=C
24 export LC_COLLATE LC_NUMERIC
25
26 # Avoid interference with shell env settings
27 unexport GREP_OPTIONS
28
29 # We are using a recursive build, so we need to do a little thinking
30 # to get the ordering right.
31 #
32 # Most importantly: sub-Makefiles should only ever modify files in
33 # their own directory. If in some directory we have a dependency on
34 # a file in another dir (which doesn't happen often, but it's often
35 # unavoidable when linking the built-in.o targets which finally
36 # turn into vmlinux), we will call a sub make in that other dir, and
37 # after that we are sure that everything which is in that other dir
38 # is now up to date.
39 #
40 # The only cases where we need to modify files which have global
41 # effects are thus separated out and done before the recursive
42 # descending is started. They are now explicitly listed as the
43 # prepare rule.
44
45 # Beautify output
46 # ---------------------------------------------------------------------------
47 #
48 # Normally, we echo the whole command before executing it. By making
49 # that echo $($(quiet)$(cmd)), we now have the possibility to set
50 # $(quiet) to choose other forms of output instead, e.g.
51 #
52 #         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
53 #         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
54 #
55 # If $(quiet) is empty, the whole command will be printed.
56 # If it is set to "quiet_", only the short version will be printed.
57 # If it is set to "silent_", nothing will be printed at all, since
58 # the variable $(silent_cmd_cc_o_c) doesn't exist.
59 #
60 # A simple variant is to prefix commands with $(Q) - that's useful
61 # for commands that shall be hidden in non-verbose mode.
62 #
63 #       $(Q)ln $@ :<
64 #
65 # If KBUILD_VERBOSE equals 0 then the above command will be hidden.
66 # If KBUILD_VERBOSE equals 1 then the above command is displayed.
67 #
68 # To put more focus on warnings, be less verbose as default
69 # Use 'make V=1' to see the full commands
70
71 ifeq ("$(origin V)", "command line")
72   KBUILD_VERBOSE = $(V)
73 endif
74 ifndef KBUILD_VERBOSE
75   KBUILD_VERBOSE = 0
76 endif
77
78 ifeq ($(KBUILD_VERBOSE),1)
79   quiet =
80   Q =
81 else
82   quiet=quiet_
83   Q = @
84 endif
85
86 # If the user is running make -s (silent mode), suppress echoing of
87 # commands
88
89 ifneq ($(filter 4.%,$(MAKE_VERSION)),)  # make-4
90 ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
91   quiet=silent_
92 endif
93 else                                    # make-3.8x
94 ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
95   quiet=silent_
96 endif
97 endif
98
99 export quiet Q KBUILD_VERBOSE
100
101 # kbuild supports saving output files in a separate directory.
102 # To locate output files in a separate directory two syntaxes are supported.
103 # In both cases the working directory must be the root of the kernel src.
104 # 1) O=
105 # Use "make O=dir/to/store/output/files/"
106 #
107 # 2) Set KBUILD_OUTPUT
108 # Set the environment variable KBUILD_OUTPUT to point to the directory
109 # where the output files shall be placed.
110 # export KBUILD_OUTPUT=dir/to/store/output/files/
111 # make
112 #
113 # The O= assignment takes precedence over the KBUILD_OUTPUT environment
114 # variable.
115
116 # KBUILD_SRC is set on invocation of make in OBJ directory
117 # KBUILD_SRC is not intended to be used by the regular user (for now)
118 ifeq ($(KBUILD_SRC),)
119
120 # OK, Make called in directory where kernel src resides
121 # Do we want to locate output files in a separate directory?
122 ifeq ("$(origin O)", "command line")
123   KBUILD_OUTPUT := $(O)
124 endif
125
126 # That's our default target when none is given on the command line
127 PHONY := _all
128 _all:
129
130 # Cancel implicit rules on top Makefile
131 $(CURDIR)/Makefile Makefile: ;
132
133 ifneq ($(KBUILD_OUTPUT),)
134 # Invoke a second make in the output directory, passing relevant variables
135 # check that the output directory actually exists
136 saved-output := $(KBUILD_OUTPUT)
137 KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \
138                                                                 && /bin/pwd)
139 $(if $(KBUILD_OUTPUT),, \
140      $(error failed to create output directory "$(saved-output)"))
141
142 PHONY += $(MAKECMDGOALS) sub-make
143
144 $(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
145         @:
146
147 sub-make: FORCE
148         $(Q)$(MAKE) -C $(KBUILD_OUTPUT) KBUILD_SRC=$(CURDIR) \
149         -f $(CURDIR)/Makefile $(filter-out _all sub-make,$(MAKECMDGOALS))
150
151 # Leave processing to above invocation of make
152 skip-makefile := 1
153 endif # ifneq ($(KBUILD_OUTPUT),)
154 endif # ifeq ($(KBUILD_SRC),)
155
156 # We process the rest of the Makefile if this is the final invocation of make
157 ifeq ($(skip-makefile),)
158
159 # Do not print "Entering directory ...",
160 # but we want to display it when entering to the output directory
161 # so that IDEs/editors are able to understand relative filenames.
162 MAKEFLAGS += --no-print-directory
163
164 # Call a source code checker (by default, "sparse") as part of the
165 # C compilation.
166 #
167 # Use 'make C=1' to enable checking of only re-compiled files.
168 # Use 'make C=2' to enable checking of *all* source files, regardless
169 # of whether they are re-compiled or not.
170 #
171 # See the file "Documentation/sparse.txt" for more details, including
172 # where to get the "sparse" utility.
173
174 ifeq ("$(origin C)", "command line")
175   KBUILD_CHECKSRC = $(C)
176 endif
177 ifndef KBUILD_CHECKSRC
178   KBUILD_CHECKSRC = 0
179 endif
180
181 # Use make M=dir to specify directory of external module to build
182 # Old syntax make ... SUBDIRS=$PWD is still supported
183 # Setting the environment variable KBUILD_EXTMOD take precedence
184 ifdef SUBDIRS
185   KBUILD_EXTMOD ?= $(SUBDIRS)
186 endif
187
188 ifeq ("$(origin M)", "command line")
189   KBUILD_EXTMOD := $(M)
190 endif
191
192 # If building an external module we do not care about the all: rule
193 # but instead _all depend on modules
194 PHONY += all
195 ifeq ($(KBUILD_EXTMOD),)
196 _all: all
197 else
198 _all: modules
199 endif
200
201 ifeq ($(KBUILD_SRC),)
202         # building in the source tree
203         srctree := .
204 else
205         ifeq ($(KBUILD_SRC)/,$(dir $(CURDIR)))
206                 # building in a subdirectory of the source tree
207                 srctree := ..
208         else
209                 srctree := $(KBUILD_SRC)
210         endif
211 endif
212 objtree         := .
213 src             := $(srctree)
214 obj             := $(objtree)
215
216 VPATH           := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
217
218 export srctree objtree VPATH
219
220 # Make sure CDPATH settings don't interfere
221 unexport CDPATH
222
223 #########################################################################
224
225 HOSTARCH := $(shell uname -m | \
226         sed -e s/i.86/x86/ \
227             -e s/sun4u/sparc64/ \
228             -e s/arm.*/arm/ \
229             -e s/sa110/arm/ \
230             -e s/ppc64/powerpc/ \
231             -e s/ppc/powerpc/ \
232             -e s/macppc/powerpc/\
233             -e s/sh.*/sh/)
234
235 HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
236             sed -e 's/\(cygwin\).*/cygwin/')
237
238 export  HOSTARCH HOSTOS
239
240 #########################################################################
241
242 # set default to nothing for native builds
243 ifeq ($(HOSTARCH),$(ARCH))
244 CROSS_COMPILE ?=
245 endif
246
247 KCONFIG_CONFIG  ?= .config
248 export KCONFIG_CONFIG
249
250 # SHELL used by kbuild
251 CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
252           else if [ -x /bin/bash ]; then echo /bin/bash; \
253           else echo sh; fi ; fi)
254
255 HOSTCC       = cc
256 HOSTCXX      = c++
257 HOSTCFLAGS   = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
258                 $(if $(CONFIG_TOOLS_DEBUG),-g)
259 HOSTCXXFLAGS = -O2
260
261 # With the move to GCC 6, we have implicitly upgraded our language
262 # standard to GNU11 (see https://gcc.gnu.org/gcc-5/porting_to.html).
263 # Some Linux distributions (including RHEL7, SLES13, Debian 8) still
264 # have older compilers as their default, so we make it explicit for
265 # these that our host tools are GNU11 (i.e. C11 w/ GNU extensions).
266 ifeq ($(HOSTOS),linux)
267 HOSTCFLAGS += --std=gnu11
268 endif
269
270 ifeq ($(HOSTOS),cygwin)
271 HOSTCFLAGS      += -ansi
272 endif
273
274 # Mac OS X / Darwin's C preprocessor is Apple specific.  It
275 # generates numerous errors and warnings.  We want to bypass it
276 # and use GNU C's cpp.  To do this we pass the -traditional-cpp
277 # option to the compiler.  Note that the -traditional-cpp flag
278 # DOES NOT have the same semantics as GNU C's flag, all it does
279 # is invoke the GNU preprocessor in stock ANSI/ISO C fashion.
280 #
281 # Apple's linker is similar, thanks to the new 2 stage linking
282 # multiple symbol definitions are treated as errors, hence the
283 # -multiply_defined suppress option to turn off this error.
284 #
285 ifeq ($(HOSTOS),darwin)
286 # get major and minor product version (e.g. '10' and '6' for Snow Leopard)
287 DARWIN_MAJOR_VERSION    = $(shell sw_vers -productVersion | cut -f 1 -d '.')
288 DARWIN_MINOR_VERSION    = $(shell sw_vers -productVersion | cut -f 2 -d '.')
289
290 os_x_before     = $(shell if [ $(DARWIN_MAJOR_VERSION) -le $(1) -a \
291         $(DARWIN_MINOR_VERSION) -le $(2) ] ; then echo "$(3)"; else echo "$(4)"; fi ;)
292
293 # Snow Leopards build environment has no longer restrictions as described above
294 HOSTCC       = $(call os_x_before, 10, 5, "cc", "gcc")
295 HOSTCFLAGS  += $(call os_x_before, 10, 4, "-traditional-cpp")
296 HOSTLDFLAGS += $(call os_x_before, 10, 5, "-multiply_defined suppress")
297
298 # since Lion (10.7) ASLR is on by default, but we use linker generated lists
299 # in some host tools which is a problem then ... so disable ASLR for these
300 # tools
301 HOSTLDFLAGS += $(call os_x_before, 10, 7, "", "-Xlinker -no_pie")
302 endif
303
304 # Decide whether to build built-in, modular, or both.
305 # Normally, just do built-in.
306
307 KBUILD_MODULES :=
308 KBUILD_BUILTIN := 1
309
310 # If we have only "make modules", don't compile built-in objects.
311 # When we're building modules with modversions, we need to consider
312 # the built-in objects during the descend as well, in order to
313 # make sure the checksums are up to date before we record them.
314
315 ifeq ($(MAKECMDGOALS),modules)
316   KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
317 endif
318
319 # If we have "make <whatever> modules", compile modules
320 # in addition to whatever we do anyway.
321 # Just "make" or "make all" shall build modules as well
322
323 # U-Boot does not need modules
324 #ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
325 #  KBUILD_MODULES := 1
326 #endif
327
328 #ifeq ($(MAKECMDGOALS),)
329 #  KBUILD_MODULES := 1
330 #endif
331
332 export KBUILD_MODULES KBUILD_BUILTIN
333 export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
334
335 # We need some generic definitions (do not try to remake the file).
336 scripts/Kbuild.include: ;
337 include scripts/Kbuild.include
338
339 # Make variables (CC, etc...)
340
341 AS              = $(CROSS_COMPILE)as
342 # Always use GNU ld
343 ifneq ($(shell $(CROSS_COMPILE)ld.bfd -v 2> /dev/null),)
344 LD              = $(CROSS_COMPILE)ld.bfd
345 else
346 LD              = $(CROSS_COMPILE)ld
347 endif
348 CC              = $(CROSS_COMPILE)gcc
349 CPP             = $(CC) -E
350 AR              = $(CROSS_COMPILE)ar
351 NM              = $(CROSS_COMPILE)nm
352 LDR             = $(CROSS_COMPILE)ldr
353 STRIP           = $(CROSS_COMPILE)strip
354 OBJCOPY         = $(CROSS_COMPILE)objcopy
355 OBJDUMP         = $(CROSS_COMPILE)objdump
356 LEX             = flex
357 YACC            = bison
358 AWK             = awk
359 PERL            = perl
360 PYTHON          ?= python
361 PYTHON2         = python2
362 PYTHON3         = python3
363 DTC             ?= $(objtree)/scripts/dtc/dtc
364 CHECK           = sparse
365
366 CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
367                   -Wbitwise -Wno-return-void -D__CHECK_ENDIAN__ $(CF)
368
369 KBUILD_CPPFLAGS := -D__KERNEL__ -D__UBOOT__
370
371 KBUILD_CFLAGS   := -Wall -Wstrict-prototypes \
372                    -Wno-format-security \
373                    -fno-builtin -ffreestanding
374 KBUILD_CFLAGS   += -fshort-wchar
375 KBUILD_AFLAGS   := -D__ASSEMBLY__
376
377 # Read UBOOTRELEASE from include/config/uboot.release (if it exists)
378 UBOOTRELEASE = $(shell cat include/config/uboot.release 2> /dev/null)
379 UBOOTVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
380
381 export VERSION PATCHLEVEL SUBLEVEL UBOOTRELEASE UBOOTVERSION
382 export ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIR
383 export CONFIG_SHELL HOSTCC HOSTCFLAGS HOSTLDFLAGS CROSS_COMPILE AS LD CC
384 export CPP AR NM LDR STRIP OBJCOPY OBJDUMP
385 export MAKE LEX YACC AWK PERL PYTHON PYTHON2 PYTHON3
386 export HOSTCXX HOSTCXXFLAGS CHECK CHECKFLAGS DTC DTC_FLAGS
387
388 export KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE OBJCOPYFLAGS LDFLAGS
389 export KBUILD_CFLAGS KBUILD_AFLAGS
390
391 # When compiling out-of-tree modules, put MODVERDIR in the module
392 # tree rather than in the kernel tree. The kernel tree might
393 # even be read-only.
394 export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions
395
396 # Files to ignore in find ... statements
397
398 export RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o    \
399                           -name CVS -o -name .pc -o -name .hg -o -name .git \) \
400                           -prune -o
401 export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
402                          --exclude CVS --exclude .pc --exclude .hg --exclude .git
403
404 # ===========================================================================
405 # Rules shared between *config targets and build targets
406
407 # Basic helpers built in scripts/
408 PHONY += scripts_basic
409 scripts_basic:
410         $(Q)$(MAKE) $(build)=scripts/basic
411         $(Q)rm -f .tmp_quiet_recordmcount
412
413 # To avoid any implicit rule to kick in, define an empty command.
414 scripts/basic/%: scripts_basic ;
415
416 PHONY += outputmakefile
417 # outputmakefile generates a Makefile in the output directory, if using a
418 # separate output directory. This allows convenient use of make in the
419 # output directory.
420 outputmakefile:
421 ifneq ($(KBUILD_SRC),)
422         $(Q)ln -fsn $(srctree) source
423         $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
424             $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
425 endif
426
427 # To make sure we do not include .config for any of the *config targets
428 # catch them early, and hand them over to scripts/kconfig/Makefile
429 # It is allowed to specify more targets when calling make, including
430 # mixing *config targets and build targets.
431 # For example 'make oldconfig all'.
432 # Detect when mixed targets is specified, and make a second invocation
433 # of make so .config is not included in this case either (for *config).
434
435 version_h := include/generated/version_autogenerated.h
436 timestamp_h := include/generated/timestamp_autogenerated.h
437 defaultenv_h := include/generated/defaultenv_autogenerated.h
438
439 no-dot-config-targets := clean clobber mrproper distclean \
440                          help %docs check% coccicheck \
441                          ubootversion backup tests
442
443 config-targets := 0
444 mixed-targets  := 0
445 dot-config     := 1
446
447 ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
448         ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
449                 dot-config := 0
450         endif
451 endif
452
453 ifeq ($(KBUILD_EXTMOD),)
454         ifneq ($(filter config %config,$(MAKECMDGOALS)),)
455                 config-targets := 1
456                 ifneq ($(words $(MAKECMDGOALS)),1)
457                         mixed-targets := 1
458                 endif
459         endif
460 endif
461
462 ifeq ($(mixed-targets),1)
463 # ===========================================================================
464 # We're called with mixed targets (*config and build targets).
465 # Handle them one by one.
466
467 PHONY += $(MAKECMDGOALS) __build_one_by_one
468
469 $(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one
470         @:
471
472 __build_one_by_one:
473         $(Q)set -e; \
474         for i in $(MAKECMDGOALS); do \
475                 $(MAKE) -f $(srctree)/Makefile $$i; \
476         done
477
478 else
479 ifeq ($(config-targets),1)
480 # ===========================================================================
481 # *config targets only - make sure prerequisites are updated, and descend
482 # in scripts/kconfig to make the *config target
483
484 KBUILD_DEFCONFIG := sandbox_defconfig
485 export KBUILD_DEFCONFIG KBUILD_KCONFIG
486
487 config: scripts_basic outputmakefile FORCE
488         $(Q)$(MAKE) $(build)=scripts/kconfig $@
489
490 %config: scripts_basic outputmakefile FORCE
491         $(Q)$(MAKE) $(build)=scripts/kconfig $@
492
493 else
494 # ===========================================================================
495 # Build targets only - this includes vmlinux, arch specific targets, clean
496 # targets and others. In general all targets except *config targets.
497
498 # Additional helpers built in scripts/
499 # Carefully list dependencies so we do not try to build scripts twice
500 # in parallel
501 PHONY += scripts
502 scripts: scripts_basic include/config/auto.conf
503         $(Q)$(MAKE) $(build)=$(@)
504
505 ifeq ($(dot-config),1)
506 # Read in config
507 -include include/config/auto.conf
508
509 # Read in dependencies to all Kconfig* files, make sure to run
510 # oldconfig if changes are detected.
511 -include include/config/auto.conf.cmd
512
513 # To avoid any implicit rule to kick in, define an empty command
514 $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
515
516 # If .config is newer than include/config/auto.conf, someone tinkered
517 # with it and forgot to run make oldconfig.
518 # if auto.conf.cmd is missing then we are probably in a cleaned tree so
519 # we execute the config step to be sure to catch updated Kconfig files
520 include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
521         $(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
522         @# If the following part fails, include/config/auto.conf should be
523         @# deleted so "make silentoldconfig" will be re-run on the next build.
524         $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf || \
525                 { rm -f include/config/auto.conf; false; }
526         @# include/config.h has been updated after "make silentoldconfig".
527         @# We need to touch include/config/auto.conf so it gets newer
528         @# than include/config.h.
529         @# Otherwise, 'make silentoldconfig' would be invoked twice.
530         $(Q)touch include/config/auto.conf
531
532 u-boot.cfg spl/u-boot.cfg tpl/u-boot.cfg: include/config.h FORCE
533         $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf $(@)
534
535 -include include/autoconf.mk
536 -include include/autoconf.mk.dep
537
538 # We want to include arch/$(ARCH)/config.mk only when include/config/auto.conf
539 # is up-to-date. When we switch to a different board configuration, old CONFIG
540 # macros are still remaining in include/config/auto.conf. Without the following
541 # gimmick, wrong config.mk would be included leading nasty warnings/errors.
542 ifneq ($(wildcard $(KCONFIG_CONFIG)),)
543 ifneq ($(wildcard include/config/auto.conf),)
544 autoconf_is_old := $(shell find . -path ./$(KCONFIG_CONFIG) -newer \
545                                                 include/config/auto.conf)
546 ifeq ($(autoconf_is_old),)
547 include config.mk
548 include arch/$(ARCH)/Makefile
549 endif
550 endif
551 endif
552
553 # These are set by the arch-specific config.mk. Make sure they are exported
554 # so they can be used when building an EFI application.
555 export EFI_LDS          # Filename of EFI link script in arch/$(ARCH)/lib
556 export EFI_CRT0         # Filename of EFI CRT0 in arch/$(ARCH)/lib
557 export EFI_RELOC        # Filename of EFU relocation code in arch/$(ARCH)/lib
558 export CFLAGS_EFI       # Compiler flags to add when building EFI app
559 export CFLAGS_NON_EFI   # Compiler flags to remove when building EFI app
560 export EFI_TARGET       # binutils target if EFI is natively supported
561
562 # If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use
563 # that (or fail if absent).  Otherwise, search for a linker script in a
564 # standard location.
565
566 ifndef LDSCRIPT
567         #LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot.lds.debug
568         ifdef CONFIG_SYS_LDSCRIPT
569                 # need to strip off double quotes
570                 LDSCRIPT := $(srctree)/$(CONFIG_SYS_LDSCRIPT:"%"=%)
571         endif
572 endif
573
574 # If there is no specified link script, we look in a number of places for it
575 ifndef LDSCRIPT
576         ifeq ($(wildcard $(LDSCRIPT)),)
577                 LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot.lds
578         endif
579         ifeq ($(wildcard $(LDSCRIPT)),)
580                 LDSCRIPT := $(srctree)/$(CPUDIR)/u-boot.lds
581         endif
582         ifeq ($(wildcard $(LDSCRIPT)),)
583                 LDSCRIPT := $(srctree)/arch/$(ARCH)/cpu/u-boot.lds
584         endif
585 endif
586
587 else
588 # Dummy target needed, because used as prerequisite
589 include/config/auto.conf: ;
590 endif # $(dot-config)
591
592 #
593 # Xtensa linker script cannot be preprocessed with -ansi because of
594 # preprocessor operations on strings that don't make C identifiers.
595 #
596 ifeq ($(CONFIG_XTENSA),)
597 LDPPFLAGS       += -ansi
598 endif
599
600 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
601 KBUILD_CFLAGS   += -Os
602 else
603 KBUILD_CFLAGS   += -O2
604 endif
605
606 KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
607 KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks)
608
609 # change __FILE__ to the relative path from the srctree
610 KBUILD_CFLAGS   += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
611
612 KBUILD_CFLAGS   += -g
613 # $(KBUILD_AFLAGS) sets -g, which causes gcc to pass a suitable -g<format>
614 # option to the assembler.
615 KBUILD_AFLAGS   += -g
616
617 # Report stack usage if supported
618 # ARC tools based on GCC 7.1 has an issue with stack usage
619 # with naked functions, see commit message for more details
620 ifndef CONFIG_ARC
621 ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-stack-usage.sh $(CC)),y)
622         KBUILD_CFLAGS += -fstack-usage
623 endif
624 endif
625
626 KBUILD_CFLAGS += $(call cc-option,-Wno-format-nonliteral)
627 ifeq ($(cc-name),clang)
628 KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
629 KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
630 KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
631 KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
632 KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
633 endif
634
635 # turn jbsr into jsr for m68k
636 ifeq ($(ARCH),m68k)
637 ifeq ($(findstring 3.4,$(shell $(CC) --version)),3.4)
638 KBUILD_AFLAGS += -Wa,-gstabs,-S
639 endif
640 endif
641
642 # Prohibit date/time macros, which would make the build non-deterministic
643 KBUILD_CFLAGS   += $(call cc-option,-Werror=date-time)
644
645 include scripts/Makefile.extrawarn
646
647 # Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
648 KBUILD_CPPFLAGS += $(KCPPFLAGS)
649 KBUILD_AFLAGS += $(KAFLAGS)
650 KBUILD_CFLAGS += $(KCFLAGS)
651
652 # Use UBOOTINCLUDE when you must reference the include/ directory.
653 # Needed to be compatible with the O= option
654 UBOOTINCLUDE    := \
655                 -Iinclude \
656                 $(if $(KBUILD_SRC), -I$(srctree)/include) \
657                 $(if $(CONFIG_$(SPL_)SYS_THUMB_BUILD), \
658                         $(if $(CONFIG_HAS_THUMB2),, \
659                                 -I$(srctree)/arch/$(ARCH)/thumb1/include),) \
660                 -I$(srctree)/arch/$(ARCH)/include \
661                 -include $(srctree)/include/linux/kconfig.h
662
663 NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
664 CHECKFLAGS     += $(NOSTDINC_FLAGS)
665
666 # FIX ME
667 cpp_flags := $(KBUILD_CPPFLAGS) $(PLATFORM_CPPFLAGS) $(UBOOTINCLUDE) \
668                                                         $(NOSTDINC_FLAGS)
669 c_flags := $(KBUILD_CFLAGS) $(cpp_flags)
670
671 #########################################################################
672 # U-Boot objects....order is important (i.e. start must be first)
673
674 HAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(srctree)/board/$(VENDOR)/common/Makefile),y,n)
675
676 libs-y += lib/
677 libs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
678 libs-$(CONFIG_OF_EMBED) += dts/
679 libs-y += fs/
680 libs-y += net/
681 libs-y += disk/
682 libs-y += drivers/
683 libs-y += drivers/dma/
684 libs-y += drivers/gpio/
685 libs-y += drivers/i2c/
686 libs-y += drivers/mtd/
687 libs-$(CONFIG_CMD_NAND) += drivers/mtd/nand/
688 libs-y += drivers/mtd/onenand/
689 libs-$(CONFIG_CMD_UBI) += drivers/mtd/ubi/
690 libs-y += drivers/mtd/spi/
691 libs-y += drivers/net/
692 libs-y += drivers/net/phy/
693 libs-y += drivers/pci/
694 libs-y += drivers/power/ \
695         drivers/power/domain/ \
696         drivers/power/fuel_gauge/ \
697         drivers/power/mfd/ \
698         drivers/power/pmic/ \
699         drivers/power/battery/ \
700         drivers/power/regulator/
701 libs-y += drivers/spi/
702 libs-$(CONFIG_FMAN_ENET) += drivers/net/fm/
703 libs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
704 libs-$(CONFIG_SYS_FSL_MMDC) += drivers/ddr/fsl/
705 libs-$(CONFIG_ALTERA_SDRAM) += drivers/ddr/altera/
706 libs-y += drivers/serial/
707 libs-y += drivers/usb/dwc3/
708 libs-y += drivers/usb/common/
709 libs-y += drivers/usb/emul/
710 libs-y += drivers/usb/eth/
711 libs-y += drivers/usb/gadget/
712 libs-y += drivers/usb/gadget/udc/
713 libs-y += drivers/usb/host/
714 libs-y += drivers/usb/musb/
715 libs-y += drivers/usb/musb-new/
716 libs-y += drivers/usb/phy/
717 libs-y += drivers/usb/ulpi/
718 libs-y += cmd/
719 libs-y += common/
720 libs-y += env/
721 libs-$(CONFIG_API) += api/
722 libs-$(CONFIG_HAS_POST) += post/
723 libs-y += test/
724 libs-y += test/dm/
725 libs-$(CONFIG_UT_ENV) += test/env/
726 libs-$(CONFIG_UT_OVERLAY) += test/overlay/
727
728 libs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/)
729
730 libs-y := $(sort $(libs-y))
731
732 u-boot-dirs     := $(patsubst %/,%,$(filter %/, $(libs-y))) tools examples
733
734 u-boot-alldirs  := $(sort $(u-boot-dirs) $(patsubst %/,%,$(filter %/, $(libs-))))
735
736 libs-y          := $(patsubst %/, %/built-in.o, $(libs-y))
737
738 u-boot-init := $(head-y)
739 u-boot-main := $(libs-y)
740
741
742 # Add GCC lib
743 ifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y)
744 PLATFORM_LIBGCC = arch/$(ARCH)/lib/lib.a
745 else
746 PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(c_flags) -print-libgcc-file-name`) -lgcc
747 endif
748 PLATFORM_LIBS += $(PLATFORM_LIBGCC)
749
750 ifdef CONFIG_CC_COVERAGE
751 KBUILD_CFLAGS += --coverage
752 PLATFORM_LIBGCC += -lgcov
753 endif
754
755 export PLATFORM_LIBS
756 export PLATFORM_LIBGCC
757
758 # Special flags for CPP when processing the linker script.
759 # Pass the version down so we can handle backwards compatibility
760 # on the fly.
761 LDPPFLAGS += \
762         -include $(srctree)/include/u-boot/u-boot.lds.h \
763         -DCPUDIR=$(CPUDIR) \
764         $(shell $(LD) --version | \
765           sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p')
766
767 #########################################################################
768 #########################################################################
769
770 ifneq ($(CONFIG_BOARD_SIZE_LIMIT),)
771 BOARD_SIZE_CHECK = \
772         @actual=`wc -c $@ | awk '{print $$1}'`; \
773         limit=`printf "%d" $(CONFIG_BOARD_SIZE_LIMIT)`; \
774         if test $$actual -gt $$limit; then \
775                 echo "$@ exceeds file size limit:" >&2 ; \
776                 echo "  limit:  $$limit bytes" >&2 ; \
777                 echo "  actual: $$actual bytes" >&2 ; \
778                 echo "  excess: $$((actual - limit)) bytes" >&2; \
779                 exit 1; \
780         fi
781 else
782 BOARD_SIZE_CHECK =
783 endif
784
785 # Statically apply RELA-style relocations (currently arm64 only)
786 # This is useful for arm64 where static relocation needs to be performed on
787 # the raw binary, but certain simulators only accept an ELF file (but don't
788 # do the relocation).
789 ifneq ($(CONFIG_STATIC_RELA),)
790 # $(1) is u-boot ELF, $(2) is u-boot bin, $(3) is text base
791 DO_STATIC_RELA = \
792         start=$$($(NM) $(1) | grep __rel_dyn_start | cut -f 1 -d ' '); \
793         end=$$($(NM) $(1) | grep __rel_dyn_end | cut -f 1 -d ' '); \
794         tools/relocate-rela $(2) $(3) $$start $$end
795 else
796 DO_STATIC_RELA =
797 endif
798
799 # Always append ALL so that arch config.mk's can add custom ones
800 ALL-y += u-boot.srec u-boot.bin u-boot.sym System.map binary_size_check
801
802 ALL-$(CONFIG_ONENAND_U_BOOT) += u-boot-onenand.bin
803 ifeq ($(CONFIG_SPL_FSL_PBL),y)
804 ALL-$(CONFIG_RAMBOOT_PBL) += u-boot-with-spl-pbl.bin
805 else
806 ifneq ($(CONFIG_SECURE_BOOT), y)
807 # For Secure Boot The Image needs to be signed and Header must also
808 # be included. So The image has to be built explicitly
809 ALL-$(CONFIG_RAMBOOT_PBL) += u-boot.pbl
810 endif
811 endif
812 ALL-$(CONFIG_SPL) += spl/u-boot-spl.bin
813 ifeq ($(CONFIG_MX6)$(CONFIG_SECURE_BOOT), yy)
814 ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
815 else
816 ifeq ($(CONFIG_MX7)$(CONFIG_SECURE_BOOT), yy)
817 ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
818 else
819 ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot.img
820 endif
821 endif
822 ALL-$(CONFIG_TPL) += tpl/u-boot-tpl.bin
823 ALL-$(CONFIG_OF_SEPARATE) += u-boot.dtb
824 ifeq ($(CONFIG_SPL_FRAMEWORK),y)
825 ALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb.img
826 endif
827 ALL-$(CONFIG_OF_HOSTFILE) += u-boot.dtb
828 ifneq ($(CONFIG_SPL_TARGET),)
829 ALL-$(CONFIG_SPL) += $(CONFIG_SPL_TARGET:"%"=%)
830 endif
831 ALL-$(CONFIG_REMAKE_ELF) += u-boot.elf
832 ALL-$(CONFIG_EFI_APP) += u-boot-app.efi
833 ALL-$(CONFIG_EFI_STUB) += u-boot-payload.efi
834
835 ifneq ($(BUILD_ROM)$(CONFIG_BUILD_ROM),)
836 ALL-$(CONFIG_X86_RESET_VECTOR) += u-boot.rom
837 endif
838
839 # Build a combined spl + u-boot image for sunxi
840 ifeq ($(CONFIG_ARCH_SUNXI)$(CONFIG_SPL),yy)
841 ALL-y += u-boot-sunxi-with-spl.bin
842 endif
843
844 # enable combined SPL/u-boot/dtb rules for tegra
845 ifeq ($(CONFIG_TEGRA)$(CONFIG_SPL),yy)
846 ALL-y += u-boot-tegra.bin u-boot-nodtb-tegra.bin
847 ALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb-tegra.bin
848 endif
849
850 # Add optional build target if defined in board/cpu/soc headers
851 ifneq ($(CONFIG_BUILD_TARGET),)
852 ALL-y += $(CONFIG_BUILD_TARGET:"%"=%)
853 endif
854
855 ifneq ($(CONFIG_SYS_INIT_SP_BSS_OFFSET),)
856 ALL-y += init_sp_bss_offset_check
857 endif
858
859 LDFLAGS_u-boot += $(LDFLAGS_FINAL)
860
861 # Avoid 'Not enough room for program headers' error on binutils 2.28 onwards.
862 LDFLAGS_u-boot += $(call ld-option, --no-dynamic-linker)
863
864 ifeq ($(CONFIG_ARC)$(CONFIG_NIOS2)$(CONFIG_X86)$(CONFIG_XTENSA),)
865 LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
866 endif
867
868 # Normally we fill empty space with 0xff
869 quiet_cmd_objcopy = OBJCOPY $@
870 cmd_objcopy = $(OBJCOPY) --gap-fill=0xff $(OBJCOPYFLAGS) \
871         $(OBJCOPYFLAGS_$(@F)) $< $@
872
873 # Provide a version which does not do this, for use by EFI
874 quiet_cmd_zobjcopy = OBJCOPY $@
875 cmd_zobjcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
876
877 quiet_cmd_efipayload = OBJCOPY $@
878 cmd_efipayload = $(OBJCOPY) -I binary -O $(EFIPAYLOAD_BFDTARGET) -B $(EFIPAYLOAD_BFDARCH) $< $@
879
880 MKIMAGEOUTPUT ?= /dev/null
881
882 quiet_cmd_mkimage = MKIMAGE $@
883 cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
884         >$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
885
886 quiet_cmd_mkfitimage = MKIMAGE $@
887 cmd_mkfitimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -f $(U_BOOT_ITS) -E $@ \
888         >$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
889
890 quiet_cmd_cat = CAT     $@
891 cmd_cat = cat $(filter-out $(PHONY), $^) > $@
892
893 append = cat $(filter-out $< $(PHONY), $^) >> $@
894
895 quiet_cmd_pad_cat = CAT     $@
896 cmd_pad_cat = $(cmd_objcopy) && $(append) || rm -f $@
897
898 cfg: u-boot.cfg
899
900 quiet_cmd_cfgcheck = CFGCHK  $2
901 cmd_cfgcheck = $(srctree)/scripts/check-config.sh $2 \
902                 $(srctree)/scripts/config_whitelist.txt $(srctree)
903
904 all:            $(ALL-y) cfg
905 ifeq ($(CONFIG_DM_I2C_COMPAT)$(CONFIG_SANDBOX),y)
906         @echo "===================== WARNING ======================"
907         @echo "This board uses CONFIG_DM_I2C_COMPAT. Please remove"
908         @echo "(possibly in a subsequent patch in your series)"
909         @echo "before sending patches to the mailing list."
910         @echo "===================================================="
911 endif
912         @# Check that this build does not use CONFIG options that we do not
913         @# know about unless they are in Kconfig. All the existing CONFIG
914         @# options are whitelisted, so new ones should not be added.
915         $(call cmd,cfgcheck,u-boot.cfg)
916
917 PHONY += dtbs
918 dtbs: dts/dt.dtb
919         @:
920 dts/dt.dtb: u-boot
921         $(Q)$(MAKE) $(build)=dts dtbs
922
923 quiet_cmd_copy = COPY    $@
924       cmd_copy = cp $< $@
925
926 ifeq ($(CONFIG_MULTI_DTB_FIT),y)
927
928 fit-dtb.blob: dts/dt.dtb FORCE
929         $(call if_changed,mkimage)
930
931 MKIMAGEFLAGS_fit-dtb.blob = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
932         -a 0 -e 0 -E \
933         $(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) -d /dev/null
934
935 u-boot-fit-dtb.bin: u-boot-nodtb.bin fit-dtb.blob
936         $(call if_changed,cat)
937
938 u-boot.bin: u-boot-fit-dtb.bin FORCE
939         $(call if_changed,copy)
940 else ifeq ($(CONFIG_OF_SEPARATE),y)
941 u-boot-dtb.bin: u-boot-nodtb.bin dts/dt.dtb FORCE
942         $(call if_changed,cat)
943
944 u-boot.bin: u-boot-dtb.bin FORCE
945         $(call if_changed,copy)
946 else
947 u-boot.bin: u-boot-nodtb.bin FORCE
948         $(call if_changed,copy)
949 endif
950
951 %.imx: %.bin
952         $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
953
954 %.vyb: %.imx
955         $(Q)$(MAKE) $(build)=arch/arm/cpu/armv7/vf610 $@
956
957 quiet_cmd_copy = COPY    $@
958       cmd_copy = cp $< $@
959
960 u-boot.dtb: dts/dt.dtb
961         $(call cmd,copy)
962
963 OBJCOPYFLAGS_u-boot.hex := -O ihex
964
965 OBJCOPYFLAGS_u-boot.srec := -O srec
966
967 u-boot.hex u-boot.srec: u-boot FORCE
968         $(call if_changed,objcopy)
969
970 OBJCOPYFLAGS_u-boot-elf.srec := $(OBJCOPYFLAGS_u-boot.srec)
971
972 u-boot-elf.srec: u-boot.elf FORCE
973         $(call if_changed,objcopy)
974
975 OBJCOPYFLAGS_u-boot-spl.srec = $(OBJCOPYFLAGS_u-boot.srec)
976
977 spl/u-boot-spl.srec: spl/u-boot-spl FORCE
978         $(call if_changed,objcopy)
979
980 OBJCOPYFLAGS_u-boot-nodtb.bin := -O binary \
981                 $(if $(CONFIG_X86_16BIT_INIT),-R .start16 -R .resetvec)
982
983 binary_size_check: u-boot-nodtb.bin FORCE
984         @file_size=$(shell wc -c u-boot-nodtb.bin | awk '{print $$1}') ; \
985         map_size=$(shell cat u-boot.map | \
986                 awk '/_image_copy_start/ {start = $$1} /_image_binary_end/ {end = $$1} END {if (start != "" && end != "") print "ibase=16; " toupper(end) " - " toupper(start)}' \
987                 | sed 's/0X//g' \
988                 | bc); \
989         if [ "" != "$$map_size" ]; then \
990                 if test $$map_size -ne $$file_size; then \
991                         echo "u-boot.map shows a binary size of $$map_size" >&2 ; \
992                         echo "  but u-boot-nodtb.bin shows $$file_size" >&2 ; \
993                         exit 1; \
994                 fi \
995         fi
996
997 ifneq ($(CONFIG_SYS_INIT_SP_BSS_OFFSET),)
998 ifneq ($(CONFIG_SYS_MALLOC_F_LEN),)
999 subtract_sys_malloc_f_len = space=$$(($${space} - $(CONFIG_SYS_MALLOC_F_LEN)))
1000 else
1001 subtract_sys_malloc_f_len = true
1002 endif
1003 # The 1/4 margin below is somewhat arbitrary. The likely initial SP usage is
1004 # so low that the DTB could probably use 90%+ of the available space, for
1005 # current values of CONFIG_SYS_INIT_SP_BSS_OFFSET at least. However, let's be
1006 # safe for now and tweak this later if space becomes tight.
1007 # A rejected alternative would be to check that some absolute minimum stack
1008 # space was available. However, since CONFIG_SYS_INIT_SP_BSS_OFFSET is
1009 # deliberately build-specific, to take account of build-to-build stack usage
1010 # differences due to different feature sets, there is no common absolute value
1011 # to check against.
1012 init_sp_bss_offset_check: u-boot.dtb FORCE
1013         @dtb_size=$(shell wc -c u-boot.dtb | awk '{print $$1}') ; \
1014         space=$(CONFIG_SYS_INIT_SP_BSS_OFFSET) ; \
1015         $(subtract_sys_malloc_f_len) ; \
1016         quarter_space=$$(($${space} / 4)) ; \
1017         if [ $${dtb_size} -gt $${quarter_space} ]; then \
1018                 echo "u-boot.dtb is larger than 1 quarter of " >&2 ; \
1019                 echo "(CONFIG_SYS_INIT_SP_BSS_OFFSET - CONFIG_SYS_MALLOC_F_LEN)" >&2 ; \
1020                 exit 1 ; \
1021         fi
1022 endif
1023
1024 u-boot-nodtb.bin: u-boot FORCE
1025         $(call if_changed,objcopy)
1026         $(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
1027         $(BOARD_SIZE_CHECK)
1028
1029 u-boot.ldr:     u-boot
1030                 $(CREATE_LDR_ENV)
1031                 $(LDR) -T $(CONFIG_CPU) -c $@ $< $(LDR_FLAGS)
1032                 $(BOARD_SIZE_CHECK)
1033
1034 # binman
1035 # ---------------------------------------------------------------------------
1036 quiet_cmd_binman = BINMAN  $@
1037 cmd_binman = $(srctree)/tools/binman/binman -d u-boot.dtb -O . \
1038                 -I . -I $(srctree)/board/$(BOARDDIR) $<
1039
1040 OBJCOPYFLAGS_u-boot.ldr.hex := -I binary -O ihex
1041
1042 OBJCOPYFLAGS_u-boot.ldr.srec := -I binary -O srec
1043
1044 u-boot.ldr.hex u-boot.ldr.srec: u-boot.ldr FORCE
1045         $(call if_changed,objcopy)
1046
1047 #
1048 # U-Boot entry point, needed for booting of full-blown U-Boot
1049 # from the SPL U-Boot version.
1050 #
1051 ifndef CONFIG_SYS_UBOOT_START
1052 CONFIG_SYS_UBOOT_START := 0
1053 endif
1054
1055 # Create a file containing the configuration options the image was built with
1056 quiet_cmd_cpp_cfg = CFG     $@
1057 cmd_cpp_cfg = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) -ansi \
1058         -DDO_DEPS_ONLY -D__ASSEMBLY__ -x assembler-with-cpp -P -dM -E -o $@ $<
1059
1060 # Boards with more complex image requirments can provide an .its source file
1061 # or a generator script
1062 ifneq ($(CONFIG_SPL_FIT_SOURCE),"")
1063 U_BOOT_ITS = $(subst ",,$(CONFIG_SPL_FIT_SOURCE))
1064 else
1065 ifneq ($(CONFIG_SPL_FIT_GENERATOR),"")
1066 U_BOOT_ITS := u-boot.its
1067 $(U_BOOT_ITS): FORCE
1068         $(srctree)/$(CONFIG_SPL_FIT_GENERATOR) \
1069         $(patsubst %,arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) > $@
1070 endif
1071 endif
1072
1073 ifdef CONFIG_SPL_LOAD_FIT
1074 MKIMAGEFLAGS_u-boot.img = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
1075         -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
1076         -n "U-Boot $(UBOOTRELEASE) for $(BOARD) board" -E \
1077         $(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST)))
1078 else
1079 MKIMAGEFLAGS_u-boot.img = -A $(ARCH) -T firmware -C none -O u-boot \
1080         -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
1081         -n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
1082 MKIMAGEFLAGS_u-boot-ivt.img = -A $(ARCH) -T firmware_ivt -C none -O u-boot \
1083         -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
1084         -n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
1085 u-boot-ivt.img: MKIMAGEOUTPUT = u-boot-ivt.img.log
1086 CLEAN_FILES += u-boot-ivt.img.log u-boot-dtb.imx.log SPL.log u-boot.imx.log
1087 endif
1088
1089 MKIMAGEFLAGS_u-boot-dtb.img = $(MKIMAGEFLAGS_u-boot.img)
1090
1091 MKIMAGEFLAGS_u-boot.kwb = -n $(srctree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%) \
1092         -T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE)
1093
1094 MKIMAGEFLAGS_u-boot-spl.kwb = -n $(srctree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%) \
1095         -T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) \
1096         $(if $(KEYDIR),-k $(KEYDIR))
1097
1098 MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
1099                 -R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage
1100
1101 u-boot-dtb.img u-boot.img u-boot.kwb u-boot.pbl u-boot-ivt.img: \
1102                 $(if $(CONFIG_SPL_LOAD_FIT),u-boot-nodtb.bin dts/dt.dtb,u-boot.bin) FORCE
1103         $(call if_changed,mkimage)
1104
1105 u-boot.itb: u-boot-nodtb.bin dts/dt.dtb $(U_BOOT_ITS) FORCE
1106         $(call if_changed,mkfitimage)
1107         $(BOARD_SIZE_CHECK)
1108
1109 u-boot-spl.kwb: u-boot.img spl/u-boot-spl.bin FORCE
1110         $(call if_changed,mkimage)
1111
1112 u-boot.sha1:    u-boot.bin
1113                 tools/ubsha1 u-boot.bin
1114
1115 u-boot.dis:     u-boot
1116                 $(OBJDUMP) -d $< > $@
1117
1118 ifdef CONFIG_TPL
1119 SPL_PAYLOAD := tpl/u-boot-with-tpl.bin
1120 else
1121 SPL_PAYLOAD := u-boot.bin
1122 endif
1123
1124 OBJCOPYFLAGS_u-boot-with-spl.bin = -I binary -O binary \
1125                                    --pad-to=$(CONFIG_SPL_PAD_TO)
1126 u-boot-with-spl.bin: spl/u-boot-spl.bin $(SPL_PAYLOAD) FORCE
1127         $(call if_changed,pad_cat)
1128
1129 MKIMAGEFLAGS_lpc32xx-spl.img = -T lpc32xximage -a $(CONFIG_SPL_TEXT_BASE)
1130
1131 lpc32xx-spl.img: spl/u-boot-spl.bin FORCE
1132         $(call if_changed,mkimage)
1133
1134 OBJCOPYFLAGS_lpc32xx-boot-0.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
1135
1136 lpc32xx-boot-0.bin: lpc32xx-spl.img FORCE
1137         $(call if_changed,objcopy)
1138
1139 OBJCOPYFLAGS_lpc32xx-boot-1.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
1140
1141 lpc32xx-boot-1.bin: lpc32xx-spl.img FORCE
1142         $(call if_changed,objcopy)
1143
1144 lpc32xx-full.bin: lpc32xx-boot-0.bin lpc32xx-boot-1.bin u-boot.img FORCE
1145         $(call if_changed,cat)
1146
1147 CLEAN_FILES += lpc32xx-*
1148
1149 OBJCOPYFLAGS_u-boot-with-tpl.bin = -I binary -O binary \
1150                                    --pad-to=$(CONFIG_TPL_PAD_TO)
1151 tpl/u-boot-with-tpl.bin: tpl/u-boot-tpl.bin u-boot.bin FORCE
1152         $(call if_changed,pad_cat)
1153
1154 SPL: spl/u-boot-spl.bin FORCE
1155         $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
1156
1157 u-boot-with-spl.imx u-boot-with-nand-spl.imx: SPL u-boot.bin FORCE
1158         $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
1159
1160 MKIMAGEFLAGS_u-boot.ubl = -n $(UBL_CONFIG) -T ublimage -e $(CONFIG_SYS_TEXT_BASE)
1161
1162 u-boot.ubl: u-boot-with-spl.bin FORCE
1163         $(call if_changed,mkimage)
1164
1165 MKIMAGEFLAGS_u-boot-spl.ais = -s -n $(if $(CONFIG_AIS_CONFIG_FILE), \
1166         $(srctree)/$(CONFIG_AIS_CONFIG_FILE:"%"=%),"/dev/null") \
1167         -T aisimage -e $(CONFIG_SPL_TEXT_BASE)
1168 spl/u-boot-spl.ais: spl/u-boot-spl.bin FORCE
1169         $(call if_changed,mkimage)
1170
1171 OBJCOPYFLAGS_u-boot.ais = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
1172 u-boot.ais: spl/u-boot-spl.ais u-boot.img FORCE
1173         $(call if_changed,pad_cat)
1174
1175 u-boot-signed.sb: u-boot.bin spl/u-boot-spl.bin
1176         $(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs u-boot-signed.sb
1177 u-boot.sb: u-boot.bin spl/u-boot-spl.bin
1178         $(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs u-boot.sb
1179
1180 # On x600 (SPEAr600) U-Boot is appended to U-Boot SPL.
1181 # Both images are created using mkimage (crc etc), so that the ROM
1182 # bootloader can check its integrity. Padding needs to be done to the
1183 # SPL image (with mkimage header) and not the binary. Otherwise the resulting image
1184 # which is loaded/copied by the ROM bootloader to SRAM doesn't fit.
1185 # The resulting image containing both U-Boot images is called u-boot.spr
1186 MKIMAGEFLAGS_u-boot-spl.img = -A $(ARCH) -T firmware -C none \
1187         -a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n XLOADER
1188 spl/u-boot-spl.img: spl/u-boot-spl.bin FORCE
1189         $(call if_changed,mkimage)
1190
1191 OBJCOPYFLAGS_u-boot.spr = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \
1192                           --gap-fill=0xff
1193 u-boot.spr: spl/u-boot-spl.img u-boot.img FORCE
1194         $(call if_changed,pad_cat)
1195
1196 ifneq ($(CONFIG_ARCH_SOCFPGA),)
1197 quiet_cmd_socboot = SOCBOOT $@
1198 cmd_socboot = cat       spl/u-boot-spl.sfp spl/u-boot-spl.sfp   \
1199                         spl/u-boot-spl.sfp spl/u-boot-spl.sfp   \
1200                         u-boot.img > $@ || rm -f $@
1201 u-boot-with-spl.sfp: spl/u-boot-spl.sfp u-boot.img FORCE
1202         $(call if_changed,socboot)
1203 endif
1204
1205 # x86 uses a large ROM. We fill it with 0xff, put the 16-bit stuff (including
1206 # reset vector) at the top, Intel ME descriptor at the bottom, and U-Boot in
1207 # the middle. This is handled by binman based on an image description in the
1208 # board's device tree.
1209 ifneq ($(CONFIG_X86_RESET_VECTOR),)
1210 rom: u-boot.rom FORCE
1211
1212 refcode.bin: $(srctree)/board/$(BOARDDIR)/refcode.bin FORCE
1213         $(call if_changed,copy)
1214
1215 quiet_cmd_ldr = LD      $@
1216 cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \
1217                $(filter-out FORCE,$^) -o $@
1218
1219 u-boot.rom: u-boot-x86-16bit.bin u-boot.bin \
1220                 $(if $(CONFIG_SPL_X86_16BIT_INIT),spl/u-boot-spl.bin) \
1221                 $(if $(CONFIG_HAVE_REFCODE),refcode.bin) FORCE
1222         $(call if_changed,binman)
1223
1224 OBJCOPYFLAGS_u-boot-x86-16bit.bin := -O binary -j .start16 -j .resetvec
1225 u-boot-x86-16bit.bin: u-boot FORCE
1226         $(call if_changed,objcopy)
1227 endif
1228
1229 ifneq ($(CONFIG_ARCH_SUNXI),)
1230 ifeq ($(CONFIG_ARM64),)
1231 u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.img u-boot.dtb FORCE
1232         $(call if_changed,binman)
1233 else
1234 u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.itb FORCE
1235         $(call if_changed,cat)
1236 endif
1237 endif
1238
1239 ifneq ($(CONFIG_TEGRA),)
1240 ifneq ($(CONFIG_BINMAN),)
1241 u-boot-dtb-tegra.bin u-boot-tegra.bin u-boot-nodtb-tegra.bin: \
1242                 spl/u-boot-spl u-boot.bin FORCE
1243         $(call if_changed,binman)
1244 else
1245 OBJCOPYFLAGS_u-boot-nodtb-tegra.bin = -O binary --pad-to=$(CONFIG_SYS_TEXT_BASE)
1246 u-boot-nodtb-tegra.bin: spl/u-boot-spl u-boot-nodtb.bin FORCE
1247         $(call if_changed,pad_cat)
1248
1249 OBJCOPYFLAGS_u-boot-tegra.bin = -O binary --pad-to=$(CONFIG_SYS_TEXT_BASE)
1250 u-boot-tegra.bin: spl/u-boot-spl u-boot.bin FORCE
1251         $(call if_changed,pad_cat)
1252
1253 u-boot-dtb-tegra.bin: u-boot-tegra.bin FORCE
1254         $(call if_changed,copy)
1255 endif  # binman
1256 endif
1257
1258 OBJCOPYFLAGS_u-boot-app.efi := $(OBJCOPYFLAGS_EFI)
1259 u-boot-app.efi: u-boot FORCE
1260         $(call if_changed,zobjcopy)
1261
1262 u-boot.bin.o: u-boot.bin FORCE
1263         $(call if_changed,efipayload)
1264
1265 u-boot-payload.lds: $(LDSCRIPT_EFI) FORCE
1266         $(call if_changed_dep,cpp_lds)
1267
1268 # Rule to link the EFI payload which contains a stub and a U-Boot binary
1269 quiet_cmd_u-boot_payload ?= LD      $@
1270       cmd_u-boot_payload ?= $(LD) $(LDFLAGS_EFI_PAYLOAD) -o $@ \
1271       -T u-boot-payload.lds arch/x86/cpu/call32.o \
1272       lib/efi/efi.o lib/efi/efi_stub.o u-boot.bin.o \
1273       $(addprefix arch/$(ARCH)/lib/,$(EFISTUB))
1274
1275 u-boot-payload: u-boot.bin.o u-boot-payload.lds FORCE
1276         $(call if_changed,u-boot_payload)
1277
1278 OBJCOPYFLAGS_u-boot-payload.efi := $(OBJCOPYFLAGS_EFI)
1279 u-boot-payload.efi: u-boot-payload FORCE
1280         $(call if_changed,zobjcopy)
1281
1282 u-boot-img.bin: spl/u-boot-spl.bin u-boot.img FORCE
1283         $(call if_changed,cat)
1284
1285 #Add a target to create boot binary having SPL binary in PBI format
1286 #concatenated with u-boot binary. It is need by PowerPC SoC having
1287 #internal SRAM <= 512KB.
1288 MKIMAGEFLAGS_u-boot-spl.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
1289                 -R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage \
1290                 -A $(ARCH) -a $(CONFIG_SPL_TEXT_BASE)
1291
1292 spl/u-boot-spl.pbl: spl/u-boot-spl.bin FORCE
1293         $(call if_changed,mkimage)
1294
1295 ifeq ($(ARCH),arm)
1296 UBOOT_BINLOAD := u-boot.img
1297 else
1298 UBOOT_BINLOAD := u-boot.bin
1299 endif
1300
1301 OBJCOPYFLAGS_u-boot-with-spl-pbl.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \
1302                           --gap-fill=0xff
1303
1304 u-boot-with-spl-pbl.bin: spl/u-boot-spl.pbl $(UBOOT_BINLOAD) FORCE
1305         $(call if_changed,pad_cat)
1306
1307 # PPC4xx needs the SPL at the end of the image, since the reset vector
1308 # is located at 0xfffffffc. So we can't use the "u-boot-img.bin" target
1309 # and need to introduce a new build target with the full blown U-Boot
1310 # at the start padded up to the start of the SPL image. And then concat
1311 # the SPL image to the end.
1312
1313 OBJCOPYFLAGS_u-boot-img-spl-at-end.bin := -I binary -O binary \
1314         --pad-to=$(CONFIG_UBOOT_PAD_TO) --gap-fill=0xff
1315 u-boot-img-spl-at-end.bin: u-boot.img spl/u-boot-spl.bin FORCE
1316         $(call if_changed,pad_cat)
1317
1318 # Create a new ELF from a raw binary file.
1319 ifndef PLATFORM_ELFENTRY
1320   PLATFORM_ELFENTRY = "_start"
1321 endif
1322 quiet_cmd_u-boot-elf ?= LD      $@
1323         cmd_u-boot-elf ?= $(LD) u-boot-elf.o -o $@ \
1324         --defsym=$(PLATFORM_ELFENTRY)=$(CONFIG_SYS_TEXT_BASE) \
1325         -Ttext=$(CONFIG_SYS_TEXT_BASE)
1326 u-boot.elf: u-boot.bin
1327         $(Q)$(OBJCOPY) -I binary $(PLATFORM_ELFFLAGS) $< u-boot-elf.o
1328         $(call if_changed,u-boot-elf)
1329
1330 ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(ARCH)/Makefile.postlink)
1331
1332 # Rule to link u-boot
1333 # May be overridden by arch/$(ARCH)/config.mk
1334 quiet_cmd_u-boot__ ?= LD      $@
1335       cmd_u-boot__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_u-boot) -o $@ \
1336       -T u-boot.lds $(u-boot-init)                             \
1337       --start-group $(u-boot-main) --end-group                 \
1338       $(PLATFORM_LIBS) -Map u-boot.map;                        \
1339       $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
1340
1341 quiet_cmd_smap = GEN     common/system_map.o
1342 cmd_smap = \
1343         smap=`$(call SYSTEM_MAP,u-boot) | \
1344                 awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \
1345         $(CC) $(c_flags) -DSYSTEM_MAP="\"$${smap}\"" \
1346                 -c $(srctree)/common/system_map.c -o common/system_map.o
1347
1348 u-boot: $(u-boot-init) $(u-boot-main) u-boot.lds FORCE
1349         +$(call if_changed,u-boot__)
1350 ifeq ($(CONFIG_KALLSYMS),y)
1351         $(call cmd,smap)
1352         $(call cmd,u-boot__) common/system_map.o
1353 endif
1354
1355 ifeq ($(CONFIG_RISCV),y)
1356         @tools/prelink-riscv $@ 0
1357 endif
1358
1359 quiet_cmd_sym ?= SYM     $@
1360       cmd_sym ?= $(OBJDUMP) -t $< > $@
1361 u-boot.sym: u-boot FORCE
1362         $(call if_changed,sym)
1363
1364 # The actual objects are generated when descending,
1365 # make sure no implicit rule kicks in
1366 $(sort $(u-boot-init) $(u-boot-main)): $(u-boot-dirs) ;
1367
1368 # Handle descending into subdirectories listed in $(vmlinux-dirs)
1369 # Preset locale variables to speed up the build process. Limit locale
1370 # tweaks to this spot to avoid wrong language settings when running
1371 # make menuconfig etc.
1372 # Error messages still appears in the original language
1373
1374 PHONY += $(u-boot-dirs)
1375 $(u-boot-dirs): prepare scripts
1376         $(Q)$(MAKE) $(build)=$@
1377
1378 tools: prepare
1379 # The "tools" are needed early
1380 $(filter-out tools, $(u-boot-dirs)): tools
1381 # The "examples" conditionally depend on U-Boot (say, when USE_PRIVATE_LIBGCC
1382 # is "yes"), so compile examples after U-Boot is compiled.
1383 examples: $(filter-out examples, $(u-boot-dirs))
1384
1385 define filechk_uboot.release
1386         echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
1387 endef
1388
1389 # Store (new) UBOOTRELEASE string in include/config/uboot.release
1390 include/config/uboot.release: include/config/auto.conf FORCE
1391         $(call filechk,uboot.release)
1392
1393
1394 # Things we need to do before we recursively start building the kernel
1395 # or the modules are listed in "prepare".
1396 # A multi level approach is used. prepareN is processed before prepareN-1.
1397 # archprepare is used in arch Makefiles and when processed asm symlink,
1398 # version.h and scripts_basic is processed / created.
1399
1400 # Listed in dependency order
1401 PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
1402
1403 # prepare3 is used to check if we are building in a separate output directory,
1404 # and if so do:
1405 # 1) Check that make has not been executed in the kernel src $(srctree)
1406 prepare3: include/config/uboot.release
1407 ifneq ($(KBUILD_SRC),)
1408         @$(kecho) '  Using $(srctree) as source for U-Boot'
1409         $(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \
1410                 echo >&2 "  $(srctree) is not clean, please run 'make mrproper'"; \
1411                 echo >&2 "  in the '$(srctree)' directory.";\
1412                 /bin/false; \
1413         fi;
1414 endif
1415
1416 # prepare2 creates a makefile if using a separate output directory
1417 prepare2: prepare3 outputmakefile
1418
1419 prepare1: prepare2 $(version_h) $(timestamp_h) \
1420                    include/config/auto.conf
1421 ifeq ($(wildcard $(LDSCRIPT)),)
1422         @echo >&2 "  Could not find linker script."
1423         @/bin/false
1424 endif
1425
1426 ifeq ($(CONFIG_USE_DEFAULT_ENV_FILE),y)
1427 prepare1: $(defaultenv_h)
1428 endif
1429
1430 archprepare: prepare1 scripts_basic
1431
1432 prepare0: archprepare FORCE
1433         $(Q)$(MAKE) $(build)=.
1434
1435 # All the preparing..
1436 prepare: prepare0
1437
1438 # Generate some files
1439 # ---------------------------------------------------------------------------
1440
1441 define filechk_version.h
1442         (echo \#define PLAIN_VERSION \"$(UBOOTRELEASE)\"; \
1443         echo \#define U_BOOT_VERSION \"U-Boot \" PLAIN_VERSION; \
1444         echo \#define CC_VERSION_STRING \"$$(LC_ALL=C $(CC) --version | head -n 1)\"; \
1445         echo \#define LD_VERSION_STRING \"$$(LC_ALL=C $(LD) --version | head -n 1)\"; )
1446 endef
1447
1448 # The SOURCE_DATE_EPOCH mechanism requires a date that behaves like GNU date.
1449 # The BSD date on the other hand behaves different and would produce errors
1450 # with the misused '-d' switch.  Respect that and search a working date with
1451 # well known pre- and suffixes for the GNU variant of date.
1452 define filechk_timestamp.h
1453         (if test -n "$${SOURCE_DATE_EPOCH}"; then \
1454                 SOURCE_DATE="@$${SOURCE_DATE_EPOCH}"; \
1455                 DATE=""; \
1456                 for date in gdate date.gnu date; do \
1457                         $${date} -u -d "$${SOURCE_DATE}" >/dev/null 2>&1 && DATE="$${date}"; \
1458                 done; \
1459                 if test -n "$${DATE}"; then \
1460                         LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DATE "%b %d %C%y"'; \
1461                         LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TIME "%T"'; \
1462                         LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TZ "%z"'; \
1463                         LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DMI_DATE "%m/%d/%Y"'; \
1464                         LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_BUILD_DATE 0x%Y%m%d'; \
1465                 else \
1466                         return 42; \
1467                 fi; \
1468         else \
1469                 LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \
1470                 LC_ALL=C date +'#define U_BOOT_TIME "%T"'; \
1471                 LC_ALL=C date +'#define U_BOOT_TZ "%z"'; \
1472                 LC_ALL=C date +'#define U_BOOT_DMI_DATE "%m/%d/%Y"'; \
1473                 LC_ALL=C date +'#define U_BOOT_BUILD_DATE 0x%Y%m%d'; \
1474         fi)
1475 endef
1476
1477 define filechk_defaultenv.h
1478         (grep -v '^#' | \
1479          grep -v '^$$' | \
1480          tr '\n' '\0' | \
1481          sed -e 's/\\\x0/\n/' | \
1482          xxd -i ; echo ", 0x00" ; )
1483 endef
1484
1485 $(version_h): include/config/uboot.release FORCE
1486         $(call filechk,version.h)
1487
1488 $(timestamp_h): $(srctree)/Makefile FORCE
1489         $(call filechk,timestamp.h)
1490
1491 $(defaultenv_h): $(CONFIG_DEFAULT_ENV_FILE:"%"=%) FORCE
1492         $(call filechk,defaultenv.h)
1493
1494 # ---------------------------------------------------------------------------
1495 quiet_cmd_cpp_lds = LDS     $@
1496 cmd_cpp_lds = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) \
1497                 -D__ASSEMBLY__ -x assembler-with-cpp -P -o $@ $<
1498
1499 u-boot.lds: $(LDSCRIPT) prepare FORCE
1500         $(call if_changed_dep,cpp_lds)
1501
1502 spl/u-boot-spl.bin: spl/u-boot-spl
1503         @:
1504 spl/u-boot-spl: tools prepare \
1505                 $(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb) \
1506                 $(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_TPL_OF_PLATDATA),dts/dt.dtb)
1507         $(Q)$(MAKE) obj=spl -f $(srctree)/scripts/Makefile.spl all
1508
1509 spl/sunxi-spl.bin: spl/u-boot-spl
1510         @:
1511
1512 spl/sunxi-spl-with-ecc.bin: spl/sunxi-spl.bin
1513         @:
1514
1515 spl/u-boot-spl.sfp: spl/u-boot-spl
1516         @:
1517
1518 spl/boot.bin: spl/u-boot-spl
1519         @:
1520
1521 tpl/u-boot-tpl.bin: tools prepare \
1522                 $(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb)
1523         $(Q)$(MAKE) obj=tpl -f $(srctree)/scripts/Makefile.spl all
1524
1525 TAG_SUBDIRS := $(patsubst %,$(srctree)/%,$(u-boot-dirs) include)
1526
1527 FIND := find
1528 FINDFLAGS := -L
1529
1530 tags ctags:
1531                 ctags -w -o ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
1532                                                 -name '*.[chS]' -print`
1533                 ln -s ctags tags
1534
1535 etags:
1536                 etags -a -o etags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
1537                                                 -name '*.[chS]' -print`
1538 cscope:
1539                 $(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) -name '*.[chS]' -print > \
1540                                                 cscope.files
1541                 cscope -b -q -k
1542
1543 SYSTEM_MAP = \
1544                 $(NM) $1 | \
1545                 grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
1546                 LC_ALL=C sort
1547 System.map:     u-boot
1548                 @$(call SYSTEM_MAP,$<) > $@
1549
1550 #########################################################################
1551
1552 # ARM relocations should all be R_ARM_RELATIVE (32-bit) or
1553 # R_AARCH64_RELATIVE (64-bit).
1554 checkarmreloc: u-boot
1555         @RELOC="`$(CROSS_COMPILE)readelf -r -W $< | cut -d ' ' -f 4 | \
1556                 grep R_A | sort -u`"; \
1557         if test "$$RELOC" != "R_ARM_RELATIVE" -a \
1558                  "$$RELOC" != "R_AARCH64_RELATIVE"; then \
1559                 echo "$< contains unexpected relocations: $$RELOC"; \
1560                 false; \
1561         fi
1562
1563 envtools: scripts_basic $(version_h) $(timestamp_h)
1564         $(Q)$(MAKE) $(build)=tools/env
1565
1566 tools-only: scripts_basic $(version_h) $(timestamp_h)
1567         $(Q)$(MAKE) $(build)=tools
1568
1569 tools-all: export HOST_TOOLS_ALL=y
1570 tools-all: envtools tools ;
1571
1572 cross_tools: export CROSS_BUILD_TOOLS=y
1573 cross_tools: tools ;
1574
1575 .PHONY : CHANGELOG
1576 CHANGELOG:
1577         git log --no-merges U-Boot-1_1_5.. | \
1578         unexpand -a | sed -e 's/\s\s*$$//' > $@
1579
1580 #########################################################################
1581
1582 ###
1583 # Cleaning is done on three levels.
1584 # make clean     Delete most generated files
1585 #                Leave enough to build external modules
1586 # make mrproper  Delete the current configuration, and all generated files
1587 # make distclean Remove editor backup files, patch leftover files and the like
1588
1589 # Directories & files removed with 'make clean'
1590 CLEAN_DIRS  += $(MODVERDIR) \
1591                $(foreach d, spl tpl, $(patsubst %,$d/%, \
1592                         $(filter-out include, $(shell ls -1 $d 2>/dev/null))))
1593
1594 CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h \
1595                boot* u-boot* MLO* SPL System.map fit-dtb.blob
1596
1597 # Directories & files removed with 'make mrproper'
1598 MRPROPER_DIRS  += include/config include/generated spl tpl \
1599                   .tmp_objdiff
1600 MRPROPER_FILES += .config .config.old include/autoconf.mk* include/config.h \
1601                   ctags etags tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS
1602
1603 # clean - Delete most, but leave enough to build external modules
1604 #
1605 clean: rm-dirs  := $(CLEAN_DIRS)
1606 clean: rm-files := $(CLEAN_FILES)
1607
1608 clean-dirs      := $(foreach f,$(u-boot-alldirs),$(if $(wildcard $(srctree)/$f/Makefile),$f))
1609
1610 clean-dirs      := $(addprefix _clean_, $(clean-dirs) doc/DocBook)
1611
1612 PHONY += $(clean-dirs) clean archclean
1613 $(clean-dirs):
1614         $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
1615
1616 # TODO: Do not use *.cfgtmp
1617 clean: $(clean-dirs)
1618         $(call cmd,rmdirs)
1619         $(call cmd,rmfiles)
1620         @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
1621                 \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
1622                 -o -name '*.ko.*' -o -name '*.su' -o -name '*.cfgtmp' \
1623                 -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
1624                 -o -name '*.lex.c' -o -name '*.tab.[ch]' \
1625                 -o -name '*.symtypes' -o -name 'modules.order' \
1626                 -o -name modules.builtin -o -name '.tmp_*.o.*' \
1627                 -o -name 'dsdt.aml' -o -name 'dsdt.asl.tmp' -o -name 'dsdt.c' \
1628                 -o -name '*.efi' -o -name '*.gcno' -o -name '*.so' \) \
1629                 -type f -print | xargs rm -f
1630
1631 # mrproper - Delete all generated files, including .config
1632 #
1633 mrproper: rm-dirs  := $(wildcard $(MRPROPER_DIRS))
1634 mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
1635 mrproper-dirs      := $(addprefix _mrproper_,scripts)
1636
1637 PHONY += $(mrproper-dirs) mrproper archmrproper
1638 $(mrproper-dirs):
1639         $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
1640
1641 mrproper: clean $(mrproper-dirs)
1642         $(call cmd,rmdirs)
1643         $(call cmd,rmfiles)
1644         @rm -f arch/*/include/asm/arch
1645
1646 # distclean
1647 #
1648 PHONY += distclean
1649
1650 distclean: mrproper
1651         @find $(srctree) $(RCS_FIND_IGNORE) \
1652                 \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
1653                 -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
1654                 -o -name '.*.rej' -o -name '*%' -o -name 'core' \
1655                 -o -name '*.pyc' \) \
1656                 -type f -print | xargs rm -f
1657         @rm -f boards.cfg
1658
1659 backup:
1660         F=`basename $(srctree)` ; cd .. ; \
1661         gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
1662
1663 help:
1664         @echo  'Cleaning targets:'
1665         @echo  '  clean           - Remove most generated files but keep the config'
1666         @echo  '  mrproper        - Remove all generated files + config + various backup files'
1667         @echo  '  distclean       - mrproper + remove editor backup and patch files'
1668         @echo  ''
1669         @echo  'Configuration targets:'
1670         @$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
1671         @echo  ''
1672         @echo  'Other generic targets:'
1673         @echo  '  all             - Build all necessary images depending on configuration'
1674         @echo  '  tests           - Build U-Boot for sandbox and run tests'
1675         @echo  '* u-boot          - Build the bare u-boot'
1676         @echo  '  dir/            - Build all files in dir and below'
1677         @echo  '  dir/file.[oisS] - Build specified target only'
1678         @echo  '  dir/file.lst    - Build specified mixed source/assembly target only'
1679         @echo  '                    (requires a recent binutils and recent build (System.map))'
1680         @echo  '  tags/ctags      - Generate ctags file for editors'
1681         @echo  '  etags           - Generate etags file for editors'
1682         @echo  '  cscope          - Generate cscope index'
1683         @echo  '  ubootrelease    - Output the release version string (use with make -s)'
1684         @echo  '  ubootversion    - Output the version stored in Makefile (use with make -s)'
1685         @echo  "  cfg             - Don't build, just create the .cfg files"
1686         @echo  "  envtools        - Build only the target-side environment tools"
1687         @echo  ''
1688         @echo  'Static analysers'
1689         @echo  '  checkstack      - Generate a list of stack hogs'
1690         @echo  '  coccicheck      - Execute static code analysis with Coccinelle'
1691         @echo  ''
1692         @echo  'Documentation targets:'
1693         @$(MAKE) -f $(srctree)/doc/DocBook/Makefile dochelp
1694         @echo  ''
1695         @echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
1696         @echo  '  make V=2   [targets] 2 => give reason for rebuild of target'
1697         @echo  '  make O=dir [targets] Locate all output files in "dir", including .config'
1698         @echo  '  make C=1   [targets] Check all c source with $$CHECK (sparse by default)'
1699         @echo  '  make C=2   [targets] Force check of all c source with $$CHECK'
1700         @echo  '  make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
1701         @echo  '  make W=n   [targets] Enable extra gcc checks, n=1,2,3 where'
1702         @echo  '                1: warnings which may be relevant and do not occur too often'
1703         @echo  '                2: warnings which occur quite often but may still be relevant'
1704         @echo  '                3: more obscure warnings, can most likely be ignored'
1705         @echo  '                Multiple levels can be combined with W=12 or W=123'
1706         @echo  ''
1707         @echo  'Execute "make" or "make all" to build all targets marked with [*] '
1708         @echo  'For further info see the ./README file'
1709
1710 tests:
1711         $(srctree)/test/run
1712
1713 # Documentation targets
1714 # ---------------------------------------------------------------------------
1715 %docs: scripts_basic FORCE
1716         $(Q)$(MAKE) $(build)=scripts build_docproc
1717         $(Q)$(MAKE) $(build)=doc/DocBook $@
1718
1719 endif #ifeq ($(config-targets),1)
1720 endif #ifeq ($(mixed-targets),1)
1721
1722 PHONY += checkstack ubootrelease ubootversion
1723
1724 checkstack:
1725         $(OBJDUMP) -d u-boot $$(find . -name u-boot-spl) | \
1726         $(PERL) $(src)/scripts/checkstack.pl $(ARCH)
1727
1728 ubootrelease:
1729         @echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
1730
1731 ubootversion:
1732         @echo $(UBOOTVERSION)
1733
1734 # Single targets
1735 # ---------------------------------------------------------------------------
1736 # Single targets are compatible with:
1737 # - build with mixed source and output
1738 # - build with separate output dir 'make O=...'
1739 # - external modules
1740 #
1741 #  target-dir => where to store outputfile
1742 #  build-dir  => directory in kernel source tree to use
1743
1744 ifeq ($(KBUILD_EXTMOD),)
1745         build-dir  = $(patsubst %/,%,$(dir $@))
1746         target-dir = $(dir $@)
1747 else
1748         zap-slash=$(filter-out .,$(patsubst %/,%,$(dir $@)))
1749         build-dir  = $(KBUILD_EXTMOD)$(if $(zap-slash),/$(zap-slash))
1750         target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))
1751 endif
1752
1753 %.s: %.c prepare scripts FORCE
1754         $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1755 %.i: %.c prepare scripts FORCE
1756         $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1757 %.o: %.c prepare scripts FORCE
1758         $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1759 %.lst: %.c prepare scripts FORCE
1760         $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1761 %.s: %.S prepare scripts FORCE
1762         $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1763 %.o: %.S prepare scripts FORCE
1764         $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1765 %.symtypes: %.c prepare scripts FORCE
1766         $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1767
1768 # Modules
1769 /: prepare scripts FORCE
1770         $(cmd_crmodverdir)
1771         $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1772         $(build)=$(build-dir)
1773 %/: prepare scripts FORCE
1774         $(cmd_crmodverdir)
1775         $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1776         $(build)=$(build-dir)
1777 %.ko: prepare scripts FORCE
1778         $(cmd_crmodverdir)
1779         $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1)   \
1780         $(build)=$(build-dir) $(@:.ko=.o)
1781         $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
1782
1783 # Consistency checks
1784 # ---------------------------------------------------------------------------
1785
1786 PHONY += coccicheck
1787
1788 coccicheck:
1789         $(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
1790
1791 # FIXME Should go into a make.lib or something
1792 # ===========================================================================
1793
1794 quiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN   $(wildcard $(rm-dirs)))
1795       cmd_rmdirs = rm -rf $(rm-dirs)
1796
1797 quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
1798       cmd_rmfiles = rm -f $(rm-files)
1799
1800 # read all saved command lines
1801
1802 targets := $(wildcard $(sort $(targets)))
1803 cmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
1804
1805 ifneq ($(cmd_files),)
1806   $(cmd_files): ;       # Do not try to update included dependency files
1807   include $(cmd_files)
1808 endif
1809
1810 endif   # skip-makefile
1811
1812 PHONY += FORCE
1813 FORCE:
1814
1815 # Declare the contents of the .PHONY variable as phony.  We keep that
1816 # information in a variable so we can use it in if_changed and friends.
1817 .PHONY: $(PHONY)