1 # SPDX-License-Identifier: GPL-2.0+
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.
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)
20 # Determine host architecture
21 include include/host_arch.h
22 MK_ARCH="${shell uname -m}"
24 ifeq ("x86_64", $(MK_ARCH))
25 export HOST_ARCH=$(HOST_ARCH_X86_64)
26 else ifneq (,$(findstring $(MK_ARCH), "i386" "i486" "i586" "i686"))
27 export HOST_ARCH=$(HOST_ARCH_X86)
28 else ifneq (,$(findstring $(MK_ARCH), "aarch64" "armv8l"))
29 export HOST_ARCH=$(HOST_ARCH_AARCH64)
30 else ifeq ("armv7l", $(MK_ARCH))
31 export HOST_ARCH=$(HOST_ARCH_ARM)
32 else ifeq ("riscv32", $(MK_ARCH))
33 export HOST_ARCH=$(HOST_ARCH_RISCV32)
34 else ifeq ("riscv64", $(MK_ARCH))
35 export HOST_ARCH=$(HOST_ARCH_RISCV64)
39 # Avoid funny character set dependencies
43 export LC_COLLATE LC_NUMERIC
45 # Avoid interference with shell env settings
48 # We are using a recursive build, so we need to do a little thinking
49 # to get the ordering right.
51 # Most importantly: sub-Makefiles should only ever modify files in
52 # their own directory. If in some directory we have a dependency on
53 # a file in another dir (which doesn't happen often, but it's often
54 # unavoidable when linking the built-in.o targets which finally
55 # turn into vmlinux), we will call a sub make in that other dir, and
56 # after that we are sure that everything which is in that other dir
59 # The only cases where we need to modify files which have global
60 # effects are thus separated out and done before the recursive
61 # descending is started. They are now explicitly listed as the
65 # ---------------------------------------------------------------------------
67 # Normally, we echo the whole command before executing it. By making
68 # that echo $($(quiet)$(cmd)), we now have the possibility to set
69 # $(quiet) to choose other forms of output instead, e.g.
71 # quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
72 # cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
74 # If $(quiet) is empty, the whole command will be printed.
75 # If it is set to "quiet_", only the short version will be printed.
76 # If it is set to "silent_", nothing will be printed at all, since
77 # the variable $(silent_cmd_cc_o_c) doesn't exist.
79 # A simple variant is to prefix commands with $(Q) - that's useful
80 # for commands that shall be hidden in non-verbose mode.
84 # If KBUILD_VERBOSE equals 0 then the above command will be hidden.
85 # If KBUILD_VERBOSE equals 1 then the above command is displayed.
87 # To put more focus on warnings, be less verbose as default
88 # Use 'make V=1' to see the full commands
90 ifeq ("$(origin V)", "command line")
97 ifeq ($(KBUILD_VERBOSE),1)
105 # If the user is running make -s (silent mode), suppress echoing of
108 ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4
109 ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
113 ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
118 export quiet Q KBUILD_VERBOSE
120 # kbuild supports saving output files in a separate directory.
121 # To locate output files in a separate directory two syntaxes are supported.
122 # In both cases the working directory must be the root of the kernel src.
124 # Use "make O=dir/to/store/output/files/"
126 # 2) Set KBUILD_OUTPUT
127 # Set the environment variable KBUILD_OUTPUT to point to the directory
128 # where the output files shall be placed.
129 # export KBUILD_OUTPUT=dir/to/store/output/files/
132 # The O= assignment takes precedence over the KBUILD_OUTPUT environment
135 # KBUILD_SRC is set on invocation of make in OBJ directory
136 # KBUILD_SRC is not intended to be used by the regular user (for now)
137 ifeq ($(KBUILD_SRC),)
139 # OK, Make called in directory where kernel src resides
140 # Do we want to locate output files in a separate directory?
141 ifeq ("$(origin O)", "command line")
142 KBUILD_OUTPUT := $(O)
145 # That's our default target when none is given on the command line
149 # Cancel implicit rules on top Makefile
150 $(CURDIR)/Makefile Makefile: ;
152 ifneq ($(KBUILD_OUTPUT),)
153 # Invoke a second make in the output directory, passing relevant variables
154 # check that the output directory actually exists
155 saved-output := $(KBUILD_OUTPUT)
156 KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \
158 $(if $(KBUILD_OUTPUT),, \
159 $(error failed to create output directory "$(saved-output)"))
161 PHONY += $(MAKECMDGOALS) sub-make
163 $(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
167 $(Q)$(MAKE) -C $(KBUILD_OUTPUT) KBUILD_SRC=$(CURDIR) \
168 -f $(CURDIR)/Makefile $(filter-out _all sub-make,$(MAKECMDGOALS))
170 # Leave processing to above invocation of make
172 endif # ifneq ($(KBUILD_OUTPUT),)
173 endif # ifeq ($(KBUILD_SRC),)
175 # We process the rest of the Makefile if this is the final invocation of make
176 ifeq ($(skip-makefile),)
178 # Do not print "Entering directory ...",
179 # but we want to display it when entering to the output directory
180 # so that IDEs/editors are able to understand relative filenames.
181 MAKEFLAGS += --no-print-directory
183 # Call a source code checker (by default, "sparse") as part of the
186 # Use 'make C=1' to enable checking of only re-compiled files.
187 # Use 'make C=2' to enable checking of *all* source files, regardless
188 # of whether they are re-compiled or not.
190 # See the file "doc/sparse.txt" for more details, including
191 # where to get the "sparse" utility.
193 ifeq ("$(origin C)", "command line")
194 KBUILD_CHECKSRC = $(C)
196 ifndef KBUILD_CHECKSRC
200 # Use make M=dir to specify directory of external module to build
201 # Old syntax make ... SUBDIRS=$PWD is still supported
202 # Setting the environment variable KBUILD_EXTMOD take precedence
204 KBUILD_EXTMOD ?= $(SUBDIRS)
207 ifeq ("$(origin M)", "command line")
208 KBUILD_EXTMOD := $(M)
211 # If building an external module we do not care about the all: rule
212 # but instead _all depend on modules
214 ifeq ($(KBUILD_EXTMOD),)
220 ifeq ($(KBUILD_SRC),)
221 # building in the source tree
224 ifeq ($(KBUILD_SRC)/,$(dir $(CURDIR)))
225 # building in a subdirectory of the source tree
228 srctree := $(KBUILD_SRC)
235 VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
237 export srctree objtree VPATH
239 # Make sure CDPATH settings don't interfere
242 #########################################################################
244 HOSTARCH := $(shell uname -m | \
246 -e s/sun4u/sparc64/ \
249 -e s/ppc64/powerpc/ \
251 -e s/macppc/powerpc/\
254 HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
255 sed -e 's/\(cygwin\).*/cygwin/')
257 export HOSTARCH HOSTOS
259 #########################################################################
261 # set default to nothing for native builds
262 ifeq ($(HOSTARCH),$(ARCH))
266 KCONFIG_CONFIG ?= .config
267 export KCONFIG_CONFIG
269 # SHELL used by kbuild
270 CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
271 else if [ -x /bin/bash ]; then echo /bin/bash; \
272 else echo sh; fi ; fi)
276 HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
277 $(if $(CONFIG_TOOLS_DEBUG),-g)
280 # With the move to GCC 6, we have implicitly upgraded our language
281 # standard to GNU11 (see https://gcc.gnu.org/gcc-5/porting_to.html).
282 # Some Linux distributions (including RHEL7, SLES13, Debian 8) still
283 # have older compilers as their default, so we make it explicit for
284 # these that our host tools are GNU11 (i.e. C11 w/ GNU extensions).
285 CSTD_FLAG := -std=gnu11
286 ifeq ($(HOSTOS),linux)
287 HOSTCFLAGS += $(CSTD_FLAG)
290 ifeq ($(HOSTOS),cygwin)
294 # Mac OS X / Darwin's C preprocessor is Apple specific. It
295 # generates numerous errors and warnings. We want to bypass it
296 # and use GNU C's cpp. To do this we pass the -traditional-cpp
297 # option to the compiler. Note that the -traditional-cpp flag
298 # DOES NOT have the same semantics as GNU C's flag, all it does
299 # is invoke the GNU preprocessor in stock ANSI/ISO C fashion.
301 # Apple's linker is similar, thanks to the new 2 stage linking
302 # multiple symbol definitions are treated as errors, hence the
303 # -multiply_defined suppress option to turn off this error.
305 ifeq ($(HOSTOS),darwin)
306 # get major and minor product version (e.g. '10' and '6' for Snow Leopard)
307 DARWIN_MAJOR_VERSION = $(shell sw_vers -productVersion | cut -f 1 -d '.')
308 DARWIN_MINOR_VERSION = $(shell sw_vers -productVersion | cut -f 2 -d '.')
310 os_x_before = $(shell if [ $(DARWIN_MAJOR_VERSION) -le $(1) -a \
311 $(DARWIN_MINOR_VERSION) -le $(2) ] ; then echo "$(3)"; else echo "$(4)"; fi ;)
313 os_x_after = $(shell if [ $(DARWIN_MAJOR_VERSION) -ge $(1) -a \
314 $(DARWIN_MINOR_VERSION) -ge $(2) ] ; then echo "$(3)"; else echo "$(4)"; fi ;)
316 # Snow Leopards build environment has no longer restrictions as described above
317 HOSTCC = $(call os_x_before, 10, 5, "cc", "gcc")
318 HOSTCFLAGS += $(call os_x_before, 10, 4, "-traditional-cpp")
319 HOSTLDFLAGS += $(call os_x_before, 10, 5, "-multiply_defined suppress")
321 # since Lion (10.7) ASLR is on by default, but we use linker generated lists
322 # in some host tools which is a problem then ... so disable ASLR for these
324 HOSTLDFLAGS += $(call os_x_before, 10, 7, "", "-Xlinker -no_pie")
326 # macOS Mojave (10.14.X)
327 # Undefined symbols for architecture x86_64: "_PyArg_ParseTuple"
328 HOSTLDFLAGS += $(call os_x_after, 10, 14, "-lpython -dynamclib", "")
331 # Decide whether to build built-in, modular, or both.
332 # Normally, just do built-in.
337 # If we have only "make modules", don't compile built-in objects.
338 # When we're building modules with modversions, we need to consider
339 # the built-in objects during the descend as well, in order to
340 # make sure the checksums are up to date before we record them.
342 ifeq ($(MAKECMDGOALS),modules)
343 KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
346 # If we have "make <whatever> modules", compile modules
347 # in addition to whatever we do anyway.
348 # Just "make" or "make all" shall build modules as well
350 # U-Boot does not need modules
351 #ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
352 # KBUILD_MODULES := 1
355 #ifeq ($(MAKECMDGOALS),)
356 # KBUILD_MODULES := 1
359 # Check ths size of a binary:
362 # #2: Size limit in bytes (decimal or 0xhex)
364 actual=$$( wc -c $1 | awk '{print $$1}'); \
365 limit=$$( printf "%d" $2 ); \
366 if test $$actual -gt $$limit; then \
367 echo "$1 exceeds file size limit:" >&2; \
368 echo " limit: $$(printf %#x $$limit) bytes" >&2; \
369 echo " actual: $$(printf %#x $$actual) bytes" >&2; \
370 echo " excess: $$(printf %#x $$((actual - limit))) bytes" >&2;\
376 export KBUILD_MODULES KBUILD_BUILTIN
377 export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
379 # We need some generic definitions (do not try to remake the file).
380 scripts/Kbuild.include: ;
381 include scripts/Kbuild.include
383 # Make variables (CC, etc...)
385 AS = $(CROSS_COMPILE)as
387 ifneq ($(shell $(CROSS_COMPILE)ld.bfd -v 2> /dev/null),)
388 LD = $(CROSS_COMPILE)ld.bfd
390 LD = $(CROSS_COMPILE)ld
392 CC = $(CROSS_COMPILE)gcc
394 AR = $(CROSS_COMPILE)ar
395 NM = $(CROSS_COMPILE)nm
396 LDR = $(CROSS_COMPILE)ldr
397 STRIP = $(CROSS_COMPILE)strip
398 OBJCOPY = $(CROSS_COMPILE)objcopy
399 OBJDUMP = $(CROSS_COMPILE)objdump
407 DTC ?= $(objtree)/scripts/dtc/dtc
410 CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
411 -Wbitwise -Wno-return-void -D__CHECK_ENDIAN__ $(CF)
413 KBUILD_CPPFLAGS := -D__KERNEL__ -D__UBOOT__
415 KBUILD_CFLAGS := -Wall -Wstrict-prototypes \
416 -Wno-format-security \
417 -fno-builtin -ffreestanding $(CSTD_FLAG)
418 KBUILD_CFLAGS += -fshort-wchar -fno-strict-aliasing
419 KBUILD_AFLAGS := -D__ASSEMBLY__
421 # Don't generate position independent code
422 KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
423 KBUILD_AFLAGS += $(call cc-option,-fno-PIE)
425 # Read UBOOTRELEASE from include/config/uboot.release (if it exists)
426 UBOOTRELEASE = $(shell cat include/config/uboot.release 2> /dev/null)
427 UBOOTVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
429 export VERSION PATCHLEVEL SUBLEVEL UBOOTRELEASE UBOOTVERSION
430 export ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIR
431 export CONFIG_SHELL HOSTCC HOSTCFLAGS HOSTLDFLAGS CROSS_COMPILE AS LD CC
432 export CPP AR NM LDR STRIP OBJCOPY OBJDUMP
433 export MAKE LEX YACC AWK PERL PYTHON PYTHON2 PYTHON3
434 export HOSTCXX HOSTCXXFLAGS CHECK CHECKFLAGS DTC DTC_FLAGS
436 export KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE OBJCOPYFLAGS LDFLAGS
437 export KBUILD_CFLAGS KBUILD_AFLAGS
439 export CC_VERSION_TEXT := $(shell $(CC) --version | head -n 1)
441 # When compiling out-of-tree modules, put MODVERDIR in the module
442 # tree rather than in the kernel tree. The kernel tree might
444 export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions
446 # Files to ignore in find ... statements
448 export RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o \
449 -name CVS -o -name .pc -o -name .hg -o -name .git \) \
451 export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
452 --exclude CVS --exclude .pc --exclude .hg --exclude .git
454 # ===========================================================================
455 # Rules shared between *config targets and build targets
457 # Basic helpers built in scripts/
458 PHONY += scripts_basic
460 $(Q)$(MAKE) $(build)=scripts/basic
461 $(Q)rm -f .tmp_quiet_recordmcount
463 # To avoid any implicit rule to kick in, define an empty command.
464 scripts/basic/%: scripts_basic ;
466 PHONY += outputmakefile
467 # outputmakefile generates a Makefile in the output directory, if using a
468 # separate output directory. This allows convenient use of make in the
471 ifneq ($(KBUILD_SRC),)
472 $(Q)ln -fsn $(srctree) source
473 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
474 $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
477 # To make sure we do not include .config for any of the *config targets
478 # catch them early, and hand them over to scripts/kconfig/Makefile
479 # It is allowed to specify more targets when calling make, including
480 # mixing *config targets and build targets.
481 # For example 'make oldconfig all'.
482 # Detect when mixed targets is specified, and make a second invocation
483 # of make so .config is not included in this case either (for *config).
485 version_h := include/generated/version_autogenerated.h
486 timestamp_h := include/generated/timestamp_autogenerated.h
487 defaultenv_h := include/generated/defaultenv_autogenerated.h
489 no-dot-config-targets := clean clobber mrproper distclean \
490 help %docs check% coccicheck \
491 ubootversion backup tests check qcheck
497 ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
498 ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
503 ifeq ($(KBUILD_EXTMOD),)
504 ifneq ($(filter config %config,$(MAKECMDGOALS)),)
506 ifneq ($(words $(MAKECMDGOALS)),1)
512 ifeq ($(mixed-targets),1)
513 # ===========================================================================
514 # We're called with mixed targets (*config and build targets).
515 # Handle them one by one.
517 PHONY += $(MAKECMDGOALS) __build_one_by_one
519 $(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one
524 for i in $(MAKECMDGOALS); do \
525 $(MAKE) -f $(srctree)/Makefile $$i; \
529 ifeq ($(config-targets),1)
530 # ===========================================================================
531 # *config targets only - make sure prerequisites are updated, and descend
532 # in scripts/kconfig to make the *config target
534 KBUILD_DEFCONFIG := sandbox_defconfig
535 export KBUILD_DEFCONFIG KBUILD_KCONFIG
537 config: scripts_basic outputmakefile FORCE
538 $(Q)$(MAKE) $(build)=scripts/kconfig $@
540 %config: scripts_basic outputmakefile FORCE
541 $(Q)$(MAKE) $(build)=scripts/kconfig $@
544 # ===========================================================================
545 # Build targets only - this includes vmlinux, arch specific targets, clean
546 # targets and others. In general all targets except *config targets.
548 # Additional helpers built in scripts/
549 # Carefully list dependencies so we do not try to build scripts twice
552 scripts: scripts_basic include/config/auto.conf
553 $(Q)$(MAKE) $(build)=$(@)
555 ifeq ($(dot-config),1)
557 -include include/config/auto.conf
559 # Read in dependencies to all Kconfig* files, make sure to run
560 # oldconfig if changes are detected.
561 -include include/config/auto.conf.cmd
563 # To avoid any implicit rule to kick in, define an empty command
564 $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
566 # If .config is newer than include/config/auto.conf, someone tinkered
567 # with it and forgot to run make oldconfig.
568 # if auto.conf.cmd is missing then we are probably in a cleaned tree so
569 # we execute the config step to be sure to catch updated Kconfig files
570 include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
571 $(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
572 @# If the following part fails, include/config/auto.conf should be
573 @# deleted so "make silentoldconfig" will be re-run on the next build.
574 $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf || \
575 { rm -f include/config/auto.conf; false; }
576 @# include/config.h has been updated after "make silentoldconfig".
577 @# We need to touch include/config/auto.conf so it gets newer
578 @# than include/config.h.
579 @# Otherwise, 'make silentoldconfig' would be invoked twice.
580 $(Q)touch include/config/auto.conf
582 u-boot.cfg spl/u-boot.cfg tpl/u-boot.cfg:
583 $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf $(@)
585 -include include/autoconf.mk
586 -include include/autoconf.mk.dep
588 # We want to include arch/$(ARCH)/config.mk only when include/config/auto.conf
589 # is up-to-date. When we switch to a different board configuration, old CONFIG
590 # macros are still remaining in include/config/auto.conf. Without the following
591 # gimmick, wrong config.mk would be included leading nasty warnings/errors.
592 ifneq ($(wildcard $(KCONFIG_CONFIG)),)
593 ifneq ($(wildcard include/config/auto.conf),)
594 autoconf_is_old := $(shell find . -path ./$(KCONFIG_CONFIG) -newer \
595 include/config/auto.conf)
596 ifeq ($(autoconf_is_old),)
598 include arch/$(ARCH)/Makefile
603 # These are set by the arch-specific config.mk. Make sure they are exported
604 # so they can be used when building an EFI application.
605 export EFI_LDS # Filename of EFI link script in arch/$(ARCH)/lib
606 export EFI_CRT0 # Filename of EFI CRT0 in arch/$(ARCH)/lib
607 export EFI_RELOC # Filename of EFU relocation code in arch/$(ARCH)/lib
608 export CFLAGS_EFI # Compiler flags to add when building EFI app
609 export CFLAGS_NON_EFI # Compiler flags to remove when building EFI app
610 export EFI_TARGET # binutils target if EFI is natively supported
612 # If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use
613 # that (or fail if absent). Otherwise, search for a linker script in a
617 #LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot.lds.debug
618 ifdef CONFIG_SYS_LDSCRIPT
619 # need to strip off double quotes
620 LDSCRIPT := $(srctree)/$(CONFIG_SYS_LDSCRIPT:"%"=%)
624 # If there is no specified link script, we look in a number of places for it
626 ifeq ($(wildcard $(LDSCRIPT)),)
627 LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot.lds
629 ifeq ($(wildcard $(LDSCRIPT)),)
630 LDSCRIPT := $(srctree)/$(CPUDIR)/u-boot.lds
632 ifeq ($(wildcard $(LDSCRIPT)),)
633 LDSCRIPT := $(srctree)/arch/$(ARCH)/cpu/u-boot.lds
638 # Dummy target needed, because used as prerequisite
639 include/config/auto.conf: ;
640 endif # $(dot-config)
643 # Xtensa linker script cannot be preprocessed with -ansi because of
644 # preprocessor operations on strings that don't make C identifiers.
646 ifeq ($(CONFIG_XTENSA),)
650 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
656 KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
657 KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks)
659 # change __FILE__ to the relative path from the srctree
660 KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
663 # $(KBUILD_AFLAGS) sets -g, which causes gcc to pass a suitable -g<format>
664 # option to the assembler.
667 # Report stack usage if supported
668 # ARC tools based on GCC 7.1 has an issue with stack usage
669 # with naked functions, see commit message for more details
671 ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-stack-usage.sh $(CC)),y)
672 KBUILD_CFLAGS += -fstack-usage
676 KBUILD_CFLAGS += $(call cc-option,-Wno-format-nonliteral)
677 KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
679 ifeq ($(cc-name),clang)
680 KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
681 KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
682 KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
683 KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
686 # turn jbsr into jsr for m68k
688 ifeq ($(findstring 3.4,$(shell $(CC) --version)),3.4)
689 KBUILD_AFLAGS += -Wa,-gstabs,-S
693 # Prohibit date/time macros, which would make the build non-deterministic
694 KBUILD_CFLAGS += $(call cc-option,-Werror=date-time)
696 include scripts/Makefile.extrawarn
698 # Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
699 KBUILD_CPPFLAGS += $(KCPPFLAGS)
700 KBUILD_AFLAGS += $(KAFLAGS)
701 KBUILD_CFLAGS += $(KCFLAGS)
703 # Use UBOOTINCLUDE when you must reference the include/ directory.
704 # Needed to be compatible with the O= option
707 $(if $(KBUILD_SRC), -I$(srctree)/include) \
708 $(if $(CONFIG_$(SPL_)SYS_THUMB_BUILD), \
709 $(if $(CONFIG_HAS_THUMB2),, \
710 -I$(srctree)/arch/$(ARCH)/thumb1/include),) \
711 -I$(srctree)/arch/$(ARCH)/include \
712 -include $(srctree)/include/linux/kconfig.h
714 NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
717 cpp_flags := $(KBUILD_CPPFLAGS) $(PLATFORM_CPPFLAGS) $(UBOOTINCLUDE) \
719 c_flags := $(KBUILD_CFLAGS) $(cpp_flags)
721 #########################################################################
722 # U-Boot objects....order is important (i.e. start must be first)
724 HAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(srctree)/board/$(VENDOR)/common/Makefile),y,n)
727 libs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
728 libs-$(CONFIG_OF_EMBED) += dts/
733 libs-y += drivers/dma/
734 libs-y += drivers/gpio/
735 libs-y += drivers/i2c/
736 libs-y += drivers/net/
737 libs-y += drivers/net/phy/
738 libs-y += drivers/power/ \
739 drivers/power/domain/ \
740 drivers/power/fuel_gauge/ \
742 drivers/power/pmic/ \
743 drivers/power/battery/ \
744 drivers/power/regulator/
745 libs-y += drivers/spi/
746 libs-$(CONFIG_FMAN_ENET) += drivers/net/fm/
747 libs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
748 libs-$(CONFIG_SYS_FSL_MMDC) += drivers/ddr/fsl/
749 libs-$(CONFIG_$(SPL_)ALTERA_SDRAM) += drivers/ddr/altera/
750 libs-y += drivers/serial/
751 libs-y += drivers/usb/cdns3/
752 libs-y += drivers/usb/dwc3/
753 libs-y += drivers/usb/common/
754 libs-y += drivers/usb/emul/
755 libs-y += drivers/usb/eth/
756 libs-$(CONFIG_USB_GADGET) += drivers/usb/gadget/
757 libs-$(CONFIG_USB_GADGET) += drivers/usb/gadget/udc/
758 libs-y += drivers/usb/host/
759 libs-y += drivers/usb/musb/
760 libs-y += drivers/usb/musb-new/
761 libs-y += drivers/usb/phy/
762 libs-y += drivers/usb/ulpi/
766 libs-$(CONFIG_API) += api/
770 libs-$(CONFIG_UNIT_TEST) += test/ test/dm/
771 libs-$(CONFIG_UT_ENV) += test/env/
772 libs-$(CONFIG_UT_OPTEE) += test/optee/
773 libs-$(CONFIG_UT_OVERLAY) += test/overlay/
775 libs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/)
777 libs-y := $(sort $(libs-y))
779 u-boot-dirs := $(patsubst %/,%,$(filter %/, $(libs-y))) tools examples
781 u-boot-alldirs := $(sort $(u-boot-dirs) $(patsubst %/,%,$(filter %/, $(libs-))))
783 libs-y := $(patsubst %/, %/built-in.o, $(libs-y))
785 u-boot-init := $(head-y)
786 u-boot-main := $(libs-y)
790 ifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y)
791 PLATFORM_LIBGCC = arch/$(ARCH)/lib/lib.a
793 PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(c_flags) -print-libgcc-file-name`) -lgcc
795 PLATFORM_LIBS += $(PLATFORM_LIBGCC)
797 ifdef CONFIG_CC_COVERAGE
798 KBUILD_CFLAGS += --coverage
799 PLATFORM_LIBGCC += -lgcov
803 export PLATFORM_LIBGCC
805 # Special flags for CPP when processing the linker script.
806 # Pass the version down so we can handle backwards compatibility
809 -include $(srctree)/include/u-boot/u-boot.lds.h \
811 $(shell $(LD) --version | \
812 sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p')
814 #########################################################################
815 #########################################################################
817 ifneq ($(CONFIG_BOARD_SIZE_LIMIT),)
818 BOARD_SIZE_CHECK= @ $(call size_check,$@,$(CONFIG_BOARD_SIZE_LIMIT))
823 ifneq ($(CONFIG_SPL_SIZE_LIMIT),0)
824 SPL_SIZE_CHECK = @$(call size_check,$@,$$(tools/spl_size_limit))
829 ifneq ($(CONFIG_TPL_SIZE_LIMIT),0)
830 TPL_SIZE_CHECK = @$(call size_check,$@,$(CONFIG_TPL_SIZE_LIMIT))
835 # Statically apply RELA-style relocations (currently arm64 only)
836 # This is useful for arm64 where static relocation needs to be performed on
837 # the raw binary, but certain simulators only accept an ELF file (but don't
838 # do the relocation).
839 ifneq ($(CONFIG_STATIC_RELA),)
840 # $(1) is u-boot ELF, $(2) is u-boot bin, $(3) is text base
842 start=$$($(NM) $(1) | grep __rel_dyn_start | cut -f 1 -d ' '); \
843 end=$$($(NM) $(1) | grep __rel_dyn_end | cut -f 1 -d ' '); \
844 tools/relocate-rela $(2) $(3) $$start $$end
849 # Always append ALL so that arch config.mk's can add custom ones
850 ALL-y += u-boot.srec u-boot.bin u-boot.sym System.map binary_size_check
852 ALL-$(CONFIG_ONENAND_U_BOOT) += u-boot-onenand.bin
853 ifeq ($(CONFIG_SPL_FSL_PBL),y)
854 ALL-$(CONFIG_RAMBOOT_PBL) += u-boot-with-spl-pbl.bin
856 ifneq ($(CONFIG_SECURE_BOOT), y)
857 # For Secure Boot The Image needs to be signed and Header must also
858 # be included. So The image has to be built explicitly
859 ALL-$(CONFIG_RAMBOOT_PBL) += u-boot.pbl
862 ALL-$(CONFIG_SPL) += spl/u-boot-spl.bin
863 ifeq ($(CONFIG_MX6)$(CONFIG_IMX_HAB), yy)
864 ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
866 ifeq ($(CONFIG_MX7)$(CONFIG_IMX_HAB), yy)
867 ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
869 ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot.img
872 ALL-$(CONFIG_TPL) += tpl/u-boot-tpl.bin
873 ALL-$(CONFIG_OF_SEPARATE) += u-boot.dtb
874 ifeq ($(CONFIG_SPL_FRAMEWORK),y)
875 ALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb.img
877 ALL-$(CONFIG_OF_HOSTFILE) += u-boot.dtb
878 ifneq ($(CONFIG_SPL_TARGET),)
879 ALL-$(CONFIG_SPL) += $(CONFIG_SPL_TARGET:"%"=%)
881 ALL-$(CONFIG_REMAKE_ELF) += u-boot.elf
882 ALL-$(CONFIG_EFI_APP) += u-boot-app.efi
883 ALL-$(CONFIG_EFI_STUB) += u-boot-payload.efi
885 ifneq ($(BUILD_ROM)$(CONFIG_BUILD_ROM),)
886 ALL-$(CONFIG_X86_RESET_VECTOR) += u-boot.rom
889 # Build a combined spl + u-boot image for sunxi
890 ifeq ($(CONFIG_ARCH_SUNXI)$(CONFIG_SPL),yy)
891 ALL-y += u-boot-sunxi-with-spl.bin
894 # enable combined SPL/u-boot/dtb rules for tegra
895 ifeq ($(CONFIG_TEGRA)$(CONFIG_SPL),yy)
896 ALL-y += u-boot-tegra.bin u-boot-nodtb-tegra.bin
897 ALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb-tegra.bin
900 ALL-$(CONFIG_ARCH_MEDIATEK) += u-boot-mtk.bin
902 # Add optional build target if defined in board/cpu/soc headers
903 ifneq ($(CONFIG_BUILD_TARGET),)
904 ALL-y += $(CONFIG_BUILD_TARGET:"%"=%)
907 ifdef CONFIG_INIT_SP_RELATIVE
908 ALL-y += init_sp_bss_offset_check
911 ifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
912 ALL-y += u-boot-with-dtb.bin
915 ifeq ($(CONFIG_ARCH_ROCKCHIP)$(CONFIG_SPL),yy)
916 ALL-y += u-boot-rockchip.bin
919 LDFLAGS_u-boot += $(LDFLAGS_FINAL)
921 # Avoid 'Not enough room for program headers' error on binutils 2.28 onwards.
922 LDFLAGS_u-boot += $(call ld-option, --no-dynamic-linker)
924 ifeq ($(CONFIG_ARC)$(CONFIG_NIOS2)$(CONFIG_X86)$(CONFIG_XTENSA),)
925 LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
928 # insure the checker run with the right endianness
929 CHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)
931 # the checker needs the correct machine size
932 CHECKFLAGS += $(if $(CONFIG_64BIT),-m64,-m32)
934 # Normally we fill empty space with 0xff
935 quiet_cmd_objcopy = OBJCOPY $@
936 cmd_objcopy = $(OBJCOPY) --gap-fill=0xff $(OBJCOPYFLAGS) \
937 $(OBJCOPYFLAGS_$(@F)) $< $@
939 # Provide a version which does not do this, for use by EFI
940 quiet_cmd_zobjcopy = OBJCOPY $@
941 cmd_zobjcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
943 quiet_cmd_efipayload = OBJCOPY $@
944 cmd_efipayload = $(OBJCOPY) -I binary -O $(EFIPAYLOAD_BFDTARGET) -B $(EFIPAYLOAD_BFDARCH) $< $@
946 MKIMAGEOUTPUT ?= /dev/null
948 quiet_cmd_mkimage = MKIMAGE $@
949 cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
950 >$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
952 quiet_cmd_mkfitimage = MKIMAGE $@
953 cmd_mkfitimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -f $(U_BOOT_ITS) -p $(CONFIG_FIT_EXTERNAL_OFFSET) $@\
954 >$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
956 quiet_cmd_cat = CAT $@
957 cmd_cat = cat $(filter-out $(PHONY), $^) > $@
959 append = cat $(filter-out $< $(PHONY), $^) >> $@
961 quiet_cmd_pad_cat = CAT $@
962 cmd_pad_cat = $(cmd_objcopy) && $(append) || rm -f $@
966 quiet_cmd_cfgcheck = CFGCHK $2
967 cmd_cfgcheck = $(srctree)/scripts/check-config.sh $2 \
968 $(srctree)/scripts/config_whitelist.txt $(srctree)
971 ifeq ($(CONFIG_DEPRECATED),y)
972 $(warning "You have deprecated configuration options enabled in your .config! Please check your configuration.")
973 ifeq ($(CONFIG_SPI),y)
974 ifneq ($(CONFIG_DM_SPI)$(CONFIG_OF_CONTROL),yy)
975 $(warning "The relevant config item with associated code will remove in v2019.07 release.")
979 ifneq ($(CONFIG_DM),y)
980 @echo >&2 "===================== WARNING ======================"
981 @echo >&2 "This board does not use CONFIG_DM. CONFIG_DM will be"
982 @echo >&2 "compulsory starting with the v2020.01 release."
983 @echo >&2 "Failure to update may result in board removal."
984 @echo >&2 "See doc/driver-model/migration.rst for more info."
985 @echo >&2 "===================================================="
987 ifeq ($(CONFIG_MMC),y)
988 ifneq ($(CONFIG_DM_MMC)$(CONFIG_OF_CONTROL)$(CONFIG_BLK),yyy)
989 @echo >&2 "===================== WARNING ======================"
990 @echo >&2 "This board does not use CONFIG_DM_MMC. Please update"
991 @echo >&2 "the board to use CONFIG_DM_MMC before the v2019.04 release."
992 @echo >&2 "Failure to update by the deadline may result in board removal."
993 @echo >&2 "See doc/driver-model/migration.rst for more info."
994 @echo >&2 "===================================================="
997 ifeq ($(CONFIG_USB),y)
998 ifneq ($(CONFIG_DM_USB)$(CONFIG_OF_CONTROL)$(CONFIG_BLK),yyy)
999 @echo >&2 "===================== WARNING ======================"
1000 @echo >&2 "This board does not use CONFIG_DM_USB. Please update"
1001 @echo >&2 "the board to use CONFIG_DM_USB before the v2019.07 release."
1002 @echo >&2 "Failure to update by the deadline may result in board removal."
1003 @echo >&2 "See doc/driver-model/migration.rst for more info."
1004 @echo >&2 "===================================================="
1007 ifeq ($(CONFIG_MVSATA_IDE),y)
1008 @echo >&2 "===================== WARNING ======================"
1009 @echo >&2 "This board does use CONFIG_MVSATA_IDE which is not"
1010 @echo >&2 "ported to driver-model (DM) yet. Please update the storage"
1011 @echo >&2 "controller driver to use CONFIG_AHCI before the v2019.07"
1012 @echo >&2 "release."
1013 @echo >&2 "Failure to update by the deadline may result in board removal."
1014 @echo >&2 "See doc/driver-model/migration.rst for more info."
1015 @echo >&2 "===================================================="
1017 ifeq ($(CONFIG_LIBATA),y)
1018 ifneq ($(CONFIG_AHCI),y)
1019 @echo >&2 "===================== WARNING ======================"
1020 @echo >&2 "This board does use CONFIG_LIBATA but has CONFIG_AHCI not"
1021 @echo >&2 "enabled. Please update the storage controller driver to use"
1022 @echo >&2 "CONFIG_AHCI before the v2019.07 release."
1023 @echo >&2 "Failure to update by the deadline may result in board removal."
1024 @echo >&2 "See doc/driver-model/migration.rst for more info."
1025 @echo >&2 "===================================================="
1028 ifeq ($(CONFIG_PCI),y)
1029 ifneq ($(CONFIG_DM_PCI),y)
1030 @echo >&2 "===================== WARNING ======================"
1031 @echo >&2 "This board does not use CONFIG_DM_PCI Please update"
1032 @echo >&2 "the board to use CONFIG_DM_PCI before the v2019.07 release."
1033 @echo >&2 "Failure to update by the deadline may result in board removal."
1034 @echo >&2 "See doc/driver-model/migration.rst for more info."
1035 @echo >&2 "===================================================="
1038 ifneq ($(CONFIG_LCD)$(CONFIG_VIDEO),)
1039 ifneq ($(CONFIG_DM_VIDEO),y)
1040 @echo >&2 "===================== WARNING ======================"
1041 @echo >&2 "This board does not use CONFIG_DM_VIDEO Please update"
1042 @echo >&2 "the board to use CONFIG_DM_VIDEO before the v2019.07 release."
1043 @echo >&2 "Failure to update by the deadline may result in board removal."
1044 @echo >&2 "See doc/driver-model/migration.rst for more info."
1045 @echo >&2 "===================================================="
1048 ifeq ($(CONFIG_OF_EMBED),y)
1049 @echo >&2 "===================== WARNING ======================"
1050 @echo >&2 "CONFIG_OF_EMBED is enabled. This option should only"
1051 @echo >&2 "be used for debugging purposes. Please use"
1052 @echo >&2 "CONFIG_OF_SEPARATE for boards in mainline."
1053 @echo >&2 "See doc/README.fdt-control for more info."
1054 @echo >&2 "===================================================="
1056 ifeq ($(CONFIG_SPI_FLASH),y)
1057 ifneq ($(CONFIG_DM_SPI_FLASH)$(CONFIG_OF_CONTROL),yy)
1058 @echo >&2 "===================== WARNING ======================"
1059 @echo >&2 "This board does not use CONFIG_DM_SPI_FLASH. Please update"
1060 @echo >&2 "the board to use CONFIG_SPI_FLASH before the v2019.07 release."
1061 @echo >&2 "Failure to update by the deadline may result in board removal."
1062 @echo >&2 "See doc/driver-model/migration.rst for more info."
1063 @echo >&2 "===================================================="
1066 ifneq ($(CONFIG_WATCHDOG)$(CONFIG_HW_WATCHDOG),)
1067 ifneq ($(CONFIG_WDT),y)
1068 @echo >&2 "===================== WARNING ======================"
1069 @echo >&2 "This board does not use CONFIG_WDT (DM watchdog support)."
1070 @echo >&2 "Please update the board to use CONFIG_WDT before the"
1071 @echo >&2 "v2019.10 release."
1072 @echo >&2 "Failure to update by the deadline may result in board removal."
1073 @echo >&2 "See doc/driver-model/migration.rst for more info."
1074 @echo >&2 "===================================================="
1077 ifneq ($(CONFIG_NET),)
1078 ifneq ($(CONFIG_DM_ETH),y)
1079 @echo >&2 "===================== WARNING ======================"
1080 @echo >&2 "This board does not use CONFIG_DM_ETH (Driver Model"
1081 @echo >&2 "for Ethernet drivers). Please update the board to use"
1082 @echo >&2 "CONFIG_DM_ETH before the v2020.07 release. Failure to"
1083 @echo >&2 "update by the deadline may result in board removal."
1084 @echo >&2 "See doc/driver-model/migration.rst for more info."
1085 @echo >&2 "===================================================="
1088 @# Check that this build does not use CONFIG options that we do not
1089 @# know about unless they are in Kconfig. All the existing CONFIG
1090 @# options are whitelisted, so new ones should not be added.
1091 $(call cmd,cfgcheck,u-boot.cfg)
1097 $(Q)$(MAKE) $(build)=dts dtbs
1099 quiet_cmd_copy = COPY $@
1102 ifeq ($(CONFIG_MULTI_DTB_FIT),y)
1104 ifeq ($(CONFIG_MULTI_DTB_FIT_LZO),y)
1105 FINAL_DTB_CONTAINER = fit-dtb.blob.lzo
1106 else ifeq ($(CONFIG_MULTI_DTB_FIT_GZIP),y)
1107 FINAL_DTB_CONTAINER = fit-dtb.blob.gz
1109 FINAL_DTB_CONTAINER = fit-dtb.blob
1112 fit-dtb.blob.gz: fit-dtb.blob
1115 fit-dtb.blob.lzo: fit-dtb.blob
1118 fit-dtb.blob: dts/dt.dtb FORCE
1119 $(call if_changed,mkimage)
1120 ifneq ($(SOURCE_DATE_EPOCH),)
1121 touch -d @$(SOURCE_DATE_EPOCH) fit-dtb.blob
1122 chmod 0600 fit-dtb.blob
1125 MKIMAGEFLAGS_fit-dtb.blob = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
1127 $(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) -d /dev/null
1130 u-boot-fit-dtb.bin: u-boot-nodtb.bin $(EXT_DTB)
1131 $(call if_changed,cat)
1133 u-boot-fit-dtb.bin: u-boot-nodtb.bin $(FINAL_DTB_CONTAINER)
1134 $(call if_changed,cat)
1137 u-boot.bin: u-boot-fit-dtb.bin FORCE
1138 $(call if_changed,copy)
1140 u-boot-dtb.bin: u-boot-nodtb.bin dts/dt.dtb FORCE
1141 $(call if_changed,cat)
1143 else ifeq ($(CONFIG_OF_SEPARATE),y)
1144 u-boot-dtb.bin: u-boot-nodtb.bin dts/dt.dtb FORCE
1145 $(call if_changed,cat)
1147 u-boot.bin: u-boot-dtb.bin FORCE
1148 $(call if_changed,copy)
1150 u-boot.bin: u-boot-nodtb.bin FORCE
1151 $(call if_changed,copy)
1154 # we call Makefile in arch/arm/mach-imx which
1155 # has targets which are dependent on targets defined
1156 # here. make could not resolve them and we must ensure
1157 # that they are finished before calling imx targets
1158 ifeq ($(CONFIG_MULTI_DTB_FIT),y)
1159 IMX_DEPS = u-boot-fit-dtb.bin
1162 %.imx: $(IMX_DEPS) %.bin
1163 $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
1167 $(Q)$(MAKE) $(build)=arch/arm/cpu/armv7/vf610 $@
1169 quiet_cmd_copy = COPY $@
1172 u-boot.dtb: dts/dt.dtb
1175 OBJCOPYFLAGS_u-boot.hex := -O ihex
1177 OBJCOPYFLAGS_u-boot.srec := -O srec
1179 u-boot.hex u-boot.srec: u-boot FORCE
1180 $(call if_changed,objcopy)
1182 OBJCOPYFLAGS_u-boot-elf.srec := $(OBJCOPYFLAGS_u-boot.srec)
1184 u-boot-elf.srec: u-boot.elf FORCE
1185 $(call if_changed,objcopy)
1187 OBJCOPYFLAGS_u-boot-spl.srec = $(OBJCOPYFLAGS_u-boot.srec)
1189 spl/u-boot-spl.srec: spl/u-boot-spl FORCE
1190 $(call if_changed,objcopy)
1193 $(Q)$(MAKE) $(build)=arch/arm/mach-rmobile $@
1195 OBJCOPYFLAGS_u-boot-nodtb.bin := -O binary \
1196 $(if $(CONFIG_X86_16BIT_INIT),-R .start16 -R .resetvec) \
1197 $(if $(CONFIG_MPC85XX_HAVE_RESET_VECTOR),-R .bootpg -R .resetvec)
1199 OBJCOPYFLAGS_u-boot-spl.hex = $(OBJCOPYFLAGS_u-boot.hex)
1201 spl/u-boot-spl.hex: spl/u-boot-spl FORCE
1202 $(call if_changed,objcopy)
1204 binary_size_check: u-boot-nodtb.bin FORCE
1205 @file_size=$(shell wc -c u-boot-nodtb.bin | awk '{print $$1}') ; \
1206 map_size=$(shell cat u-boot.map | \
1207 awk '/_image_copy_start/ {start = $$1} /_image_binary_end/ {end = $$1} END {if (start != "" && end != "") print "ibase=16; " toupper(end) " - " toupper(start)}' \
1210 if [ "" != "$$map_size" ]; then \
1211 if test $$map_size -ne $$file_size; then \
1212 echo "u-boot.map shows a binary size of $$map_size" >&2 ; \
1213 echo " but u-boot-nodtb.bin shows $$file_size" >&2 ; \
1218 ifdef CONFIG_INIT_SP_RELATIVE
1219 ifneq ($(CONFIG_SYS_MALLOC_F_LEN),)
1220 subtract_sys_malloc_f_len = space=$$(($${space} - $(CONFIG_SYS_MALLOC_F_LEN)))
1222 subtract_sys_malloc_f_len = true
1224 # The 1/4 margin below is somewhat arbitrary. The likely initial SP usage is
1225 # so low that the DTB could probably use 90%+ of the available space, for
1226 # current values of CONFIG_SYS_INIT_SP_BSS_OFFSET at least. However, let's be
1227 # safe for now and tweak this later if space becomes tight.
1228 # A rejected alternative would be to check that some absolute minimum stack
1229 # space was available. However, since CONFIG_SYS_INIT_SP_BSS_OFFSET is
1230 # deliberately build-specific, to take account of build-to-build stack usage
1231 # differences due to different feature sets, there is no common absolute value
1233 init_sp_bss_offset_check: u-boot.dtb FORCE
1234 @dtb_size=$(shell wc -c u-boot.dtb | awk '{print $$1}') ; \
1235 space=$(CONFIG_SYS_INIT_SP_BSS_OFFSET) ; \
1236 $(subtract_sys_malloc_f_len) ; \
1237 quarter_space=$$(($${space} / 4)) ; \
1238 if [ $${dtb_size} -gt $${quarter_space} ]; then \
1239 echo "u-boot.dtb is larger than 1 quarter of " >&2 ; \
1240 echo "(CONFIG_SYS_INIT_SP_BSS_OFFSET - CONFIG_SYS_MALLOC_F_LEN)" >&2 ; \
1245 u-boot-nodtb.bin: u-boot FORCE
1246 $(call if_changed,objcopy)
1247 $(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
1252 $(LDR) -T $(CONFIG_CPU) -c $@ $< $(LDR_FLAGS)
1256 # ---------------------------------------------------------------------------
1257 # Use 'make BINMAN_DEBUG=1' to enable debugging
1258 quiet_cmd_binman = BINMAN $@
1259 cmd_binman = $(srctree)/tools/binman/binman $(if $(BINMAN_DEBUG),-D) \
1260 --toolpath $(objtree)/tools \
1261 $(if $(BINMAN_VERBOSE),-v$(BINMAN_VERBOSE)) \
1262 build -u -d u-boot.dtb -O . -m \
1263 -I . -I $(srctree) -I $(srctree)/board/$(BOARDDIR) \
1266 OBJCOPYFLAGS_u-boot.ldr.hex := -I binary -O ihex
1268 OBJCOPYFLAGS_u-boot.ldr.srec := -I binary -O srec
1270 u-boot.ldr.hex u-boot.ldr.srec: u-boot.ldr FORCE
1271 $(call if_changed,objcopy)
1274 # U-Boot entry point, needed for booting of full-blown U-Boot
1275 # from the SPL U-Boot version.
1277 ifndef CONFIG_SYS_UBOOT_START
1278 CONFIG_SYS_UBOOT_START := $(CONFIG_SYS_TEXT_BASE)
1281 # Boards with more complex image requirements can provide an .its source file
1282 # or a generator script
1283 ifneq ($(CONFIG_SPL_FIT_SOURCE),"")
1284 U_BOOT_ITS = $(subst ",,$(CONFIG_SPL_FIT_SOURCE))
1286 ifneq ($(CONFIG_SPL_FIT_GENERATOR),"")
1287 U_BOOT_ITS := u-boot.its
1288 ifeq ($(CONFIG_SPL_FIT_GENERATOR),"arch/arm/mach-imx/mkimage_fit_atf.sh")
1289 U_BOOT_ITS_DEPS += u-boot-nodtb.bin
1291 ifeq ($(CONFIG_SPL_FIT_GENERATOR),"arch/arm/mach-rockchip/make_fit_atf.py")
1292 U_BOOT_ITS_DEPS += u-boot
1294 $(U_BOOT_ITS): $(U_BOOT_ITS_DEPS) FORCE
1295 $(srctree)/$(CONFIG_SPL_FIT_GENERATOR) \
1296 $(patsubst %,arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) > $@
1300 ifdef CONFIG_SPL_LOAD_FIT
1301 MKIMAGEFLAGS_u-boot.img = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
1302 -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
1303 -p $(CONFIG_FIT_EXTERNAL_OFFSET) \
1304 -n "U-Boot $(UBOOTRELEASE) for $(BOARD) board" -E \
1305 $(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) \
1306 $(patsubst %,-b arch/$(ARCH)/dts/%.dtbo,$(subst ",,$(CONFIG_OF_OVERLAY_LIST)))
1308 MKIMAGEFLAGS_u-boot.img = -A $(ARCH) -T firmware -C none -O u-boot \
1309 -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
1310 -n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
1311 MKIMAGEFLAGS_u-boot-ivt.img = -A $(ARCH) -T firmware_ivt -C none -O u-boot \
1312 -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
1313 -n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
1314 u-boot-ivt.img: MKIMAGEOUTPUT = u-boot-ivt.img.log
1317 MKIMAGEFLAGS_u-boot-dtb.img = $(MKIMAGEFLAGS_u-boot.img)
1319 # Some boards have the kwbimage.cfg file written in advance, while some
1320 # other boards generate it on the fly during the build in the build tree.
1321 # Let's check if the file exists in the build tree first, otherwise we
1322 # fall back to use the one in the source tree.
1323 KWD_CONFIG_FILE = $(shell \
1324 if [ -f $(objtree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%) ]; then \
1325 echo -n $(objtree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%); \
1327 echo -n $(srctree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%); \
1330 MKIMAGEFLAGS_u-boot.kwb = -n $(KWD_CONFIG_FILE) \
1331 -T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE)
1333 MKIMAGEFLAGS_u-boot-spl.kwb = -n $(KWD_CONFIG_FILE) \
1334 -T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) \
1335 $(if $(KEYDIR),-k $(KEYDIR))
1337 MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
1338 -R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage
1340 ifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
1341 UBOOT_BIN := u-boot-with-dtb.bin
1343 UBOOT_BIN := u-boot.bin
1346 u-boot-dtb.img u-boot.img u-boot.kwb u-boot.pbl u-boot-ivt.img: \
1347 $(if $(CONFIG_SPL_LOAD_FIT),u-boot-nodtb.bin \
1348 $(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_OF_HOSTFILE),dts/dt.dtb) \
1349 ,$(UBOOT_BIN)) FORCE
1350 $(call if_changed,mkimage)
1353 ifeq ($(CONFIG_SPL_LOAD_FIT_FULL),y)
1354 MKIMAGEFLAGS_u-boot.itb =
1356 MKIMAGEFLAGS_u-boot.itb = -E
1359 u-boot.itb: u-boot-nodtb.bin \
1360 $(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_OF_HOSTFILE),dts/dt.dtb) \
1362 $(call if_changed,mkfitimage)
1365 u-boot-spl.kwb: u-boot.img spl/u-boot-spl.bin FORCE
1366 $(call if_changed,mkimage)
1368 u-boot.sha1: u-boot.bin
1369 tools/ubsha1 u-boot.bin
1372 $(OBJDUMP) -d $< > $@
1374 ifneq ($(CONFIG_SPL_PAYLOAD),)
1375 SPL_PAYLOAD := $(CONFIG_SPL_PAYLOAD:"%"=%)
1377 SPL_PAYLOAD := u-boot.bin
1380 SPL_IMAGE := $(CONFIG_SPL_IMAGE:"%"=%)
1382 OBJCOPYFLAGS_u-boot-with-spl.bin = -I binary -O binary \
1383 --pad-to=$(CONFIG_SPL_PAD_TO)
1384 u-boot-with-spl.bin: $(SPL_IMAGE) $(SPL_PAYLOAD) FORCE
1385 $(call if_changed,pad_cat)
1387 ifeq ($(CONFIG_ARCH_ROCKCHIP),y)
1389 # rockchip image type
1390 ifeq ($(CONFIG_SPL_SPI_LOAD),y)
1391 ROCKCHIP_IMG_TYPE := rkspi
1393 ROCKCHIP_IMG_TYPE := rksd
1397 ifeq ($(CONFIG_SPL)$(CONFIG_TPL),yy)
1398 MKIMAGEFLAGS_u-boot-tpl-rockchip.bin = -n $(CONFIG_SYS_SOC) -T $(ROCKCHIP_IMG_TYPE)
1399 tpl/u-boot-tpl-rockchip.bin: tpl/u-boot-tpl.bin FORCE
1400 $(call if_changed,mkimage)
1401 idbloader.img: tpl/u-boot-tpl-rockchip.bin spl/u-boot-spl.bin FORCE
1402 $(call if_changed,cat)
1404 MKIMAGEFLAGS_idbloader.img = -n $(CONFIG_SYS_SOC) -T $(ROCKCHIP_IMG_TYPE)
1405 idbloader.img: spl/u-boot-spl.bin FORCE
1406 $(call if_changed,mkimage)
1409 ifeq ($(CONFIG_ARM64),)
1410 u-boot-rockchip.bin: idbloader.img u-boot.img FORCE
1411 $(call if_changed,binman)
1413 OBJCOPYFLAGS_u-boot-rockchip.bin = -I binary -O binary \
1414 --pad-to=$(CONFIG_SPL_PAD_TO) --gap-fill=0xff
1415 u-boot-rockchip.bin: idbloader.img u-boot.itb FORCE
1416 $(call if_changed,pad_cat)
1417 endif # CONFIG_ARM64
1419 endif # CONFIG_ARCH_ROCKCHIP
1421 ifeq ($(CONFIG_ARCH_LPC32XX)$(CONFIG_SPL),yy)
1422 MKIMAGEFLAGS_lpc32xx-spl.img = -T lpc32xximage -a $(CONFIG_SPL_TEXT_BASE)
1424 lpc32xx-spl.img: spl/u-boot-spl.bin FORCE
1425 $(call if_changed,mkimage)
1427 OBJCOPYFLAGS_lpc32xx-boot-0.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
1429 lpc32xx-boot-0.bin: lpc32xx-spl.img FORCE
1430 $(call if_changed,objcopy)
1432 OBJCOPYFLAGS_lpc32xx-boot-1.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
1434 lpc32xx-boot-1.bin: lpc32xx-spl.img FORCE
1435 $(call if_changed,objcopy)
1437 lpc32xx-full.bin: lpc32xx-boot-0.bin lpc32xx-boot-1.bin u-boot.img FORCE
1438 $(call if_changed,cat)
1442 OBJCOPYFLAGS_u-boot-with-tpl.bin = -I binary -O binary \
1443 --pad-to=$(CONFIG_TPL_PAD_TO)
1444 tpl/u-boot-with-tpl.bin: tpl/u-boot-tpl.bin u-boot.bin FORCE
1445 $(call if_changed,pad_cat)
1447 SPL: spl/u-boot-spl.bin FORCE
1448 $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
1450 ifeq ($(CONFIG_ARCH_IMX8M)$(CONFIG_ARCH_IMX8), y)
1451 ifeq ($(CONFIG_SPL_LOAD_IMX_CONTAINER), y)
1452 u-boot.cnt: u-boot.bin FORCE
1453 $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
1455 flash.bin: spl/u-boot-spl.bin u-boot.cnt FORCE
1456 $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
1458 flash.bin: spl/u-boot-spl.bin u-boot.itb FORCE
1459 $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
1463 u-boot-with-spl.imx u-boot-with-nand-spl.imx: SPL u-boot.bin FORCE
1464 $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
1466 MKIMAGEFLAGS_u-boot.ubl = -n $(UBL_CONFIG) -T ublimage -e $(CONFIG_SYS_TEXT_BASE)
1468 u-boot.ubl: u-boot-with-spl.bin FORCE
1469 $(call if_changed,mkimage)
1471 MKIMAGEFLAGS_u-boot-spl.ais = -s -n $(if $(CONFIG_AIS_CONFIG_FILE), \
1472 $(srctree)/$(CONFIG_AIS_CONFIG_FILE:"%"=%),"/dev/null") \
1473 -T aisimage -e $(CONFIG_SPL_TEXT_BASE)
1474 spl/u-boot-spl.ais: spl/u-boot-spl.bin FORCE
1475 $(call if_changed,mkimage)
1477 OBJCOPYFLAGS_u-boot.ais = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
1478 u-boot.ais: spl/u-boot-spl.ais u-boot.img FORCE
1479 $(call if_changed,pad_cat)
1481 u-boot-signed.sb: u-boot.bin spl/u-boot-spl.bin
1482 $(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs u-boot-signed.sb
1483 u-boot.sb: u-boot.bin spl/u-boot-spl.bin
1484 $(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs u-boot.sb
1486 # On x600 (SPEAr600) U-Boot is appended to U-Boot SPL.
1487 # Both images are created using mkimage (crc etc), so that the ROM
1488 # bootloader can check its integrity. Padding needs to be done to the
1489 # SPL image (with mkimage header) and not the binary. Otherwise the resulting image
1490 # which is loaded/copied by the ROM bootloader to SRAM doesn't fit.
1491 # The resulting image containing both U-Boot images is called u-boot.spr
1492 MKIMAGEFLAGS_u-boot-spl.img = -A $(ARCH) -T firmware -C none \
1493 -a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n XLOADER
1494 spl/u-boot-spl.img: spl/u-boot-spl.bin FORCE
1495 $(call if_changed,mkimage)
1497 OBJCOPYFLAGS_u-boot.spr = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \
1499 u-boot.spr: spl/u-boot-spl.img u-boot.img FORCE
1500 $(call if_changed,pad_cat)
1502 ifneq ($(CONFIG_ARCH_SOCFPGA),)
1503 quiet_cmd_socboot = SOCBOOT $@
1504 cmd_socboot = cat spl/u-boot-spl.sfp spl/u-boot-spl.sfp \
1505 spl/u-boot-spl.sfp spl/u-boot-spl.sfp \
1506 u-boot.img > $@ || rm -f $@
1507 u-boot-with-spl.sfp: spl/u-boot-spl.sfp u-boot.img FORCE
1508 $(call if_changed,socboot)
1510 quiet_cmd_socnandboot = SOCNANDBOOT $@
1511 cmd_socnandboot = dd if=/dev/zero of=spl/u-boot-spl.pad bs=64 count=1024 ; \
1512 cat spl/u-boot-spl.sfp spl/u-boot-spl.pad \
1513 spl/u-boot-spl.sfp spl/u-boot-spl.pad \
1514 spl/u-boot-spl.sfp spl/u-boot-spl.pad \
1515 spl/u-boot-spl.sfp spl/u-boot-spl.pad \
1516 u-boot.img > $@ || rm -f $@ spl/u-boot-spl.pad
1517 u-boot-with-nand-spl.sfp: spl/u-boot-spl.sfp u-boot.img FORCE
1518 $(call if_changed,socnandboot)
1522 ifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
1523 u-boot-with-dtb.bin: u-boot.bin u-boot.dtb \
1524 $(if $(CONFIG_MPC85XX_HAVE_RESET_VECTOR), u-boot-br.bin) FORCE
1525 $(call if_changed,binman)
1527 ifeq ($(CONFIG_MPC85XX_HAVE_RESET_VECTOR),y)
1528 OBJCOPYFLAGS_u-boot-br.bin := -O binary -j .bootpg -j .resetvec
1529 u-boot-br.bin: u-boot FORCE
1530 $(call if_changed,objcopy)
1534 # x86 uses a large ROM. We fill it with 0xff, put the 16-bit stuff (including
1535 # reset vector) at the top, Intel ME descriptor at the bottom, and U-Boot in
1536 # the middle. This is handled by binman based on an image description in the
1537 # board's device tree.
1538 ifneq ($(CONFIG_X86_RESET_VECTOR),)
1539 rom: u-boot.rom FORCE
1541 refcode.bin: $(srctree)/board/$(BOARDDIR)/refcode.bin FORCE
1542 $(call if_changed,copy)
1544 quiet_cmd_ldr = LD $@
1545 cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \
1546 $(filter-out FORCE,$^) -o $@
1548 u-boot.rom: u-boot-x86-start16.bin u-boot-x86-reset16.bin u-boot.bin \
1549 $(if $(CONFIG_SPL_X86_16BIT_INIT),spl/u-boot-spl.bin) \
1550 $(if $(CONFIG_TPL_X86_16BIT_INIT),tpl/u-boot-tpl.bin) \
1551 $(if $(CONFIG_HAVE_REFCODE),refcode.bin) FORCE
1552 $(call if_changed,binman)
1554 OBJCOPYFLAGS_u-boot-x86-start16.bin := -O binary -j .start16
1555 u-boot-x86-start16.bin: u-boot FORCE
1556 $(call if_changed,objcopy)
1558 OBJCOPYFLAGS_u-boot-x86-reset16.bin := -O binary -j .resetvec
1559 u-boot-x86-reset16.bin: u-boot FORCE
1560 $(call if_changed,objcopy)
1563 ifneq ($(CONFIG_ARCH_SUNXI),)
1564 ifeq ($(CONFIG_ARM64),)
1565 u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.img u-boot.dtb FORCE
1566 $(call if_changed,binman)
1568 u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.itb FORCE
1569 $(call if_changed,cat)
1573 ifneq ($(CONFIG_TEGRA),)
1574 ifneq ($(CONFIG_BINMAN),)
1575 # Makes u-boot-dtb-tegra.bin u-boot-tegra.bin u-boot-nodtb-tegra.bin
1576 %-dtb-tegra.bin %-tegra.bin %-nodtb-tegra.bin: \
1577 spl/%-spl %.bin FORCE
1578 $(call if_changed,binman)
1580 OBJCOPYFLAGS_u-boot-nodtb-tegra.bin = -O binary --pad-to=$(CONFIG_SYS_TEXT_BASE)
1581 u-boot-nodtb-tegra.bin: spl/u-boot-spl u-boot-nodtb.bin FORCE
1582 $(call if_changed,pad_cat)
1584 OBJCOPYFLAGS_u-boot-tegra.bin = -O binary --pad-to=$(CONFIG_SYS_TEXT_BASE)
1585 u-boot-tegra.bin: spl/u-boot-spl u-boot.bin FORCE
1586 $(call if_changed,pad_cat)
1588 u-boot-dtb-tegra.bin: u-boot-tegra.bin FORCE
1589 $(call if_changed,copy)
1593 OBJCOPYFLAGS_u-boot-app.efi := $(OBJCOPYFLAGS_EFI)
1594 u-boot-app.efi: u-boot FORCE
1595 $(call if_changed,zobjcopy)
1597 u-boot.bin.o: u-boot.bin FORCE
1598 $(call if_changed,efipayload)
1600 u-boot-payload.lds: $(LDSCRIPT_EFI) FORCE
1601 $(call if_changed_dep,cpp_lds)
1603 # Rule to link the EFI payload which contains a stub and a U-Boot binary
1604 quiet_cmd_u-boot_payload ?= LD $@
1605 cmd_u-boot_payload ?= $(LD) $(LDFLAGS_EFI_PAYLOAD) -o $@ \
1606 -T u-boot-payload.lds arch/x86/cpu/call32.o \
1607 lib/efi/efi.o lib/efi/efi_stub.o u-boot.bin.o \
1608 $(addprefix arch/$(ARCH)/lib/,$(EFISTUB))
1610 u-boot-payload: u-boot.bin.o u-boot-payload.lds FORCE
1611 $(call if_changed,u-boot_payload)
1613 OBJCOPYFLAGS_u-boot-payload.efi := $(OBJCOPYFLAGS_EFI)
1614 u-boot-payload.efi: u-boot-payload FORCE
1615 $(call if_changed,zobjcopy)
1617 u-boot-img.bin: spl/u-boot-spl.bin u-boot.img FORCE
1618 $(call if_changed,cat)
1620 #Add a target to create boot binary having SPL binary in PBI format
1621 #concatenated with u-boot binary. It is need by PowerPC SoC having
1622 #internal SRAM <= 512KB.
1623 MKIMAGEFLAGS_u-boot-spl.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
1624 -R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage \
1625 -A $(ARCH) -a $(CONFIG_SPL_TEXT_BASE)
1627 spl/u-boot-spl.pbl: spl/u-boot-spl.bin FORCE
1628 $(call if_changed,mkimage)
1631 UBOOT_BINLOAD := u-boot.img
1633 ifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
1634 UBOOT_BINLOAD := u-boot-with-dtb.bin
1636 UBOOT_BINLOAD := u-boot.bin
1640 OBJCOPYFLAGS_u-boot-with-spl-pbl.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \
1643 u-boot-with-spl-pbl.bin: spl/u-boot-spl.pbl $(UBOOT_BINLOAD) FORCE
1644 $(call if_changed,pad_cat)
1646 # PPC4xx needs the SPL at the end of the image, since the reset vector
1647 # is located at 0xfffffffc. So we can't use the "u-boot-img.bin" target
1648 # and need to introduce a new build target with the full blown U-Boot
1649 # at the start padded up to the start of the SPL image. And then concat
1650 # the SPL image to the end.
1652 OBJCOPYFLAGS_u-boot-img-spl-at-end.bin := -I binary -O binary \
1653 --pad-to=$(CONFIG_UBOOT_PAD_TO) --gap-fill=0xff
1654 u-boot-img-spl-at-end.bin: u-boot.img spl/u-boot-spl.bin FORCE
1655 $(call if_changed,pad_cat)
1657 # Create a new ELF from a raw binary file.
1658 ifndef PLATFORM_ELFENTRY
1659 PLATFORM_ELFENTRY = "_start"
1661 quiet_cmd_u-boot-elf ?= LD $@
1662 cmd_u-boot-elf ?= $(LD) u-boot-elf.o -o $@ \
1663 --defsym=$(PLATFORM_ELFENTRY)=$(CONFIG_SYS_TEXT_BASE) \
1664 -Ttext=$(CONFIG_SYS_TEXT_BASE)
1665 u-boot.elf: u-boot.bin
1666 $(Q)$(OBJCOPY) -I binary $(PLATFORM_ELFFLAGS) $< u-boot-elf.o
1667 $(call if_changed,u-boot-elf)
1669 # MediaTek's ARM-based u-boot needs a header to contains its load address
1670 # which is parsed by the BootROM.
1671 # If the SPL build is enabled, the header will be added to the spl binary,
1672 # and the spl binary and the u-boot.img will be combined into one file.
1673 # Otherwise the header will be added to the u-boot.bin directly.
1675 ifeq ($(CONFIG_SPL),y)
1676 spl/u-boot-spl-mtk.bin: spl/u-boot-spl
1678 u-boot-mtk.bin: u-boot.dtb u-boot.img spl/u-boot-spl-mtk.bin FORCE
1679 $(call if_changed,binman)
1681 MKIMAGEFLAGS_u-boot-mtk.bin = -T mtk_image \
1682 -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) \
1683 -n "$(patsubst "%",%,$(CONFIG_MTK_BROM_HEADER_INFO))"
1685 u-boot-mtk.bin: u-boot.bin FORCE
1686 $(call if_changed,mkimage)
1689 ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(ARCH)/Makefile.postlink)
1691 # Rule to link u-boot
1692 # May be overridden by arch/$(ARCH)/config.mk
1693 quiet_cmd_u-boot__ ?= LD $@
1694 cmd_u-boot__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_u-boot) -o $@ \
1695 -T u-boot.lds $(u-boot-init) \
1696 --start-group $(u-boot-main) --end-group \
1697 $(PLATFORM_LIBS) -Map u-boot.map; \
1698 $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
1700 quiet_cmd_smap = GEN common/system_map.o
1702 smap=`$(call SYSTEM_MAP,u-boot) | \
1703 awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \
1704 $(CC) $(c_flags) -DSYSTEM_MAP="\"$${smap}\"" \
1705 -c $(srctree)/common/system_map.c -o common/system_map.o
1707 u-boot: $(u-boot-init) $(u-boot-main) u-boot.lds FORCE
1708 +$(call if_changed,u-boot__)
1709 ifeq ($(CONFIG_KALLSYMS),y)
1711 $(call cmd,u-boot__) common/system_map.o
1714 ifeq ($(CONFIG_RISCV),y)
1715 @tools/prelink-riscv $@ 0
1718 quiet_cmd_sym ?= SYM $@
1719 cmd_sym ?= $(OBJDUMP) -t $< > $@
1720 u-boot.sym: u-boot FORCE
1721 $(call if_changed,sym)
1723 # The actual objects are generated when descending,
1724 # make sure no implicit rule kicks in
1725 $(sort $(u-boot-init) $(u-boot-main)): $(u-boot-dirs) ;
1727 # Handle descending into subdirectories listed in $(u-boot-dirs)
1728 # Preset locale variables to speed up the build process. Limit locale
1729 # tweaks to this spot to avoid wrong language settings when running
1730 # make menuconfig etc.
1731 # Error messages still appears in the original language
1733 PHONY += $(u-boot-dirs)
1734 $(u-boot-dirs): prepare scripts
1735 $(Q)$(MAKE) $(build)=$@
1738 # The "tools" are needed early
1739 $(filter-out tools, $(u-boot-dirs)): tools
1740 # The "examples" conditionally depend on U-Boot (say, when USE_PRIVATE_LIBGCC
1741 # is "yes"), so compile examples after U-Boot is compiled.
1742 examples: $(filter-out examples, $(u-boot-dirs))
1744 define filechk_uboot.release
1745 echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
1748 # Store (new) UBOOTRELEASE string in include/config/uboot.release
1749 include/config/uboot.release: include/config/auto.conf FORCE
1750 $(call filechk,uboot.release)
1753 # Things we need to do before we recursively start building the kernel
1754 # or the modules are listed in "prepare".
1755 # A multi level approach is used. prepareN is processed before prepareN-1.
1756 # archprepare is used in arch Makefiles and when processed asm symlink,
1757 # version.h and scripts_basic is processed / created.
1759 # Listed in dependency order
1760 PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
1762 # prepare3 is used to check if we are building in a separate output directory,
1764 # 1) Check that make has not been executed in the kernel src $(srctree)
1765 prepare3: include/config/uboot.release
1766 ifneq ($(KBUILD_SRC),)
1767 @$(kecho) ' Using $(srctree) as source for U-Boot'
1768 $(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \
1769 echo >&2 " $(srctree) is not clean, please run 'make mrproper'"; \
1770 echo >&2 " in the '$(srctree)' directory.";\
1775 # prepare2 creates a makefile if using a separate output directory
1776 prepare2: prepare3 outputmakefile cfg
1778 prepare1: prepare2 $(version_h) $(timestamp_h) \
1779 include/config/auto.conf
1780 ifeq ($(wildcard $(LDSCRIPT)),)
1781 @echo >&2 " Could not find linker script."
1785 ifeq ($(CONFIG_USE_DEFAULT_ENV_FILE),y)
1786 prepare1: $(defaultenv_h)
1789 archprepare: prepare1 scripts_basic
1791 prepare0: archprepare FORCE
1792 $(Q)$(MAKE) $(build)=.
1794 # All the preparing..
1797 # Generate some files
1798 # ---------------------------------------------------------------------------
1800 define filechk_version.h
1801 (echo \#define PLAIN_VERSION \"$(UBOOTRELEASE)\"; \
1802 echo \#define U_BOOT_VERSION \"U-Boot \" PLAIN_VERSION; \
1803 echo \#define CC_VERSION_STRING \"$$(LC_ALL=C $(CC) --version | head -n 1)\"; \
1804 echo \#define LD_VERSION_STRING \"$$(LC_ALL=C $(LD) --version | head -n 1)\"; )
1807 # The SOURCE_DATE_EPOCH mechanism requires a date that behaves like GNU date.
1808 # The BSD date on the other hand behaves different and would produce errors
1809 # with the misused '-d' switch. Respect that and search a working date with
1810 # well known pre- and suffixes for the GNU variant of date.
1811 define filechk_timestamp.h
1812 (if test -n "$${SOURCE_DATE_EPOCH}"; then \
1813 SOURCE_DATE="@$${SOURCE_DATE_EPOCH}"; \
1815 for date in gdate date.gnu date; do \
1816 $${date} -u -d "$${SOURCE_DATE}" >/dev/null 2>&1 && DATE="$${date}"; \
1818 if test -n "$${DATE}"; then \
1819 LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DATE "%b %d %C%y"'; \
1820 LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TIME "%T"'; \
1821 LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TZ "%z"'; \
1822 LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DMI_DATE "%m/%d/%Y"'; \
1823 LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_BUILD_DATE 0x%Y%m%d'; \
1828 LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \
1829 LC_ALL=C date +'#define U_BOOT_TIME "%T"'; \
1830 LC_ALL=C date +'#define U_BOOT_TZ "%z"'; \
1831 LC_ALL=C date +'#define U_BOOT_DMI_DATE "%m/%d/%Y"'; \
1832 LC_ALL=C date +'#define U_BOOT_BUILD_DATE 0x%Y%m%d'; \
1836 define filechk_defaultenv.h
1840 sed -e 's/\\\x0\s*//g' | \
1841 xxd -i ; echo ", 0x00" ; )
1844 $(version_h): include/config/uboot.release FORCE
1845 $(call filechk,version.h)
1847 $(timestamp_h): $(srctree)/Makefile FORCE
1848 $(call filechk,timestamp.h)
1850 $(defaultenv_h): $(CONFIG_DEFAULT_ENV_FILE:"%"=%) FORCE
1851 $(call filechk,defaultenv.h)
1853 # ---------------------------------------------------------------------------
1854 quiet_cmd_cpp_lds = LDS $@
1855 cmd_cpp_lds = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) \
1856 -D__ASSEMBLY__ -x assembler-with-cpp -std=c99 -P -o $@ $<
1858 u-boot.lds: $(LDSCRIPT) prepare FORCE
1859 $(call if_changed_dep,cpp_lds)
1861 spl/u-boot-spl.bin: spl/u-boot-spl
1865 spl/u-boot-spl: tools prepare \
1866 $(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb) \
1867 $(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_TPL_OF_PLATDATA),dts/dt.dtb)
1868 $(Q)$(MAKE) obj=spl -f $(srctree)/scripts/Makefile.spl all
1870 spl/sunxi-spl.bin: spl/u-boot-spl
1873 spl/sunxi-spl-with-ecc.bin: spl/sunxi-spl.bin
1876 spl/u-boot-spl.sfp: spl/u-boot-spl
1879 spl/boot.bin: spl/u-boot-spl
1882 tpl/u-boot-tpl.bin: tools prepare \
1883 $(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb)
1884 $(Q)$(MAKE) obj=tpl -f $(srctree)/scripts/Makefile.spl all
1887 TAG_SUBDIRS := $(patsubst %,$(srctree)/%,$(u-boot-dirs) include)
1893 ctags -w -o ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
1894 -name '*.[chS]' -print`
1898 etags -a -o etags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
1899 -name '*.[chS]' -print`
1901 $(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) -name '*.[chS]' -print > \
1903 @find $(TAG_SUBDIRS) -name '*.[chS]' -type l -print | \
1904 grep -xvf - cscope.files > cscope.files.no-symlinks; \
1905 mv cscope.files.no-symlinks cscope.files
1910 grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
1913 @$(call SYSTEM_MAP,$<) > $@
1915 #########################################################################
1917 # ARM relocations should all be R_ARM_RELATIVE (32-bit) or
1918 # R_AARCH64_RELATIVE (64-bit).
1919 checkarmreloc: u-boot
1920 @RELOC="`$(CROSS_COMPILE)readelf -r -W $< | cut -d ' ' -f 4 | \
1921 grep R_A | sort -u`"; \
1922 if test "$$RELOC" != "R_ARM_RELATIVE" -a \
1923 "$$RELOC" != "R_AARCH64_RELATIVE"; then \
1924 echo "$< contains unexpected relocations: $$RELOC"; \
1928 tools/version.h: include/version.h
1929 $(Q)mkdir -p $(dir $@)
1930 $(call if_changed,copy)
1932 envtools: scripts_basic $(version_h) $(timestamp_h) tools/version.h
1933 $(Q)$(MAKE) $(build)=tools/env
1935 tools-only: export TOOLS_ONLY=y
1936 tools-only: scripts_basic $(version_h) $(timestamp_h) tools/version.h
1937 $(Q)$(MAKE) $(build)=tools
1939 tools-all: export HOST_TOOLS_ALL=y
1940 tools-all: envtools tools ;
1942 cross_tools: export CROSS_BUILD_TOOLS=y
1943 cross_tools: tools ;
1947 git log --no-merges U-Boot-1_1_5.. | \
1948 unexpand -a | sed -e 's/\s\s*$$//' > $@
1950 #########################################################################
1953 # Cleaning is done on three levels.
1954 # make clean Delete most generated files
1955 # Leave enough to build external modules
1956 # make mrproper Delete the current configuration, and all generated files
1957 # make distclean Remove editor backup files, patch leftover files and the like
1959 # Directories & files removed with 'make clean'
1960 CLEAN_DIRS += $(MODVERDIR) \
1961 $(foreach d, spl tpl, $(patsubst %,$d/%, \
1962 $(filter-out include, $(shell ls -1 $d 2>/dev/null))))
1964 CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h tools/version.h \
1965 boot* u-boot* MLO* SPL System.map fit-dtb.blob* \
1966 u-boot-ivt.img.log u-boot-dtb.imx.log SPL.log u-boot.imx.log \
1967 lpc32xx-* bl31.c bl31.elf bl31_*.bin image.map tispl.bin* \
1968 idbloader.img flash.bin flash.log
1970 # Directories & files removed with 'make mrproper'
1971 MRPROPER_DIRS += include/config include/generated spl tpl \
1973 MRPROPER_FILES += .config .config.old include/autoconf.mk* include/config.h \
1974 ctags etags tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
1975 drivers/video/fonts/*.S
1977 # clean - Delete most, but leave enough to build external modules
1979 clean: rm-dirs := $(CLEAN_DIRS)
1980 clean: rm-files := $(CLEAN_FILES)
1982 clean-dirs := $(foreach f,$(u-boot-alldirs),$(if $(wildcard $(srctree)/$f/Makefile),$f))
1984 clean-dirs := $(addprefix _clean_, $(clean-dirs))
1986 PHONY += $(clean-dirs) clean archclean
1988 $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
1990 clean: $(clean-dirs)
1993 @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
1994 \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
1995 -o -name '*.ko.*' -o -name '*.su' -o -name '*.pyc' \
1996 -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
1997 -o -name '*.lex.c' -o -name '*.tab.[ch]' \
1998 -o -name '*.asn1.[ch]' \
1999 -o -name '*.symtypes' -o -name 'modules.order' \
2000 -o -name modules.builtin -o -name '.tmp_*.o.*' \
2001 -o -name 'dsdt.aml' -o -name 'dsdt.asl.tmp' -o -name 'dsdt.c' \
2002 -o -name '*.efi' -o -name '*.gcno' -o -name '*.so' \) \
2003 -type f -print | xargs rm -f
2005 # mrproper - Delete all generated files, including .config
2007 mrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS))
2008 mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
2009 mrproper-dirs := $(addprefix _mrproper_,scripts)
2011 PHONY += $(mrproper-dirs) mrproper archmrproper
2013 $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
2015 mrproper: clean $(mrproper-dirs)
2018 @rm -f arch/*/include/asm/arch
2025 @find $(srctree) $(RCS_FIND_IGNORE) \
2026 \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
2027 -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
2028 -o -name '.*.rej' -o -name '*%' -o -name 'core' \
2029 -o -name '*.pyc' \) \
2030 -type f -print | xargs rm -f
2031 @rm -f boards.cfg CHANGELOG
2034 F=`basename $(srctree)` ; cd .. ; \
2035 gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
2038 @echo 'Cleaning targets:'
2039 @echo ' clean - Remove most generated files but keep the config'
2040 @echo ' mrproper - Remove all generated files + config + various backup files'
2041 @echo ' distclean - mrproper + remove editor backup and patch files'
2043 @echo 'Configuration targets:'
2044 @$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
2046 @echo 'Test targets:'
2048 @echo ' check - Run all automated tests that use sandbox'
2049 @echo ' qcheck - Run quick automated tests that use sandbox'
2051 @echo 'Other generic targets:'
2052 @echo ' all - Build all necessary images depending on configuration'
2053 @echo ' tests - Build U-Boot for sandbox and run tests'
2054 @echo '* u-boot - Build the bare u-boot'
2055 @echo ' dir/ - Build all files in dir and below'
2056 @echo ' dir/file.[oisS] - Build specified target only'
2057 @echo ' dir/file.lst - Build specified mixed source/assembly target only'
2058 @echo ' (requires a recent binutils and recent build (System.map))'
2059 @echo ' tags/ctags - Generate ctags file for editors'
2060 @echo ' etags - Generate etags file for editors'
2061 @echo ' cscope - Generate cscope index'
2062 @echo ' ubootrelease - Output the release version string (use with make -s)'
2063 @echo ' ubootversion - Output the version stored in Makefile (use with make -s)'
2064 @echo " cfg - Don't build, just create the .cfg files"
2065 @echo " envtools - Build only the target-side environment tools"
2067 @echo 'Static analysers'
2068 @echo ' checkstack - Generate a list of stack hogs'
2069 @echo ' coccicheck - Execute static code analysis with Coccinelle'
2071 @echo 'Documentation targets:'
2072 @$(MAKE) -f $(srctree)/doc/Makefile dochelp
2074 @echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
2075 @echo ' make V=2 [targets] 2 => give reason for rebuild of target'
2076 @echo ' make O=dir [targets] Locate all output files in "dir", including .config'
2077 @echo ' make C=1 [targets] Check all c source with $$CHECK (sparse by default)'
2078 @echo ' make C=2 [targets] Force check of all c source with $$CHECK'
2079 @echo ' make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
2080 @echo ' make W=n [targets] Enable extra gcc checks, n=1,2,3 where'
2081 @echo ' 1: warnings which may be relevant and do not occur too often'
2082 @echo ' 2: warnings which occur quite often but may still be relevant'
2083 @echo ' 3: more obscure warnings, can most likely be ignored'
2084 @echo ' Multiple levels can be combined with W=12 or W=123'
2086 @echo 'Execute "make" or "make all" to build all targets marked with [*] '
2087 @echo 'For further info see the ./README file'
2093 $(srctree)/test/run quick
2095 # Documentation targets
2096 # ---------------------------------------------------------------------------
2097 DOC_TARGETS := xmldocs latexdocs pdfdocs htmldocs epubdocs cleandocs \
2098 linkcheckdocs dochelp refcheckdocs
2099 PHONY += $(DOC_TARGETS)
2100 $(DOC_TARGETS): scripts_basic FORCE
2101 $(Q)$(MAKE) $(build)=doc $@
2103 endif #ifeq ($(config-targets),1)
2104 endif #ifeq ($(mixed-targets),1)
2106 PHONY += checkstack ubootrelease ubootversion
2109 $(OBJDUMP) -d u-boot $$(find . -name u-boot-spl) | \
2110 $(PERL) $(src)/scripts/checkstack.pl $(ARCH)
2113 @echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
2116 @echo $(UBOOTVERSION)
2119 # ---------------------------------------------------------------------------
2120 # Single targets are compatible with:
2121 # - build with mixed source and output
2122 # - build with separate output dir 'make O=...'
2123 # - external modules
2125 # target-dir => where to store outputfile
2126 # build-dir => directory in kernel source tree to use
2128 ifeq ($(KBUILD_EXTMOD),)
2129 build-dir = $(patsubst %/,%,$(dir $@))
2130 target-dir = $(dir $@)
2132 zap-slash=$(filter-out .,$(patsubst %/,%,$(dir $@)))
2133 build-dir = $(KBUILD_EXTMOD)$(if $(zap-slash),/$(zap-slash))
2134 target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))
2137 %.s: %.c prepare scripts FORCE
2138 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
2139 %.i: %.c prepare scripts FORCE
2140 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
2141 %.o: %.c prepare scripts FORCE
2142 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
2143 %.lst: %.c prepare scripts FORCE
2144 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
2145 %.s: %.S prepare scripts FORCE
2146 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
2147 %.o: %.S prepare scripts FORCE
2148 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
2149 %.symtypes: %.c prepare scripts FORCE
2150 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
2153 /: prepare scripts FORCE
2155 $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
2156 $(build)=$(build-dir)
2157 %/: prepare scripts FORCE
2159 $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
2160 $(build)=$(build-dir)
2161 %.ko: prepare scripts FORCE
2163 $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
2164 $(build)=$(build-dir) $(@:.ko=.o)
2165 $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
2167 quiet_cmd_genenv = GENENV $@
2168 cmd_genenv = $(OBJCOPY) --dump-section .rodata.default_environment=$@ env/common.o; \
2169 sed --in-place -e 's/\x00/\x0A/g' $@
2171 u-boot-initial-env: u-boot.bin
2172 $(call if_changed,genenv)
2174 # Consistency checks
2175 # ---------------------------------------------------------------------------
2180 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
2182 # FIXME Should go into a make.lib or something
2183 # ===========================================================================
2185 quiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN $(wildcard $(rm-dirs)))
2186 cmd_rmdirs = rm -rf $(rm-dirs)
2188 quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files)))
2189 cmd_rmfiles = rm -f $(rm-files)
2191 # read all saved command lines
2193 targets := $(wildcard $(sort $(targets)))
2194 cmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
2196 ifneq ($(cmd_files),)
2197 $(cmd_files): ; # Do not try to update included dependency files
2198 include $(cmd_files)
2201 endif # skip-makefile
2206 # Declare the contents of the PHONY variable as phony. We keep that
2207 # information in a variable so we can use it in if_changed and friends.