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 # Avoid funny character set dependencies
24 export LC_COLLATE LC_NUMERIC
26 # Avoid interference with shell env settings
29 # We are using a recursive build, so we need to do a little thinking
30 # to get the ordering right.
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
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
46 # ---------------------------------------------------------------------------
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.
52 # quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
53 # cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
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.
60 # A simple variant is to prefix commands with $(Q) - that's useful
61 # for commands that shall be hidden in non-verbose mode.
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.
68 # To put more focus on warnings, be less verbose as default
69 # Use 'make V=1' to see the full commands
71 ifeq ("$(origin V)", "command line")
78 ifeq ($(KBUILD_VERBOSE),1)
86 # If the user is running make -s (silent mode), suppress echoing of
89 ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4
90 ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
94 ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
99 export quiet Q KBUILD_VERBOSE
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.
105 # Use "make O=dir/to/store/output/files/"
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/
113 # The O= assignment takes precedence over the KBUILD_OUTPUT environment
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),)
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)
126 # That's our default target when none is given on the command line
130 # Cancel implicit rules on top Makefile
131 $(CURDIR)/Makefile Makefile: ;
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) \
139 $(if $(KBUILD_OUTPUT),, \
140 $(error failed to create output directory "$(saved-output)"))
142 PHONY += $(MAKECMDGOALS) sub-make
144 $(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
148 $(Q)$(MAKE) -C $(KBUILD_OUTPUT) KBUILD_SRC=$(CURDIR) \
149 -f $(CURDIR)/Makefile $(filter-out _all sub-make,$(MAKECMDGOALS))
151 # Leave processing to above invocation of make
153 endif # ifneq ($(KBUILD_OUTPUT),)
154 endif # ifeq ($(KBUILD_SRC),)
156 # We process the rest of the Makefile if this is the final invocation of make
157 ifeq ($(skip-makefile),)
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
164 # Call a source code checker (by default, "sparse") as part of the
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.
171 # See the file "Documentation/sparse.txt" for more details, including
172 # where to get the "sparse" utility.
174 ifeq ("$(origin C)", "command line")
175 KBUILD_CHECKSRC = $(C)
177 ifndef KBUILD_CHECKSRC
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
185 KBUILD_EXTMOD ?= $(SUBDIRS)
188 ifeq ("$(origin M)", "command line")
189 KBUILD_EXTMOD := $(M)
192 # If building an external module we do not care about the all: rule
193 # but instead _all depend on modules
195 ifeq ($(KBUILD_EXTMOD),)
201 ifeq ($(KBUILD_SRC),)
202 # building in the source tree
205 ifeq ($(KBUILD_SRC)/,$(dir $(CURDIR)))
206 # building in a subdirectory of the source tree
209 srctree := $(KBUILD_SRC)
216 VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
218 export srctree objtree VPATH
220 # Make sure CDPATH settings don't interfere
223 #########################################################################
225 HOSTARCH := $(shell uname -m | \
227 -e s/sun4u/sparc64/ \
230 -e s/ppc64/powerpc/ \
232 -e s/macppc/powerpc/\
235 HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
236 sed -e 's/\(cygwin\).*/cygwin/')
238 export HOSTARCH HOSTOS
240 #########################################################################
242 # set default to nothing for native builds
243 ifeq ($(HOSTARCH),$(ARCH))
247 KCONFIG_CONFIG ?= .config
248 export KCONFIG_CONFIG
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)
257 HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
258 $(if $(CONFIG_TOOLS_DEBUG),-g)
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
270 ifeq ($(HOSTOS),cygwin)
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.
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.
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 '.')
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 ;)
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")
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
301 HOSTLDFLAGS += $(call os_x_before, 10, 7, "", "-Xlinker -no_pie")
304 # Decide whether to build built-in, modular, or both.
305 # Normally, just do built-in.
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.
315 ifeq ($(MAKECMDGOALS),modules)
316 KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
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
323 # U-Boot does not need modules
324 #ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
325 # KBUILD_MODULES := 1
328 #ifeq ($(MAKECMDGOALS),)
329 # KBUILD_MODULES := 1
332 export KBUILD_MODULES KBUILD_BUILTIN
333 export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
335 # We need some generic definitions (do not try to remake the file).
336 scripts/Kbuild.include: ;
337 include scripts/Kbuild.include
339 # Make variables (CC, etc...)
341 AS = $(CROSS_COMPILE)as
343 ifneq ($(shell $(CROSS_COMPILE)ld.bfd -v 2> /dev/null),)
344 LD = $(CROSS_COMPILE)ld.bfd
346 LD = $(CROSS_COMPILE)ld
348 CC = $(CROSS_COMPILE)gcc
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
363 DTC ?= $(objtree)/scripts/dtc/dtc
366 CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
367 -Wbitwise -Wno-return-void -D__CHECK_ENDIAN__ $(CF)
369 KBUILD_CPPFLAGS := -D__KERNEL__ -D__UBOOT__
371 KBUILD_CFLAGS := -Wall -Wstrict-prototypes \
372 -Wno-format-security \
373 -fno-builtin -ffreestanding
374 KBUILD_CFLAGS += -fshort-wchar
375 KBUILD_AFLAGS := -D__ASSEMBLY__
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)
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
388 export KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE OBJCOPYFLAGS LDFLAGS
389 export KBUILD_CFLAGS KBUILD_AFLAGS
391 # When compiling out-of-tree modules, put MODVERDIR in the module
392 # tree rather than in the kernel tree. The kernel tree might
394 export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions
396 # Files to ignore in find ... statements
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 \) \
401 export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
402 --exclude CVS --exclude .pc --exclude .hg --exclude .git
404 # ===========================================================================
405 # Rules shared between *config targets and build targets
407 # Basic helpers built in scripts/
408 PHONY += scripts_basic
410 $(Q)$(MAKE) $(build)=scripts/basic
411 $(Q)rm -f .tmp_quiet_recordmcount
413 # To avoid any implicit rule to kick in, define an empty command.
414 scripts/basic/%: scripts_basic ;
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
421 ifneq ($(KBUILD_SRC),)
422 $(Q)ln -fsn $(srctree) source
423 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
424 $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
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).
435 version_h := include/generated/version_autogenerated.h
436 timestamp_h := include/generated/timestamp_autogenerated.h
437 defaultenv_h := include/generated/defaultenv_autogenerated.h
439 no-dot-config-targets := clean clobber mrproper distclean \
440 help %docs check% coccicheck \
441 ubootversion backup tests
447 ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
448 ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
453 ifeq ($(KBUILD_EXTMOD),)
454 ifneq ($(filter config %config,$(MAKECMDGOALS)),)
456 ifneq ($(words $(MAKECMDGOALS)),1)
462 ifeq ($(mixed-targets),1)
463 # ===========================================================================
464 # We're called with mixed targets (*config and build targets).
465 # Handle them one by one.
467 PHONY += $(MAKECMDGOALS) __build_one_by_one
469 $(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one
474 for i in $(MAKECMDGOALS); do \
475 $(MAKE) -f $(srctree)/Makefile $$i; \
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
484 KBUILD_DEFCONFIG := sandbox_defconfig
485 export KBUILD_DEFCONFIG KBUILD_KCONFIG
487 config: scripts_basic outputmakefile FORCE
488 $(Q)$(MAKE) $(build)=scripts/kconfig $@
490 %config: scripts_basic outputmakefile FORCE
491 $(Q)$(MAKE) $(build)=scripts/kconfig $@
494 # ===========================================================================
495 # Build targets only - this includes vmlinux, arch specific targets, clean
496 # targets and others. In general all targets except *config targets.
498 # Additional helpers built in scripts/
499 # Carefully list dependencies so we do not try to build scripts twice
502 scripts: scripts_basic include/config/auto.conf
503 $(Q)$(MAKE) $(build)=$(@)
505 ifeq ($(dot-config),1)
507 -include include/config/auto.conf
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
513 # To avoid any implicit rule to kick in, define an empty command
514 $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
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
532 u-boot.cfg spl/u-boot.cfg tpl/u-boot.cfg: include/config.h FORCE
533 $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf $(@)
535 -include include/autoconf.mk
536 -include include/autoconf.mk.dep
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),)
548 include arch/$(ARCH)/Makefile
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
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
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:"%"=%)
574 # If there is no specified link script, we look in a number of places for it
576 ifeq ($(wildcard $(LDSCRIPT)),)
577 LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot.lds
579 ifeq ($(wildcard $(LDSCRIPT)),)
580 LDSCRIPT := $(srctree)/$(CPUDIR)/u-boot.lds
582 ifeq ($(wildcard $(LDSCRIPT)),)
583 LDSCRIPT := $(srctree)/arch/$(ARCH)/cpu/u-boot.lds
588 # Dummy target needed, because used as prerequisite
589 include/config/auto.conf: ;
590 endif # $(dot-config)
593 # Xtensa linker script cannot be preprocessed with -ansi because of
594 # preprocessor operations on strings that don't make C identifiers.
596 ifeq ($(CONFIG_XTENSA),)
600 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
606 KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
607 KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks)
609 # change __FILE__ to the relative path from the srctree
610 KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
613 # $(KBUILD_AFLAGS) sets -g, which causes gcc to pass a suitable -g<format>
614 # option to the assembler.
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
621 ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-stack-usage.sh $(CC)),y)
622 KBUILD_CFLAGS += -fstack-usage
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)
635 # turn jbsr into jsr for m68k
637 ifeq ($(findstring 3.4,$(shell $(CC) --version)),3.4)
638 KBUILD_AFLAGS += -Wa,-gstabs,-S
642 # Prohibit date/time macros, which would make the build non-deterministic
643 KBUILD_CFLAGS += $(call cc-option,-Werror=date-time)
645 include scripts/Makefile.extrawarn
647 # Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
648 KBUILD_CPPFLAGS += $(KCPPFLAGS)
649 KBUILD_AFLAGS += $(KAFLAGS)
650 KBUILD_CFLAGS += $(KCFLAGS)
652 # Use UBOOTINCLUDE when you must reference the include/ directory.
653 # Needed to be compatible with the O= option
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
663 NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
664 CHECKFLAGS += $(NOSTDINC_FLAGS)
667 cpp_flags := $(KBUILD_CPPFLAGS) $(PLATFORM_CPPFLAGS) $(UBOOTINCLUDE) \
669 c_flags := $(KBUILD_CFLAGS) $(cpp_flags)
671 #########################################################################
672 # U-Boot objects....order is important (i.e. start must be first)
674 HAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(srctree)/board/$(VENDOR)/common/Makefile),y,n)
677 libs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
678 libs-$(CONFIG_OF_EMBED) += dts/
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/ \
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/
721 libs-$(CONFIG_API) += api/
722 libs-$(CONFIG_HAS_POST) += post/
725 libs-$(CONFIG_UT_ENV) += test/env/
726 libs-$(CONFIG_UT_OVERLAY) += test/overlay/
728 libs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/)
730 libs-y := $(sort $(libs-y))
732 u-boot-dirs := $(patsubst %/,%,$(filter %/, $(libs-y))) tools examples
734 u-boot-alldirs := $(sort $(u-boot-dirs) $(patsubst %/,%,$(filter %/, $(libs-))))
736 libs-y := $(patsubst %/, %/built-in.o, $(libs-y))
738 u-boot-init := $(head-y)
739 u-boot-main := $(libs-y)
743 ifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y)
744 PLATFORM_LIBGCC = arch/$(ARCH)/lib/lib.a
746 PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(c_flags) -print-libgcc-file-name`) -lgcc
748 PLATFORM_LIBS += $(PLATFORM_LIBGCC)
750 ifdef CONFIG_CC_COVERAGE
751 KBUILD_CFLAGS += --coverage
752 PLATFORM_LIBGCC += -lgcov
756 export PLATFORM_LIBGCC
758 # Special flags for CPP when processing the linker script.
759 # Pass the version down so we can handle backwards compatibility
762 -include $(srctree)/include/u-boot/u-boot.lds.h \
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')
767 #########################################################################
768 #########################################################################
770 ifneq ($(CONFIG_BOARD_SIZE_LIMIT),)
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; \
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
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
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
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
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
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
816 ifeq ($(CONFIG_MX7)$(CONFIG_SECURE_BOOT), yy)
817 ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
819 ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot.img
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
827 ALL-$(CONFIG_OF_HOSTFILE) += u-boot.dtb
828 ifneq ($(CONFIG_SPL_TARGET),)
829 ALL-$(CONFIG_SPL) += $(CONFIG_SPL_TARGET:"%"=%)
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
835 ifneq ($(BUILD_ROM)$(CONFIG_BUILD_ROM),)
836 ALL-$(CONFIG_X86_RESET_VECTOR) += u-boot.rom
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
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
850 # Add optional build target if defined in board/cpu/soc headers
851 ifneq ($(CONFIG_BUILD_TARGET),)
852 ALL-y += $(CONFIG_BUILD_TARGET:"%"=%)
855 ifneq ($(CONFIG_SYS_INIT_SP_BSS_OFFSET),)
856 ALL-y += init_sp_bss_offset_check
859 LDFLAGS_u-boot += $(LDFLAGS_FINAL)
861 # Avoid 'Not enough room for program headers' error on binutils 2.28 onwards.
862 LDFLAGS_u-boot += $(call ld-option, --no-dynamic-linker)
864 ifeq ($(CONFIG_ARC)$(CONFIG_NIOS2)$(CONFIG_X86)$(CONFIG_XTENSA),)
865 LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
868 # Normally we fill empty space with 0xff
869 quiet_cmd_objcopy = OBJCOPY $@
870 cmd_objcopy = $(OBJCOPY) --gap-fill=0xff $(OBJCOPYFLAGS) \
871 $(OBJCOPYFLAGS_$(@F)) $< $@
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)) $< $@
877 quiet_cmd_efipayload = OBJCOPY $@
878 cmd_efipayload = $(OBJCOPY) -I binary -O $(EFIPAYLOAD_BFDTARGET) -B $(EFIPAYLOAD_BFDARCH) $< $@
880 MKIMAGEOUTPUT ?= /dev/null
882 quiet_cmd_mkimage = MKIMAGE $@
883 cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
884 >$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
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))
890 quiet_cmd_cat = CAT $@
891 cmd_cat = cat $(filter-out $(PHONY), $^) > $@
893 append = cat $(filter-out $< $(PHONY), $^) >> $@
895 quiet_cmd_pad_cat = CAT $@
896 cmd_pad_cat = $(cmd_objcopy) && $(append) || rm -f $@
900 quiet_cmd_cfgcheck = CFGCHK $2
901 cmd_cfgcheck = $(srctree)/scripts/check-config.sh $2 \
902 $(srctree)/scripts/config_whitelist.txt $(srctree)
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 "===================================================="
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)
921 $(Q)$(MAKE) $(build)=dts dtbs
923 quiet_cmd_copy = COPY $@
926 ifeq ($(CONFIG_MULTI_DTB_FIT),y)
928 fit-dtb.blob: dts/dt.dtb FORCE
929 $(call if_changed,mkimage)
931 MKIMAGEFLAGS_fit-dtb.blob = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
933 $(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) -d /dev/null
935 u-boot-fit-dtb.bin: u-boot-nodtb.bin fit-dtb.blob
936 $(call if_changed,cat)
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)
944 u-boot.bin: u-boot-dtb.bin FORCE
945 $(call if_changed,copy)
947 u-boot.bin: u-boot-nodtb.bin FORCE
948 $(call if_changed,copy)
952 $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
955 $(Q)$(MAKE) $(build)=arch/arm/cpu/armv7/vf610 $@
957 quiet_cmd_copy = COPY $@
960 u-boot.dtb: dts/dt.dtb
963 OBJCOPYFLAGS_u-boot.hex := -O ihex
965 OBJCOPYFLAGS_u-boot.srec := -O srec
967 u-boot.hex u-boot.srec: u-boot FORCE
968 $(call if_changed,objcopy)
970 OBJCOPYFLAGS_u-boot-elf.srec := $(OBJCOPYFLAGS_u-boot.srec)
972 u-boot-elf.srec: u-boot.elf FORCE
973 $(call if_changed,objcopy)
975 OBJCOPYFLAGS_u-boot-spl.srec = $(OBJCOPYFLAGS_u-boot.srec)
977 spl/u-boot-spl.srec: spl/u-boot-spl FORCE
978 $(call if_changed,objcopy)
980 OBJCOPYFLAGS_u-boot-nodtb.bin := -O binary \
981 $(if $(CONFIG_X86_16BIT_INIT),-R .start16 -R .resetvec)
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)}' \
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 ; \
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)))
1001 subtract_sys_malloc_f_len = true
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
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 ; \
1024 u-boot-nodtb.bin: u-boot FORCE
1025 $(call if_changed,objcopy)
1026 $(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
1031 $(LDR) -T $(CONFIG_CPU) -c $@ $< $(LDR_FLAGS)
1035 # ---------------------------------------------------------------------------
1036 quiet_cmd_binman = BINMAN $@
1037 cmd_binman = $(srctree)/tools/binman/binman -d u-boot.dtb -O . \
1038 -I . -I $(srctree)/board/$(BOARDDIR) $<
1040 OBJCOPYFLAGS_u-boot.ldr.hex := -I binary -O ihex
1042 OBJCOPYFLAGS_u-boot.ldr.srec := -I binary -O srec
1044 u-boot.ldr.hex u-boot.ldr.srec: u-boot.ldr FORCE
1045 $(call if_changed,objcopy)
1048 # U-Boot entry point, needed for booting of full-blown U-Boot
1049 # from the SPL U-Boot version.
1051 ifndef CONFIG_SYS_UBOOT_START
1052 CONFIG_SYS_UBOOT_START := 0
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 $@ $<
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))
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))) > $@
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)))
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
1089 MKIMAGEFLAGS_u-boot-dtb.img = $(MKIMAGEFLAGS_u-boot.img)
1091 MKIMAGEFLAGS_u-boot.kwb = -n $(srctree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%) \
1092 -T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE)
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))
1098 MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
1099 -R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage
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)
1105 u-boot.itb: u-boot-nodtb.bin dts/dt.dtb $(U_BOOT_ITS) FORCE
1106 $(call if_changed,mkfitimage)
1109 u-boot-spl.kwb: u-boot.img spl/u-boot-spl.bin FORCE
1110 $(call if_changed,mkimage)
1112 u-boot.sha1: u-boot.bin
1113 tools/ubsha1 u-boot.bin
1116 $(OBJDUMP) -d $< > $@
1119 SPL_PAYLOAD := tpl/u-boot-with-tpl.bin
1121 SPL_PAYLOAD := u-boot.bin
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)
1129 MKIMAGEFLAGS_lpc32xx-spl.img = -T lpc32xximage -a $(CONFIG_SPL_TEXT_BASE)
1131 lpc32xx-spl.img: spl/u-boot-spl.bin FORCE
1132 $(call if_changed,mkimage)
1134 OBJCOPYFLAGS_lpc32xx-boot-0.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
1136 lpc32xx-boot-0.bin: lpc32xx-spl.img FORCE
1137 $(call if_changed,objcopy)
1139 OBJCOPYFLAGS_lpc32xx-boot-1.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
1141 lpc32xx-boot-1.bin: lpc32xx-spl.img FORCE
1142 $(call if_changed,objcopy)
1144 lpc32xx-full.bin: lpc32xx-boot-0.bin lpc32xx-boot-1.bin u-boot.img FORCE
1145 $(call if_changed,cat)
1147 CLEAN_FILES += lpc32xx-*
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)
1154 SPL: spl/u-boot-spl.bin FORCE
1155 $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
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 $@
1160 MKIMAGEFLAGS_u-boot.ubl = -n $(UBL_CONFIG) -T ublimage -e $(CONFIG_SYS_TEXT_BASE)
1162 u-boot.ubl: u-boot-with-spl.bin FORCE
1163 $(call if_changed,mkimage)
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)
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)
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
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)
1191 OBJCOPYFLAGS_u-boot.spr = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \
1193 u-boot.spr: spl/u-boot-spl.img u-boot.img FORCE
1194 $(call if_changed,pad_cat)
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)
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
1212 refcode.bin: $(srctree)/board/$(BOARDDIR)/refcode.bin FORCE
1213 $(call if_changed,copy)
1215 quiet_cmd_ldr = LD $@
1216 cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \
1217 $(filter-out FORCE,$^) -o $@
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)
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)
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)
1234 u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.itb FORCE
1235 $(call if_changed,cat)
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)
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)
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)
1253 u-boot-dtb-tegra.bin: u-boot-tegra.bin FORCE
1254 $(call if_changed,copy)
1258 OBJCOPYFLAGS_u-boot-app.efi := $(OBJCOPYFLAGS_EFI)
1259 u-boot-app.efi: u-boot FORCE
1260 $(call if_changed,zobjcopy)
1262 u-boot.bin.o: u-boot.bin FORCE
1263 $(call if_changed,efipayload)
1265 u-boot-payload.lds: $(LDSCRIPT_EFI) FORCE
1266 $(call if_changed_dep,cpp_lds)
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))
1275 u-boot-payload: u-boot.bin.o u-boot-payload.lds FORCE
1276 $(call if_changed,u-boot_payload)
1278 OBJCOPYFLAGS_u-boot-payload.efi := $(OBJCOPYFLAGS_EFI)
1279 u-boot-payload.efi: u-boot-payload FORCE
1280 $(call if_changed,zobjcopy)
1282 u-boot-img.bin: spl/u-boot-spl.bin u-boot.img FORCE
1283 $(call if_changed,cat)
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)
1292 spl/u-boot-spl.pbl: spl/u-boot-spl.bin FORCE
1293 $(call if_changed,mkimage)
1296 UBOOT_BINLOAD := u-boot.img
1298 UBOOT_BINLOAD := u-boot.bin
1301 OBJCOPYFLAGS_u-boot-with-spl-pbl.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \
1304 u-boot-with-spl-pbl.bin: spl/u-boot-spl.pbl $(UBOOT_BINLOAD) FORCE
1305 $(call if_changed,pad_cat)
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.
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)
1318 # Create a new ELF from a raw binary file.
1319 ifndef PLATFORM_ELFENTRY
1320 PLATFORM_ELFENTRY = "_start"
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)
1330 ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(ARCH)/Makefile.postlink)
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)
1341 quiet_cmd_smap = GEN common/system_map.o
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
1348 u-boot: $(u-boot-init) $(u-boot-main) u-boot.lds FORCE
1349 +$(call if_changed,u-boot__)
1350 ifeq ($(CONFIG_KALLSYMS),y)
1352 $(call cmd,u-boot__) common/system_map.o
1355 ifeq ($(CONFIG_RISCV),y)
1356 @tools/prelink-riscv $@ 0
1359 quiet_cmd_sym ?= SYM $@
1360 cmd_sym ?= $(OBJDUMP) -t $< > $@
1361 u-boot.sym: u-boot FORCE
1362 $(call if_changed,sym)
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) ;
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
1374 PHONY += $(u-boot-dirs)
1375 $(u-boot-dirs): prepare scripts
1376 $(Q)$(MAKE) $(build)=$@
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))
1385 define filechk_uboot.release
1386 echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
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)
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.
1400 # Listed in dependency order
1401 PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
1403 # prepare3 is used to check if we are building in a separate output directory,
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.";\
1416 # prepare2 creates a makefile if using a separate output directory
1417 prepare2: prepare3 outputmakefile
1419 prepare1: prepare2 $(version_h) $(timestamp_h) \
1420 include/config/auto.conf
1421 ifeq ($(wildcard $(LDSCRIPT)),)
1422 @echo >&2 " Could not find linker script."
1426 ifeq ($(CONFIG_USE_DEFAULT_ENV_FILE),y)
1427 prepare1: $(defaultenv_h)
1430 archprepare: prepare1 scripts_basic
1432 prepare0: archprepare FORCE
1433 $(Q)$(MAKE) $(build)=.
1435 # All the preparing..
1438 # Generate some files
1439 # ---------------------------------------------------------------------------
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)\"; )
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}"; \
1456 for date in gdate date.gnu date; do \
1457 $${date} -u -d "$${SOURCE_DATE}" >/dev/null 2>&1 && DATE="$${date}"; \
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'; \
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'; \
1477 define filechk_defaultenv.h
1481 sed -e 's/\\\x0/\n/' | \
1482 xxd -i ; echo ", 0x00" ; )
1485 $(version_h): include/config/uboot.release FORCE
1486 $(call filechk,version.h)
1488 $(timestamp_h): $(srctree)/Makefile FORCE
1489 $(call filechk,timestamp.h)
1491 $(defaultenv_h): $(CONFIG_DEFAULT_ENV_FILE:"%"=%) FORCE
1492 $(call filechk,defaultenv.h)
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 $@ $<
1499 u-boot.lds: $(LDSCRIPT) prepare FORCE
1500 $(call if_changed_dep,cpp_lds)
1502 spl/u-boot-spl.bin: spl/u-boot-spl
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
1509 spl/sunxi-spl.bin: spl/u-boot-spl
1512 spl/sunxi-spl-with-ecc.bin: spl/sunxi-spl.bin
1515 spl/u-boot-spl.sfp: spl/u-boot-spl
1518 spl/boot.bin: spl/u-boot-spl
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
1525 TAG_SUBDIRS := $(patsubst %,$(srctree)/%,$(u-boot-dirs) include)
1531 ctags -w -o ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
1532 -name '*.[chS]' -print`
1536 etags -a -o etags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
1537 -name '*.[chS]' -print`
1539 $(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) -name '*.[chS]' -print > \
1545 grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
1548 @$(call SYSTEM_MAP,$<) > $@
1550 #########################################################################
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"; \
1563 envtools: scripts_basic $(version_h) $(timestamp_h)
1564 $(Q)$(MAKE) $(build)=tools/env
1566 tools-only: scripts_basic $(version_h) $(timestamp_h)
1567 $(Q)$(MAKE) $(build)=tools
1569 tools-all: export HOST_TOOLS_ALL=y
1570 tools-all: envtools tools ;
1572 cross_tools: export CROSS_BUILD_TOOLS=y
1573 cross_tools: tools ;
1577 git log --no-merges U-Boot-1_1_5.. | \
1578 unexpand -a | sed -e 's/\s\s*$$//' > $@
1580 #########################################################################
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
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))))
1594 CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h \
1595 boot* u-boot* MLO* SPL System.map fit-dtb.blob
1597 # Directories & files removed with 'make mrproper'
1598 MRPROPER_DIRS += include/config include/generated spl tpl \
1600 MRPROPER_FILES += .config .config.old include/autoconf.mk* include/config.h \
1601 ctags etags tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS
1603 # clean - Delete most, but leave enough to build external modules
1605 clean: rm-dirs := $(CLEAN_DIRS)
1606 clean: rm-files := $(CLEAN_FILES)
1608 clean-dirs := $(foreach f,$(u-boot-alldirs),$(if $(wildcard $(srctree)/$f/Makefile),$f))
1610 clean-dirs := $(addprefix _clean_, $(clean-dirs) doc/DocBook)
1612 PHONY += $(clean-dirs) clean archclean
1614 $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
1616 # TODO: Do not use *.cfgtmp
1617 clean: $(clean-dirs)
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' \) \
1629 -type f -print | xargs rm -f
1631 # mrproper - Delete all generated files, including .config
1633 mrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS))
1634 mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
1635 mrproper-dirs := $(addprefix _mrproper_,scripts)
1637 PHONY += $(mrproper-dirs) mrproper archmrproper
1639 $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
1641 mrproper: clean $(mrproper-dirs)
1644 @rm -f arch/*/include/asm/arch
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
1660 F=`basename $(srctree)` ; cd .. ; \
1661 gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
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'
1669 @echo 'Configuration targets:'
1670 @$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
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"
1688 @echo 'Static analysers'
1689 @echo ' checkstack - Generate a list of stack hogs'
1690 @echo ' coccicheck - Execute static code analysis with Coccinelle'
1692 @echo 'Documentation targets:'
1693 @$(MAKE) -f $(srctree)/doc/DocBook/Makefile dochelp
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'
1707 @echo 'Execute "make" or "make all" to build all targets marked with [*] '
1708 @echo 'For further info see the ./README file'
1713 # Documentation targets
1714 # ---------------------------------------------------------------------------
1715 %docs: scripts_basic FORCE
1716 $(Q)$(MAKE) $(build)=scripts build_docproc
1717 $(Q)$(MAKE) $(build)=doc/DocBook $@
1719 endif #ifeq ($(config-targets),1)
1720 endif #ifeq ($(mixed-targets),1)
1722 PHONY += checkstack ubootrelease ubootversion
1725 $(OBJDUMP) -d u-boot $$(find . -name u-boot-spl) | \
1726 $(PERL) $(src)/scripts/checkstack.pl $(ARCH)
1729 @echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
1732 @echo $(UBOOTVERSION)
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
1741 # target-dir => where to store outputfile
1742 # build-dir => directory in kernel source tree to use
1744 ifeq ($(KBUILD_EXTMOD),)
1745 build-dir = $(patsubst %/,%,$(dir $@))
1746 target-dir = $(dir $@)
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 $@))
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 $@)
1769 /: prepare scripts FORCE
1771 $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1772 $(build)=$(build-dir)
1773 %/: prepare scripts FORCE
1775 $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1776 $(build)=$(build-dir)
1777 %.ko: prepare scripts FORCE
1779 $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1780 $(build)=$(build-dir) $(@:.ko=.o)
1781 $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
1783 # Consistency checks
1784 # ---------------------------------------------------------------------------
1789 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
1791 # FIXME Should go into a make.lib or something
1792 # ===========================================================================
1794 quiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN $(wildcard $(rm-dirs)))
1795 cmd_rmdirs = rm -rf $(rm-dirs)
1797 quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files)))
1798 cmd_rmfiles = rm -f $(rm-files)
1800 # read all saved command lines
1802 targets := $(wildcard $(sort $(targets)))
1803 cmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
1805 ifneq ($(cmd_files),)
1806 $(cmd_files): ; # Do not try to update included dependency files
1807 include $(cmd_files)
1810 endif # skip-makefile
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.