| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818 | # SPDX-License-Identifier: GPL-2.0+VERSION = 2018PATCHLEVEL = 07SUBLEVEL =EXTRAVERSION = -linux4ark_1.0NAME =# *DOCUMENTATION*# To see a list of typical targets execute "make help"# More info can be located in ./README# Comments in this file are targeted only to the developer, do not# expect to learn how to build the kernel reading this file.# o Do not use make's built-in rules and variables#   (this increases performance and avoids hard-to-debug behaviour);# o Look for make include files relative to root of kernel srcMAKEFLAGS += -rR --include-dir=$(CURDIR)# Avoid funny character set dependenciesunexport LC_ALLLC_COLLATE=CLC_NUMERIC=Cexport LC_COLLATE LC_NUMERIC# Avoid interference with shell env settingsunexport GREP_OPTIONS# We are using a recursive build, so we need to do a little thinking# to get the ordering right.## Most importantly: sub-Makefiles should only ever modify files in# their own directory. If in some directory we have a dependency on# a file in another dir (which doesn't happen often, but it's often# unavoidable when linking the built-in.o targets which finally# turn into vmlinux), we will call a sub make in that other dir, and# after that we are sure that everything which is in that other dir# is now up to date.## The only cases where we need to modify files which have global# effects are thus separated out and done before the recursive# descending is started. They are now explicitly listed as the# prepare rule.# Beautify output# ---------------------------------------------------------------------------## Normally, we echo the whole command before executing it. By making# that echo $($(quiet)$(cmd)), we now have the possibility to set# $(quiet) to choose other forms of output instead, e.g.##         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@#         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<## If $(quiet) is empty, the whole command will be printed.# If it is set to "quiet_", only the short version will be printed.# If it is set to "silent_", nothing will be printed at all, since# the variable $(silent_cmd_cc_o_c) doesn't exist.## A simple variant is to prefix commands with $(Q) - that's useful# for commands that shall be hidden in non-verbose mode.##	$(Q)ln $@ :<## If KBUILD_VERBOSE equals 0 then the above command will be hidden.# If KBUILD_VERBOSE equals 1 then the above command is displayed.## To put more focus on warnings, be less verbose as default# Use 'make V=1' to see the full commandsifeq ("$(origin V)", "command line")  KBUILD_VERBOSE = $(V)endififndef KBUILD_VERBOSE  KBUILD_VERBOSE = 0endififeq ($(KBUILD_VERBOSE),1)  quiet =  Q =else  quiet=quiet_  Q = @endif# If the user is running make -s (silent mode), suppress echoing of# commandsifneq ($(filter 4.%,$(MAKE_VERSION)),)	# make-4ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)  quiet=silent_endifelse					# make-3.8xifneq ($(filter s% -s%,$(MAKEFLAGS)),)  quiet=silent_endifendifexport quiet Q KBUILD_VERBOSE# kbuild supports saving output files in a separate directory.# To locate output files in a separate directory two syntaxes are supported.# In both cases the working directory must be the root of the kernel src.# 1) O=# Use "make O=dir/to/store/output/files/"## 2) Set KBUILD_OUTPUT# Set the environment variable KBUILD_OUTPUT to point to the directory# where the output files shall be placed.# export KBUILD_OUTPUT=dir/to/store/output/files/# make## The O= assignment takes precedence over the KBUILD_OUTPUT environment# variable.# KBUILD_SRC is set on invocation of make in OBJ directory# KBUILD_SRC is not intended to be used by the regular user (for now)ifeq ($(KBUILD_SRC),)# OK, Make called in directory where kernel src resides# Do we want to locate output files in a separate directory?ifeq ("$(origin O)", "command line")  KBUILD_OUTPUT := $(O)endif# That's our default target when none is given on the command linePHONY := _all_all:# Cancel implicit rules on top Makefile$(CURDIR)/Makefile Makefile: ;ifneq ($(KBUILD_OUTPUT),)# Invoke a second make in the output directory, passing relevant variables# check that the output directory actually existssaved-output := $(KBUILD_OUTPUT)KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \								&& /bin/pwd)$(if $(KBUILD_OUTPUT),, \     $(error failed to create output directory "$(saved-output)"))PHONY += $(MAKECMDGOALS) sub-make$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make	@:sub-make: FORCE	$(Q)$(MAKE) -C $(KBUILD_OUTPUT) KBUILD_SRC=$(CURDIR) \	-f $(CURDIR)/Makefile $(filter-out _all sub-make,$(MAKECMDGOALS))# Leave processing to above invocation of makeskip-makefile := 1endif # ifneq ($(KBUILD_OUTPUT),)endif # ifeq ($(KBUILD_SRC),)# We process the rest of the Makefile if this is the final invocation of makeifeq ($(skip-makefile),)# Do not print "Entering directory ...",# but we want to display it when entering to the output directory# so that IDEs/editors are able to understand relative filenames.MAKEFLAGS += --no-print-directory# Call a source code checker (by default, "sparse") as part of the# C compilation.## Use 'make C=1' to enable checking of only re-compiled files.# Use 'make C=2' to enable checking of *all* source files, regardless# of whether they are re-compiled or not.## See the file "Documentation/sparse.txt" for more details, including# where to get the "sparse" utility.ifeq ("$(origin C)", "command line")  KBUILD_CHECKSRC = $(C)endififndef KBUILD_CHECKSRC  KBUILD_CHECKSRC = 0endif# Use make M=dir to specify directory of external module to build# Old syntax make ... SUBDIRS=$PWD is still supported# Setting the environment variable KBUILD_EXTMOD take precedenceifdef SUBDIRS  KBUILD_EXTMOD ?= $(SUBDIRS)endififeq ("$(origin M)", "command line")  KBUILD_EXTMOD := $(M)endif# If building an external module we do not care about the all: rule# but instead _all depend on modulesPHONY += allifeq ($(KBUILD_EXTMOD),)_all: allelse_all: modulesendififeq ($(KBUILD_SRC),)        # building in the source tree        srctree := .else        ifeq ($(KBUILD_SRC)/,$(dir $(CURDIR)))                # building in a subdirectory of the source tree                srctree := ..        else                srctree := $(KBUILD_SRC)        endifendifobjtree		:= .src		:= $(srctree)obj		:= $(objtree)VPATH		:= $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))export srctree objtree VPATH# Make sure CDPATH settings don't interfereunexport CDPATH#########################################################################HOSTARCH := $(shell uname -m | \	sed -e s/i.86/x86/ \	    -e s/sun4u/sparc64/ \	    -e s/arm.*/arm/ \	    -e s/sa110/arm/ \	    -e s/ppc64/powerpc/ \	    -e s/ppc/powerpc/ \	    -e s/macppc/powerpc/\	    -e s/sh.*/sh/)HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \	    sed -e 's/\(cygwin\).*/cygwin/')export	HOSTARCH HOSTOS########################################################################## set default to nothing for native buildsifeq ($(HOSTARCH),$(ARCH))CROSS_COMPILE ?=endifKCONFIG_CONFIG	?= .configexport KCONFIG_CONFIG# SHELL used by kbuildCONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \	  else if [ -x /bin/bash ]; then echo /bin/bash; \	  else echo sh; fi ; fi)HOSTCC       = ccHOSTCXX      = c++HOSTCFLAGS   = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \		$(if $(CONFIG_TOOLS_DEBUG),-g)HOSTCXXFLAGS = -O2# With the move to GCC 6, we have implicitly upgraded our language# standard to GNU11 (see https://gcc.gnu.org/gcc-5/porting_to.html).# Some Linux distributions (including RHEL7, SLES13, Debian 8) still# have older compilers as their default, so we make it explicit for# these that our host tools are GNU11 (i.e. C11 w/ GNU extensions).CSTD_FLAG := -std=gnu11ifeq ($(HOSTOS),linux)HOSTCFLAGS += $(CSTD_FLAG)endififeq ($(HOSTOS),cygwin)HOSTCFLAGS	+= -ansiendif# Mac OS X / Darwin's C preprocessor is Apple specific.  It# generates numerous errors and warnings.  We want to bypass it# and use GNU C's cpp.	To do this we pass the -traditional-cpp# option to the compiler.  Note that the -traditional-cpp flag# DOES NOT have the same semantics as GNU C's flag, all it does# is invoke the GNU preprocessor in stock ANSI/ISO C fashion.## Apple's linker is similar, thanks to the new 2 stage linking# multiple symbol definitions are treated as errors, hence the# -multiply_defined suppress option to turn off this error.#ifeq ($(HOSTOS),darwin)# get major and minor product version (e.g. '10' and '6' for Snow Leopard)DARWIN_MAJOR_VERSION	= $(shell sw_vers -productVersion | cut -f 1 -d '.')DARWIN_MINOR_VERSION	= $(shell sw_vers -productVersion | cut -f 2 -d '.')os_x_before	= $(shell if [ $(DARWIN_MAJOR_VERSION) -le $(1) -a \	$(DARWIN_MINOR_VERSION) -le $(2) ] ; then echo "$(3)"; else echo "$(4)"; fi ;)# Snow Leopards build environment has no longer restrictions as described aboveHOSTCC       = $(call os_x_before, 10, 5, "cc", "gcc")HOSTCFLAGS  += $(call os_x_before, 10, 4, "-traditional-cpp")HOSTLDFLAGS += $(call os_x_before, 10, 5, "-multiply_defined suppress")# since Lion (10.7) ASLR is on by default, but we use linker generated lists# in some host tools which is a problem then ... so disable ASLR for these# toolsHOSTLDFLAGS += $(call os_x_before, 10, 7, "", "-Xlinker -no_pie")endif# Decide whether to build built-in, modular, or both.# Normally, just do built-in.KBUILD_MODULES :=KBUILD_BUILTIN := 1# If we have only "make modules", don't compile built-in objects.# When we're building modules with modversions, we need to consider# the built-in objects during the descend as well, in order to# make sure the checksums are up to date before we record them.ifeq ($(MAKECMDGOALS),modules)  KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)endif# If we have "make <whatever> modules", compile modules# in addition to whatever we do anyway.# Just "make" or "make all" shall build modules as well# U-Boot does not need modules#ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)#  KBUILD_MODULES := 1#endif#ifeq ($(MAKECMDGOALS),)#  KBUILD_MODULES := 1#endifexport KBUILD_MODULES KBUILD_BUILTINexport KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD# We need some generic definitions (do not try to remake the file).scripts/Kbuild.include: ;include scripts/Kbuild.include# Make variables (CC, etc...)AS		= $(CROSS_COMPILE)as# Always use GNU ldifneq ($(shell $(CROSS_COMPILE)ld.bfd -v 2> /dev/null),)LD		= $(CROSS_COMPILE)ld.bfdelseLD		= $(CROSS_COMPILE)ldendifCC		= $(CROSS_COMPILE)gccCPP		= $(CC) -EAR		= $(CROSS_COMPILE)arNM		= $(CROSS_COMPILE)nmLDR		= $(CROSS_COMPILE)ldrSTRIP		= $(CROSS_COMPILE)stripOBJCOPY		= $(CROSS_COMPILE)objcopyOBJDUMP		= $(CROSS_COMPILE)objdumpLEX		= flexYACC		= bisonAWK		= awkPERL		= perlPYTHON		?= pythonPYTHON2		= python2PYTHON3		= python3DTC		?= $(objtree)/scripts/dtc/dtcCHECK		= sparseCHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \		  -Wbitwise -Wno-return-void -D__CHECK_ENDIAN__ $(CF)KBUILD_CPPFLAGS := -D__KERNEL__ -D__UBOOT__KBUILD_CFLAGS   := -Wall -Wstrict-prototypes \		   -Wno-format-security \		   -fno-builtin -ffreestanding $(CSTD_FLAG)KBUILD_CFLAGS	+= -fshort-wcharKBUILD_AFLAGS   := -D__ASSEMBLY__# Read UBOOTRELEASE from include/config/uboot.release (if it exists)UBOOTRELEASE = $(shell cat include/config/uboot.release 2> /dev/null)UBOOTVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)export VERSION PATCHLEVEL SUBLEVEL UBOOTRELEASE UBOOTVERSIONexport ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIRexport CONFIG_SHELL HOSTCC HOSTCFLAGS HOSTLDFLAGS CROSS_COMPILE AS LD CCexport CPP AR NM LDR STRIP OBJCOPY OBJDUMPexport MAKE LEX YACC AWK PERL PYTHON PYTHON2 PYTHON3export HOSTCXX HOSTCXXFLAGS CHECK CHECKFLAGS DTC DTC_FLAGSexport KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE OBJCOPYFLAGS LDFLAGSexport KBUILD_CFLAGS KBUILD_AFLAGS# When compiling out-of-tree modules, put MODVERDIR in the module# tree rather than in the kernel tree. The kernel tree might# even be read-only.export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions# Files to ignore in find ... statementsexport RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o    \			  -name CVS -o -name .pc -o -name .hg -o -name .git \) \			  -prune -oexport RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \			 --exclude CVS --exclude .pc --exclude .hg --exclude .git# ===========================================================================# Rules shared between *config targets and build targets# Basic helpers built in scripts/PHONY += scripts_basicscripts_basic:	$(Q)$(MAKE) $(build)=scripts/basic	$(Q)rm -f .tmp_quiet_recordmcount# To avoid any implicit rule to kick in, define an empty command.scripts/basic/%: scripts_basic ;PHONY += outputmakefile# outputmakefile generates a Makefile in the output directory, if using a# separate output directory. This allows convenient use of make in the# output directory.outputmakefile:ifneq ($(KBUILD_SRC),)	$(Q)ln -fsn $(srctree) source	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \	    $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)endif# To make sure we do not include .config for any of the *config targets# catch them early, and hand them over to scripts/kconfig/Makefile# It is allowed to specify more targets when calling make, including# mixing *config targets and build targets.# For example 'make oldconfig all'.# Detect when mixed targets is specified, and make a second invocation# of make so .config is not included in this case either (for *config).version_h := include/generated/version_autogenerated.htimestamp_h := include/generated/timestamp_autogenerated.hdefaultenv_h := include/generated/defaultenv_autogenerated.hno-dot-config-targets := clean clobber mrproper distclean \			 help %docs check% coccicheck \			 ubootversion backup testsconfig-targets := 0mixed-targets  := 0dot-config     := 1ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)	ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)		dot-config := 0	endifendififeq ($(KBUILD_EXTMOD),)        ifneq ($(filter config %config,$(MAKECMDGOALS)),)                config-targets := 1                ifneq ($(words $(MAKECMDGOALS)),1)                        mixed-targets := 1                endif        endifendififeq ($(mixed-targets),1)# ===========================================================================# We're called with mixed targets (*config and build targets).# Handle them one by one.PHONY += $(MAKECMDGOALS) __build_one_by_one$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one	@:__build_one_by_one:	$(Q)set -e; \	for i in $(MAKECMDGOALS); do \		$(MAKE) -f $(srctree)/Makefile $$i; \	doneelseifeq ($(config-targets),1)# ===========================================================================# *config targets only - make sure prerequisites are updated, and descend# in scripts/kconfig to make the *config targetKBUILD_DEFCONFIG := sandbox_defconfigexport KBUILD_DEFCONFIG KBUILD_KCONFIGconfig: scripts_basic outputmakefile FORCE	$(Q)$(MAKE) $(build)=scripts/kconfig $@%config: scripts_basic outputmakefile FORCE	$(Q)$(MAKE) $(build)=scripts/kconfig $@else# ===========================================================================# Build targets only - this includes vmlinux, arch specific targets, clean# targets and others. In general all targets except *config targets.# Additional helpers built in scripts/# Carefully list dependencies so we do not try to build scripts twice# in parallelPHONY += scriptsscripts: scripts_basic include/config/auto.conf	$(Q)$(MAKE) $(build)=$(@)ifeq ($(dot-config),1)# Read in config-include include/config/auto.conf# Read in dependencies to all Kconfig* files, make sure to run# oldconfig if changes are detected.-include include/config/auto.conf.cmd# To avoid any implicit rule to kick in, define an empty command$(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;# If .config is newer than include/config/auto.conf, someone tinkered# with it and forgot to run make oldconfig.# if auto.conf.cmd is missing then we are probably in a cleaned tree so# we execute the config step to be sure to catch updated Kconfig filesinclude/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig	@# If the following part fails, include/config/auto.conf should be	@# deleted so "make silentoldconfig" will be re-run on the next build.	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf || \		{ rm -f include/config/auto.conf; false; }	@# include/config.h has been updated after "make silentoldconfig".	@# We need to touch include/config/auto.conf so it gets newer	@# than include/config.h.	@# Otherwise, 'make silentoldconfig' would be invoked twice.	$(Q)touch include/config/auto.confu-boot.cfg spl/u-boot.cfg tpl/u-boot.cfg: include/config.h FORCE	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf $(@)-include include/autoconf.mk-include include/autoconf.mk.dep# We want to include arch/$(ARCH)/config.mk only when include/config/auto.conf# is up-to-date. When we switch to a different board configuration, old CONFIG# macros are still remaining in include/config/auto.conf. Without the following# gimmick, wrong config.mk would be included leading nasty warnings/errors.ifneq ($(wildcard $(KCONFIG_CONFIG)),)ifneq ($(wildcard include/config/auto.conf),)autoconf_is_old := $(shell find . -path ./$(KCONFIG_CONFIG) -newer \						include/config/auto.conf)ifeq ($(autoconf_is_old),)include config.mkinclude arch/$(ARCH)/Makefileendifendifendif# These are set by the arch-specific config.mk. Make sure they are exported# so they can be used when building an EFI application.export EFI_LDS		# Filename of EFI link script in arch/$(ARCH)/libexport EFI_CRT0		# Filename of EFI CRT0 in arch/$(ARCH)/libexport EFI_RELOC	# Filename of EFU relocation code in arch/$(ARCH)/libexport CFLAGS_EFI	# Compiler flags to add when building EFI appexport CFLAGS_NON_EFI	# Compiler flags to remove when building EFI appexport EFI_TARGET	# binutils target if EFI is natively supported# If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use# that (or fail if absent).  Otherwise, search for a linker script in a# standard location.ifndef LDSCRIPT	#LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot.lds.debug	ifdef CONFIG_SYS_LDSCRIPT		# need to strip off double quotes		LDSCRIPT := $(srctree)/$(CONFIG_SYS_LDSCRIPT:"%"=%)	endifendif# If there is no specified link script, we look in a number of places for itifndef LDSCRIPT	ifeq ($(wildcard $(LDSCRIPT)),)		LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot.lds	endif	ifeq ($(wildcard $(LDSCRIPT)),)		LDSCRIPT := $(srctree)/$(CPUDIR)/u-boot.lds	endif	ifeq ($(wildcard $(LDSCRIPT)),)		LDSCRIPT := $(srctree)/arch/$(ARCH)/cpu/u-boot.lds	endifendifelse# Dummy target needed, because used as prerequisiteinclude/config/auto.conf: ;endif # $(dot-config)## Xtensa linker script cannot be preprocessed with -ansi because of# preprocessor operations on strings that don't make C identifiers.#ifeq ($(CONFIG_XTENSA),)LDPPFLAGS	+= -ansiendififdef CONFIG_CC_OPTIMIZE_FOR_SIZEKBUILD_CFLAGS	+= -OselseKBUILD_CFLAGS	+= -O2endifKBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks)# change __FILE__ to the relative path from the srctreeKBUILD_CFLAGS	+= $(call cc-option,-fmacro-prefix-map=$(srctree)/=)KBUILD_CFLAGS	+= -g# $(KBUILD_AFLAGS) sets -g, which causes gcc to pass a suitable -g<format># option to the assembler.KBUILD_AFLAGS	+= -g# Report stack usage if supported# ARC tools based on GCC 7.1 has an issue with stack usage# with naked functions, see commit message for more detailsifndef CONFIG_ARCifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-stack-usage.sh $(CC)),y)	KBUILD_CFLAGS += -fstack-usageendifendifKBUILD_CFLAGS += $(call cc-option,-Wno-format-nonliteral)ifeq ($(cc-name),clang)KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)KBUILD_CFLAGS += $(call cc-disable-warning, gnu)KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)endif# turn jbsr into jsr for m68kifeq ($(ARCH),m68k)ifeq ($(findstring 3.4,$(shell $(CC) --version)),3.4)KBUILD_AFLAGS += -Wa,-gstabs,-Sendifendif# Prohibit date/time macros, which would make the build non-deterministicKBUILD_CFLAGS   += $(call cc-option,-Werror=date-time)include scripts/Makefile.extrawarn# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignmentsKBUILD_CPPFLAGS += $(KCPPFLAGS)KBUILD_AFLAGS += $(KAFLAGS)KBUILD_CFLAGS += $(KCFLAGS)# Use UBOOTINCLUDE when you must reference the include/ directory.# Needed to be compatible with the O= optionUBOOTINCLUDE    := \		-Iinclude \		$(if $(KBUILD_SRC), -I$(srctree)/include) \		$(if $(CONFIG_$(SPL_)SYS_THUMB_BUILD), \			$(if $(CONFIG_HAS_THUMB2),, \				-I$(srctree)/arch/$(ARCH)/thumb1/include),) \		-I$(srctree)/arch/$(ARCH)/include \		-include $(srctree)/include/linux/kconfig.hNOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)CHECKFLAGS     += $(NOSTDINC_FLAGS)# FIX MEcpp_flags := $(KBUILD_CPPFLAGS) $(PLATFORM_CPPFLAGS) $(UBOOTINCLUDE) \							$(NOSTDINC_FLAGS)c_flags := $(KBUILD_CFLAGS) $(cpp_flags)########################################################################## U-Boot objects....order is important (i.e. start must be first)HAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(srctree)/board/$(VENDOR)/common/Makefile),y,n)libs-y += lib/libs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/libs-$(CONFIG_OF_EMBED) += dts/libs-y += fs/libs-y += net/libs-y += disk/libs-y += drivers/libs-y += drivers/dma/libs-y += drivers/gpio/libs-y += drivers/i2c/libs-y += drivers/mtd/libs-$(CONFIG_CMD_NAND) += drivers/mtd/nand/libs-y += drivers/mtd/onenand/libs-$(CONFIG_CMD_UBI) += drivers/mtd/ubi/libs-y += drivers/mtd/spi/libs-y += drivers/net/libs-y += drivers/net/phy/libs-y += drivers/pci/libs-y += drivers/power/ \	drivers/power/domain/ \	drivers/power/fuel_gauge/ \	drivers/power/mfd/ \	drivers/power/pmic/ \	drivers/power/battery/ \	drivers/power/regulator/libs-y += drivers/spi/libs-$(CONFIG_FMAN_ENET) += drivers/net/fm/libs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/libs-$(CONFIG_SYS_FSL_MMDC) += drivers/ddr/fsl/libs-$(CONFIG_ALTERA_SDRAM) += drivers/ddr/altera/libs-y += drivers/serial/libs-y += drivers/usb/dwc3/libs-y += drivers/usb/common/libs-y += drivers/usb/emul/libs-y += drivers/usb/eth/libs-y += drivers/usb/gadget/libs-y += drivers/usb/gadget/udc/libs-y += drivers/usb/host/libs-y += drivers/usb/musb/libs-y += drivers/usb/musb-new/libs-y += drivers/usb/phy/libs-y += drivers/usb/ulpi/libs-y += cmd/libs-y += common/libs-y += env/libs-$(CONFIG_API) += api/libs-$(CONFIG_HAS_POST) += post/libs-y += test/libs-y += test/dm/libs-$(CONFIG_UT_ENV) += test/env/libs-$(CONFIG_UT_OVERLAY) += test/overlay/libs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/)libs-y := $(sort $(libs-y))u-boot-dirs	:= $(patsubst %/,%,$(filter %/, $(libs-y))) tools examplesu-boot-alldirs	:= $(sort $(u-boot-dirs) $(patsubst %/,%,$(filter %/, $(libs-))))libs-y		:= $(patsubst %/, %/built-in.o, $(libs-y))u-boot-init := $(head-y)u-boot-main := $(libs-y)# Add GCC libifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y)PLATFORM_LIBGCC = arch/$(ARCH)/lib/lib.aelsePLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(c_flags) -print-libgcc-file-name`) -lgccendifPLATFORM_LIBS += $(PLATFORM_LIBGCC)ifdef CONFIG_CC_COVERAGEKBUILD_CFLAGS += --coveragePLATFORM_LIBGCC += -lgcovendifexport PLATFORM_LIBSexport PLATFORM_LIBGCC# Special flags for CPP when processing the linker script.# Pass the version down so we can handle backwards compatibility# on the fly.LDPPFLAGS += \	-include $(srctree)/include/u-boot/u-boot.lds.h \	-DCPUDIR=$(CPUDIR) \	$(shell $(LD) --version | \	  sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p')##################################################################################################################################################ifneq ($(CONFIG_BOARD_SIZE_LIMIT),)BOARD_SIZE_CHECK = \	@actual=`wc -c $@ | awk '{print $$1}'`; \	limit=`printf "%d" $(CONFIG_BOARD_SIZE_LIMIT)`; \	if test $$actual -gt $$limit; then \		echo "$@ exceeds file size limit:" >&2 ; \		echo "  limit:  $$limit bytes" >&2 ; \		echo "  actual: $$actual bytes" >&2 ; \		echo "  excess: $$((actual - limit)) bytes" >&2; \		exit 1; \	fielseBOARD_SIZE_CHECK =endif# Statically apply RELA-style relocations (currently arm64 only)# This is useful for arm64 where static relocation needs to be performed on# the raw binary, but certain simulators only accept an ELF file (but don't# do the relocation).ifneq ($(CONFIG_STATIC_RELA),)# $(1) is u-boot ELF, $(2) is u-boot bin, $(3) is text baseDO_STATIC_RELA = \	start=$$($(NM) $(1) | grep __rel_dyn_start | cut -f 1 -d ' '); \	end=$$($(NM) $(1) | grep __rel_dyn_end | cut -f 1 -d ' '); \	tools/relocate-rela $(2) $(3) $$start $$endelseDO_STATIC_RELA =endif# Always append ALL so that arch config.mk's can add custom onesALL-y += u-boot.srec u-boot.bin u-boot.sym System.map binary_size_checkALL-$(CONFIG_ONENAND_U_BOOT) += u-boot-onenand.binifeq ($(CONFIG_SPL_FSL_PBL),y)ALL-$(CONFIG_RAMBOOT_PBL) += u-boot-with-spl-pbl.binelseifneq ($(CONFIG_SECURE_BOOT), y)# For Secure Boot The Image needs to be signed and Header must also# be included. So The image has to be built explicitlyALL-$(CONFIG_RAMBOOT_PBL) += u-boot.pblendifendifALL-$(CONFIG_SPL) += spl/u-boot-spl.binifeq ($(CONFIG_MX6)$(CONFIG_SECURE_BOOT), yy)ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.imgelseifeq ($(CONFIG_MX7)$(CONFIG_SECURE_BOOT), yy)ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.imgelseALL-$(CONFIG_SPL_FRAMEWORK) += u-boot.imgendifendifALL-$(CONFIG_TPL) += tpl/u-boot-tpl.binALL-$(CONFIG_OF_SEPARATE) += u-boot.dtbifeq ($(CONFIG_SPL_FRAMEWORK),y)ALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb.imgendifALL-$(CONFIG_OF_HOSTFILE) += u-boot.dtbifneq ($(CONFIG_SPL_TARGET),)ALL-$(CONFIG_SPL) += $(CONFIG_SPL_TARGET:"%"=%)endifALL-$(CONFIG_REMAKE_ELF) += u-boot.elfALL-$(CONFIG_EFI_APP) += u-boot-app.efiALL-$(CONFIG_EFI_STUB) += u-boot-payload.efiifneq ($(BUILD_ROM)$(CONFIG_BUILD_ROM),)ALL-$(CONFIG_X86_RESET_VECTOR) += u-boot.romendif# Build a combined spl + u-boot image for sunxiifeq ($(CONFIG_ARCH_SUNXI)$(CONFIG_SPL),yy)ALL-y += u-boot-sunxi-with-spl.binendif# enable combined SPL/u-boot/dtb rules for tegraifeq ($(CONFIG_TEGRA)$(CONFIG_SPL),yy)ALL-y += u-boot-tegra.bin u-boot-nodtb-tegra.binALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb-tegra.binendif# Add optional build target if defined in board/cpu/soc headersifneq ($(CONFIG_BUILD_TARGET),)ALL-y += $(CONFIG_BUILD_TARGET:"%"=%)endififneq ($(CONFIG_SYS_INIT_SP_BSS_OFFSET),)ALL-y += init_sp_bss_offset_checkendifLDFLAGS_u-boot += $(LDFLAGS_FINAL)# Avoid 'Not enough room for program headers' error on binutils 2.28 onwards.LDFLAGS_u-boot += $(call ld-option, --no-dynamic-linker)ifeq ($(CONFIG_ARC)$(CONFIG_NIOS2)$(CONFIG_X86)$(CONFIG_XTENSA),)LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)endif# Normally we fill empty space with 0xffquiet_cmd_objcopy = OBJCOPY $@cmd_objcopy = $(OBJCOPY) --gap-fill=0xff $(OBJCOPYFLAGS) \	$(OBJCOPYFLAGS_$(@F)) $< $@# Provide a version which does not do this, for use by EFIquiet_cmd_zobjcopy = OBJCOPY $@cmd_zobjcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@quiet_cmd_efipayload = OBJCOPY $@cmd_efipayload = $(OBJCOPY) -I binary -O $(EFIPAYLOAD_BFDTARGET) -B $(EFIPAYLOAD_BFDARCH) $< $@MKIMAGEOUTPUT ?= /dev/nullquiet_cmd_mkimage = MKIMAGE $@cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \	>$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))quiet_cmd_mkfitimage = MKIMAGE $@cmd_mkfitimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -f $(U_BOOT_ITS) -E $@ \	>$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))quiet_cmd_cat = CAT     $@cmd_cat = cat $(filter-out $(PHONY), $^) > $@append = cat $(filter-out $< $(PHONY), $^) >> $@quiet_cmd_pad_cat = CAT     $@cmd_pad_cat = $(cmd_objcopy) && $(append) || rm -f $@cfg: u-boot.cfgquiet_cmd_cfgcheck = CFGCHK  $2cmd_cfgcheck = $(srctree)/scripts/check-config.sh $2 \		$(srctree)/scripts/config_whitelist.txt $(srctree)all:		$(ALL-y) cfgifeq ($(CONFIG_DM_I2C_COMPAT)$(CONFIG_SANDBOX),y)	@echo "===================== WARNING ======================"	@echo "This board uses CONFIG_DM_I2C_COMPAT. Please remove"	@echo "(possibly in a subsequent patch in your series)"	@echo "before sending patches to the mailing list."	@echo "===================================================="endif	@# Check that this build does not use CONFIG options that we do not	@# know about unless they are in Kconfig. All the existing CONFIG	@# options are whitelisted, so new ones should not be added.	$(call cmd,cfgcheck,u-boot.cfg)PHONY += dtbsdtbs: dts/dt.dtb	@:dts/dt.dtb: u-boot	$(Q)$(MAKE) $(build)=dts dtbsquiet_cmd_copy = COPY    $@      cmd_copy = cp $< $@ifeq ($(CONFIG_MULTI_DTB_FIT),y)fit-dtb.blob: dts/dt.dtb FORCE	$(call if_changed,mkimage)MKIMAGEFLAGS_fit-dtb.blob = -f auto -A $(ARCH) -T firmware -C none -O u-boot \	-a 0 -e 0 -E \	$(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) -d /dev/nullu-boot-fit-dtb.bin: u-boot-nodtb.bin fit-dtb.blob	$(call if_changed,cat)u-boot.bin: u-boot-fit-dtb.bin FORCE	$(call if_changed,copy)else ifeq ($(CONFIG_OF_SEPARATE),y)u-boot-dtb.bin: u-boot-nodtb.bin dts/dt.dtb FORCE	$(call if_changed,cat)u-boot.bin: u-boot-dtb.bin FORCE	$(call if_changed,copy)elseu-boot.bin: u-boot-nodtb.bin FORCE	$(call if_changed,copy)endif%.imx: %.bin	$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@%.vyb: %.imx	$(Q)$(MAKE) $(build)=arch/arm/cpu/armv7/vf610 $@quiet_cmd_copy = COPY    $@      cmd_copy = cp $< $@u-boot.dtb: dts/dt.dtb	$(call cmd,copy)OBJCOPYFLAGS_u-boot.hex := -O ihexOBJCOPYFLAGS_u-boot.srec := -O srecu-boot.hex u-boot.srec: u-boot FORCE	$(call if_changed,objcopy)OBJCOPYFLAGS_u-boot-elf.srec := $(OBJCOPYFLAGS_u-boot.srec)u-boot-elf.srec: u-boot.elf FORCE	$(call if_changed,objcopy)OBJCOPYFLAGS_u-boot-spl.srec = $(OBJCOPYFLAGS_u-boot.srec)spl/u-boot-spl.srec: spl/u-boot-spl FORCE	$(call if_changed,objcopy)OBJCOPYFLAGS_u-boot-nodtb.bin := -O binary \		$(if $(CONFIG_X86_16BIT_INIT),-R .start16 -R .resetvec)binary_size_check: u-boot-nodtb.bin FORCE	@file_size=$(shell wc -c u-boot-nodtb.bin | awk '{print $$1}') ; \	map_size=$(shell cat u-boot.map | \		awk '/_image_copy_start/ {start = $$1} /_image_binary_end/ {end = $$1} END {if (start != "" && end != "") print "ibase=16; " toupper(end) " - " toupper(start)}' \		| sed 's/0X//g' \		| bc); \	if [ "" != "$$map_size" ]; then \		if test $$map_size -ne $$file_size; then \			echo "u-boot.map shows a binary size of $$map_size" >&2 ; \			echo "  but u-boot-nodtb.bin shows $$file_size" >&2 ; \			exit 1; \		fi \	fiifneq ($(CONFIG_SYS_INIT_SP_BSS_OFFSET),)ifneq ($(CONFIG_SYS_MALLOC_F_LEN),)subtract_sys_malloc_f_len = space=$$(($${space} - $(CONFIG_SYS_MALLOC_F_LEN)))elsesubtract_sys_malloc_f_len = trueendif# The 1/4 margin below is somewhat arbitrary. The likely initial SP usage is# so low that the DTB could probably use 90%+ of the available space, for# current values of CONFIG_SYS_INIT_SP_BSS_OFFSET at least. However, let's be# safe for now and tweak this later if space becomes tight.# A rejected alternative would be to check that some absolute minimum stack# space was available. However, since CONFIG_SYS_INIT_SP_BSS_OFFSET is# deliberately build-specific, to take account of build-to-build stack usage# differences due to different feature sets, there is no common absolute value# to check against.init_sp_bss_offset_check: u-boot.dtb FORCE	@dtb_size=$(shell wc -c u-boot.dtb | awk '{print $$1}') ; \	space=$(CONFIG_SYS_INIT_SP_BSS_OFFSET) ; \	$(subtract_sys_malloc_f_len) ; \	quarter_space=$$(($${space} / 4)) ; \	if [ $${dtb_size} -gt $${quarter_space} ]; then \		echo "u-boot.dtb is larger than 1 quarter of " >&2 ; \		echo "(CONFIG_SYS_INIT_SP_BSS_OFFSET - CONFIG_SYS_MALLOC_F_LEN)" >&2 ; \		exit 1 ; \	fiendifu-boot-nodtb.bin: u-boot FORCE	$(call if_changed,objcopy)	$(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))	$(BOARD_SIZE_CHECK)u-boot.ldr:	u-boot		$(CREATE_LDR_ENV)		$(LDR) -T $(CONFIG_CPU) -c $@ $< $(LDR_FLAGS)		$(BOARD_SIZE_CHECK)# binman# ---------------------------------------------------------------------------quiet_cmd_binman = BINMAN  $@cmd_binman = $(srctree)/tools/binman/binman -d u-boot.dtb -O . \		-I . -I $(srctree)/board/$(BOARDDIR) $<OBJCOPYFLAGS_u-boot.ldr.hex := -I binary -O ihexOBJCOPYFLAGS_u-boot.ldr.srec := -I binary -O srecu-boot.ldr.hex u-boot.ldr.srec: u-boot.ldr FORCE	$(call if_changed,objcopy)## U-Boot entry point, needed for booting of full-blown U-Boot# from the SPL U-Boot version.#ifndef CONFIG_SYS_UBOOT_STARTCONFIG_SYS_UBOOT_START := 0endif# Create a file containing the configuration options the image was built withquiet_cmd_cpp_cfg = CFG     $@cmd_cpp_cfg = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) -ansi \	-DDO_DEPS_ONLY -D__ASSEMBLY__ -x assembler-with-cpp -P -dM -E -o $@ $<# Boards with more complex image requirments can provide an .its source file# or a generator scriptifneq ($(CONFIG_SPL_FIT_SOURCE),"")U_BOOT_ITS = $(subst ",,$(CONFIG_SPL_FIT_SOURCE))elseifneq ($(CONFIG_SPL_FIT_GENERATOR),"")U_BOOT_ITS := u-boot.its$(U_BOOT_ITS): FORCE	$(srctree)/$(CONFIG_SPL_FIT_GENERATOR) \	$(patsubst %,arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) > $@endifendififdef CONFIG_SPL_LOAD_FITMKIMAGEFLAGS_u-boot.img = -f auto -A $(ARCH) -T firmware -C none -O u-boot \	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \	-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board" -E \	$(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST)))elseMKIMAGEFLAGS_u-boot.img = -A $(ARCH) -T firmware -C none -O u-boot \	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \	-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"MKIMAGEFLAGS_u-boot-ivt.img = -A $(ARCH) -T firmware_ivt -C none -O u-boot \	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \	-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"u-boot-ivt.img: MKIMAGEOUTPUT = u-boot-ivt.img.logCLEAN_FILES += u-boot-ivt.img.log u-boot-dtb.imx.log SPL.log u-boot.imx.logendifMKIMAGEFLAGS_u-boot-dtb.img = $(MKIMAGEFLAGS_u-boot.img)MKIMAGEFLAGS_u-boot.kwb = -n $(srctree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%) \	-T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE)MKIMAGEFLAGS_u-boot-spl.kwb = -n $(srctree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%) \	-T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) \	$(if $(KEYDIR),-k $(KEYDIR))MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \		-R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimageu-boot-dtb.img u-boot.img u-boot.kwb u-boot.pbl u-boot-ivt.img: \		$(if $(CONFIG_SPL_LOAD_FIT),u-boot-nodtb.bin dts/dt.dtb,u-boot.bin) FORCE	$(call if_changed,mkimage)u-boot.itb: u-boot-nodtb.bin dts/dt.dtb $(U_BOOT_ITS) FORCE	$(call if_changed,mkfitimage)	$(BOARD_SIZE_CHECK)u-boot-spl.kwb: u-boot.img spl/u-boot-spl.bin FORCE	$(call if_changed,mkimage)u-boot.sha1:	u-boot.bin		tools/ubsha1 u-boot.binu-boot.dis:	u-boot		$(OBJDUMP) -d $< > $@ifdef CONFIG_TPLSPL_PAYLOAD := tpl/u-boot-with-tpl.binelseSPL_PAYLOAD := u-boot.binendifOBJCOPYFLAGS_u-boot-with-spl.bin = -I binary -O binary \				   --pad-to=$(CONFIG_SPL_PAD_TO)u-boot-with-spl.bin: spl/u-boot-spl.bin $(SPL_PAYLOAD) FORCE	$(call if_changed,pad_cat)MKIMAGEFLAGS_lpc32xx-spl.img = -T lpc32xximage -a $(CONFIG_SPL_TEXT_BASE)lpc32xx-spl.img: spl/u-boot-spl.bin FORCE	$(call if_changed,mkimage)OBJCOPYFLAGS_lpc32xx-boot-0.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)lpc32xx-boot-0.bin: lpc32xx-spl.img FORCE	$(call if_changed,objcopy)OBJCOPYFLAGS_lpc32xx-boot-1.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)lpc32xx-boot-1.bin: lpc32xx-spl.img FORCE	$(call if_changed,objcopy)lpc32xx-full.bin: lpc32xx-boot-0.bin lpc32xx-boot-1.bin u-boot.img FORCE	$(call if_changed,cat)CLEAN_FILES += lpc32xx-*OBJCOPYFLAGS_u-boot-with-tpl.bin = -I binary -O binary \				   --pad-to=$(CONFIG_TPL_PAD_TO)tpl/u-boot-with-tpl.bin: tpl/u-boot-tpl.bin u-boot.bin FORCE	$(call if_changed,pad_cat)SPL: spl/u-boot-spl.bin FORCE	$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@u-boot-with-spl.imx u-boot-with-nand-spl.imx: SPL u-boot.bin FORCE	$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@MKIMAGEFLAGS_u-boot.ubl = -n $(UBL_CONFIG) -T ublimage -e $(CONFIG_SYS_TEXT_BASE)u-boot.ubl: u-boot-with-spl.bin FORCE	$(call if_changed,mkimage)MKIMAGEFLAGS_u-boot-spl.ais = -s -n $(if $(CONFIG_AIS_CONFIG_FILE), \	$(srctree)/$(CONFIG_AIS_CONFIG_FILE:"%"=%),"/dev/null") \	-T aisimage -e $(CONFIG_SPL_TEXT_BASE)spl/u-boot-spl.ais: spl/u-boot-spl.bin FORCE	$(call if_changed,mkimage)OBJCOPYFLAGS_u-boot.ais = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)u-boot.ais: spl/u-boot-spl.ais u-boot.img FORCE	$(call if_changed,pad_cat)u-boot-signed.sb: u-boot.bin spl/u-boot-spl.bin	$(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs u-boot-signed.sbu-boot.sb: u-boot.bin spl/u-boot-spl.bin	$(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs u-boot.sb# On x600 (SPEAr600) U-Boot is appended to U-Boot SPL.# Both images are created using mkimage (crc etc), so that the ROM# bootloader can check its integrity. Padding needs to be done to the# SPL image (with mkimage header) and not the binary. Otherwise the resulting image# which is loaded/copied by the ROM bootloader to SRAM doesn't fit.# The resulting image containing both U-Boot images is called u-boot.sprMKIMAGEFLAGS_u-boot-spl.img = -A $(ARCH) -T firmware -C none \	-a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n XLOADERspl/u-boot-spl.img: spl/u-boot-spl.bin FORCE	$(call if_changed,mkimage)OBJCOPYFLAGS_u-boot.spr = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \			  --gap-fill=0xffu-boot.spr: spl/u-boot-spl.img u-boot.img FORCE	$(call if_changed,pad_cat)ifneq ($(CONFIG_ARCH_SOCFPGA),)quiet_cmd_socboot = SOCBOOT $@cmd_socboot = cat	spl/u-boot-spl.sfp spl/u-boot-spl.sfp	\			spl/u-boot-spl.sfp spl/u-boot-spl.sfp	\			u-boot.img > $@ || rm -f $@u-boot-with-spl.sfp: spl/u-boot-spl.sfp u-boot.img FORCE	$(call if_changed,socboot)endif# x86 uses a large ROM. We fill it with 0xff, put the 16-bit stuff (including# reset vector) at the top, Intel ME descriptor at the bottom, and U-Boot in# the middle. This is handled by binman based on an image description in the# board's device tree.ifneq ($(CONFIG_X86_RESET_VECTOR),)rom: u-boot.rom FORCErefcode.bin: $(srctree)/board/$(BOARDDIR)/refcode.bin FORCE	$(call if_changed,copy)quiet_cmd_ldr = LD      $@cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \	       $(filter-out FORCE,$^) -o $@u-boot.rom: u-boot-x86-16bit.bin u-boot.bin \		$(if $(CONFIG_SPL_X86_16BIT_INIT),spl/u-boot-spl.bin) \		$(if $(CONFIG_HAVE_REFCODE),refcode.bin) FORCE	$(call if_changed,binman)OBJCOPYFLAGS_u-boot-x86-16bit.bin := -O binary -j .start16 -j .resetvecu-boot-x86-16bit.bin: u-boot FORCE	$(call if_changed,objcopy)endififneq ($(CONFIG_ARCH_SUNXI),)ifeq ($(CONFIG_ARM64),)u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.img u-boot.dtb FORCE	$(call if_changed,binman)elseu-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.itb FORCE	$(call if_changed,cat)endifendififneq ($(CONFIG_TEGRA),)ifneq ($(CONFIG_BINMAN),)u-boot-dtb-tegra.bin u-boot-tegra.bin u-boot-nodtb-tegra.bin: \		spl/u-boot-spl u-boot.bin FORCE	$(call if_changed,binman)elseOBJCOPYFLAGS_u-boot-nodtb-tegra.bin = -O binary --pad-to=$(CONFIG_SYS_TEXT_BASE)u-boot-nodtb-tegra.bin: spl/u-boot-spl u-boot-nodtb.bin FORCE	$(call if_changed,pad_cat)OBJCOPYFLAGS_u-boot-tegra.bin = -O binary --pad-to=$(CONFIG_SYS_TEXT_BASE)u-boot-tegra.bin: spl/u-boot-spl u-boot.bin FORCE	$(call if_changed,pad_cat)u-boot-dtb-tegra.bin: u-boot-tegra.bin FORCE	$(call if_changed,copy)endif  # binmanendifOBJCOPYFLAGS_u-boot-app.efi := $(OBJCOPYFLAGS_EFI)u-boot-app.efi: u-boot FORCE	$(call if_changed,zobjcopy)u-boot.bin.o: u-boot.bin FORCE	$(call if_changed,efipayload)u-boot-payload.lds: $(LDSCRIPT_EFI) FORCE	$(call if_changed_dep,cpp_lds)# Rule to link the EFI payload which contains a stub and a U-Boot binaryquiet_cmd_u-boot_payload ?= LD      $@      cmd_u-boot_payload ?= $(LD) $(LDFLAGS_EFI_PAYLOAD) -o $@ \      -T u-boot-payload.lds arch/x86/cpu/call32.o \      lib/efi/efi.o lib/efi/efi_stub.o u-boot.bin.o \      $(addprefix arch/$(ARCH)/lib/,$(EFISTUB))u-boot-payload: u-boot.bin.o u-boot-payload.lds FORCE	$(call if_changed,u-boot_payload)OBJCOPYFLAGS_u-boot-payload.efi := $(OBJCOPYFLAGS_EFI)u-boot-payload.efi: u-boot-payload FORCE	$(call if_changed,zobjcopy)u-boot-img.bin: spl/u-boot-spl.bin u-boot.img FORCE	$(call if_changed,cat)#Add a target to create boot binary having SPL binary in PBI format#concatenated with u-boot binary. It is need by PowerPC SoC having#internal SRAM <= 512KB.MKIMAGEFLAGS_u-boot-spl.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \		-R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage \		-A $(ARCH) -a $(CONFIG_SPL_TEXT_BASE)spl/u-boot-spl.pbl: spl/u-boot-spl.bin FORCE	$(call if_changed,mkimage)ifeq ($(ARCH),arm)UBOOT_BINLOAD := u-boot.imgelseUBOOT_BINLOAD := u-boot.binendifOBJCOPYFLAGS_u-boot-with-spl-pbl.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \			  --gap-fill=0xffu-boot-with-spl-pbl.bin: spl/u-boot-spl.pbl $(UBOOT_BINLOAD) FORCE	$(call if_changed,pad_cat)# PPC4xx needs the SPL at the end of the image, since the reset vector# is located at 0xfffffffc. So we can't use the "u-boot-img.bin" target# and need to introduce a new build target with the full blown U-Boot# at the start padded up to the start of the SPL image. And then concat# the SPL image to the end.OBJCOPYFLAGS_u-boot-img-spl-at-end.bin := -I binary -O binary \	--pad-to=$(CONFIG_UBOOT_PAD_TO) --gap-fill=0xffu-boot-img-spl-at-end.bin: u-boot.img spl/u-boot-spl.bin FORCE	$(call if_changed,pad_cat)# Create a new ELF from a raw binary file.ifndef PLATFORM_ELFENTRY  PLATFORM_ELFENTRY = "_start"endifquiet_cmd_u-boot-elf ?= LD      $@	cmd_u-boot-elf ?= $(LD) u-boot-elf.o -o $@ \	--defsym=$(PLATFORM_ELFENTRY)=$(CONFIG_SYS_TEXT_BASE) \	-Ttext=$(CONFIG_SYS_TEXT_BASE)u-boot.elf: u-boot.bin	$(Q)$(OBJCOPY) -I binary $(PLATFORM_ELFFLAGS) $< u-boot-elf.o	$(call if_changed,u-boot-elf)ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(ARCH)/Makefile.postlink)# Rule to link u-boot# May be overridden by arch/$(ARCH)/config.mkquiet_cmd_u-boot__ ?= LD      $@      cmd_u-boot__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_u-boot) -o $@ \      -T u-boot.lds $(u-boot-init)                             \      --start-group $(u-boot-main) --end-group                 \      $(PLATFORM_LIBS) -Map u-boot.map;                        \      $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)quiet_cmd_smap = GEN     common/system_map.ocmd_smap = \	smap=`$(call SYSTEM_MAP,u-boot) | \		awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \	$(CC) $(c_flags) -DSYSTEM_MAP="\"$${smap}\"" \		-c $(srctree)/common/system_map.c -o common/system_map.ou-boot:	$(u-boot-init) $(u-boot-main) u-boot.lds FORCE	+$(call if_changed,u-boot__)ifeq ($(CONFIG_KALLSYMS),y)	$(call cmd,smap)	$(call cmd,u-boot__) common/system_map.oendififeq ($(CONFIG_RISCV),y)	@tools/prelink-riscv $@ 0endifquiet_cmd_sym ?= SYM     $@      cmd_sym ?= $(OBJDUMP) -t $< > $@u-boot.sym: u-boot FORCE	$(call if_changed,sym)# The actual objects are generated when descending,# make sure no implicit rule kicks in$(sort $(u-boot-init) $(u-boot-main)): $(u-boot-dirs) ;# Handle descending into subdirectories listed in $(vmlinux-dirs)# Preset locale variables to speed up the build process. Limit locale# tweaks to this spot to avoid wrong language settings when running# make menuconfig etc.# Error messages still appears in the original languagePHONY += $(u-boot-dirs)$(u-boot-dirs): prepare scripts	$(Q)$(MAKE) $(build)=$@tools: prepare# The "tools" are needed early$(filter-out tools, $(u-boot-dirs)): tools# The "examples" conditionally depend on U-Boot (say, when USE_PRIVATE_LIBGCC# is "yes"), so compile examples after U-Boot is compiled.examples: $(filter-out examples, $(u-boot-dirs))define filechk_uboot.release	echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"endef# Store (new) UBOOTRELEASE string in include/config/uboot.releaseinclude/config/uboot.release: include/config/auto.conf FORCE	$(call filechk,uboot.release)# Things we need to do before we recursively start building the kernel# or the modules are listed in "prepare".# A multi level approach is used. prepareN is processed before prepareN-1.# archprepare is used in arch Makefiles and when processed asm symlink,# version.h and scripts_basic is processed / created.# Listed in dependency orderPHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3# prepare3 is used to check if we are building in a separate output directory,# and if so do:# 1) Check that make has not been executed in the kernel src $(srctree)prepare3: include/config/uboot.releaseifneq ($(KBUILD_SRC),)	@$(kecho) '  Using $(srctree) as source for U-Boot'	$(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \		echo >&2 "  $(srctree) is not clean, please run 'make mrproper'"; \		echo >&2 "  in the '$(srctree)' directory.";\		/bin/false; \	fi;endif# prepare2 creates a makefile if using a separate output directoryprepare2: prepare3 outputmakefileprepare1: prepare2 $(version_h) $(timestamp_h) \                   include/config/auto.confifeq ($(wildcard $(LDSCRIPT)),)	@echo >&2 "  Could not find linker script."	@/bin/falseendififeq ($(CONFIG_USE_DEFAULT_ENV_FILE),y)prepare1: $(defaultenv_h)endifarchprepare: prepare1 scripts_basicprepare0: archprepare FORCE	$(Q)$(MAKE) $(build)=.# All the preparing..prepare: prepare0# Generate some files# ---------------------------------------------------------------------------define filechk_version.h	(echo \#define PLAIN_VERSION \"$(UBOOTRELEASE)\"; \	echo \#define U_BOOT_VERSION \"U-Boot \" PLAIN_VERSION; \	echo \#define CC_VERSION_STRING \"$$(LC_ALL=C $(CC) --version | head -n 1)\"; \	echo \#define LD_VERSION_STRING \"$$(LC_ALL=C $(LD) --version | head -n 1)\"; )endef# The SOURCE_DATE_EPOCH mechanism requires a date that behaves like GNU date.# The BSD date on the other hand behaves different and would produce errors# with the misused '-d' switch.  Respect that and search a working date with# well known pre- and suffixes for the GNU variant of date.define filechk_timestamp.h	(if test -n "$${SOURCE_DATE_EPOCH}"; then \		SOURCE_DATE="@$${SOURCE_DATE_EPOCH}"; \		DATE=""; \		for date in gdate date.gnu date; do \			$${date} -u -d "$${SOURCE_DATE}" >/dev/null 2>&1 && DATE="$${date}"; \		done; \		if test -n "$${DATE}"; then \			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DATE "%b %d %C%y"'; \			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TIME "%T"'; \			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TZ "%z"'; \			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DMI_DATE "%m/%d/%Y"'; \			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_BUILD_DATE 0x%Y%m%d'; \		else \			return 42; \		fi; \	else \		LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \		LC_ALL=C date +'#define U_BOOT_TIME "%T"'; \		LC_ALL=C date +'#define U_BOOT_TZ "%z"'; \		LC_ALL=C date +'#define U_BOOT_DMI_DATE "%m/%d/%Y"'; \		LC_ALL=C date +'#define U_BOOT_BUILD_DATE 0x%Y%m%d'; \	fi)endefdefine filechk_defaultenv.h	(grep -v '^#' | \	 grep -v '^$$' | \	 tr '\n' '\0' | \	 sed -e 's/\\\x0/\n/' | \	 xxd -i ; echo ", 0x00" ; )endef$(version_h): include/config/uboot.release FORCE	$(call filechk,version.h)$(timestamp_h): $(srctree)/Makefile FORCE	$(call filechk,timestamp.h)$(defaultenv_h): $(CONFIG_DEFAULT_ENV_FILE:"%"=%) FORCE	$(call filechk,defaultenv.h)# ---------------------------------------------------------------------------quiet_cmd_cpp_lds = LDS     $@cmd_cpp_lds = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) \		-D__ASSEMBLY__ -x assembler-with-cpp -P -o $@ $<u-boot.lds: $(LDSCRIPT) prepare FORCE	$(call if_changed_dep,cpp_lds)spl/u-boot-spl.bin: spl/u-boot-spl	@:spl/u-boot-spl: tools prepare \		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb) \		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_TPL_OF_PLATDATA),dts/dt.dtb)	$(Q)$(MAKE) obj=spl -f $(srctree)/scripts/Makefile.spl allspl/sunxi-spl.bin: spl/u-boot-spl	@:spl/sunxi-spl-with-ecc.bin: spl/sunxi-spl.bin	@:spl/u-boot-spl.sfp: spl/u-boot-spl	@:spl/boot.bin: spl/u-boot-spl	@:tpl/u-boot-tpl.bin: tools prepare \		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb)	$(Q)$(MAKE) obj=tpl -f $(srctree)/scripts/Makefile.spl allTAG_SUBDIRS := $(patsubst %,$(srctree)/%,$(u-boot-dirs) include)FIND := findFINDFLAGS := -Ltags ctags:		ctags -w -o ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \						-name '*.[chS]' -print`		ln -s ctags tagsetags:		etags -a -o etags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \						-name '*.[chS]' -print`cscope:		$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) -name '*.[chS]' -print > \						cscope.files		cscope -b -q -kSYSTEM_MAP = \		$(NM) $1 | \		grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \		LC_ALL=C sortSystem.map:	u-boot		@$(call SYSTEM_MAP,$<) > $@########################################################################## ARM relocations should all be R_ARM_RELATIVE (32-bit) or# R_AARCH64_RELATIVE (64-bit).checkarmreloc: u-boot	@RELOC="`$(CROSS_COMPILE)readelf -r -W $< | cut -d ' ' -f 4 | \		grep R_A | sort -u`"; \	if test "$$RELOC" != "R_ARM_RELATIVE" -a \		 "$$RELOC" != "R_AARCH64_RELATIVE"; then \		echo "$< contains unexpected relocations: $$RELOC"; \		false; \	fienvtools: scripts_basic $(version_h) $(timestamp_h)	$(Q)$(MAKE) $(build)=tools/envtools-only: scripts_basic $(version_h) $(timestamp_h)	$(Q)$(MAKE) $(build)=toolstools-all: export HOST_TOOLS_ALL=ytools-all: envtools tools ;cross_tools: export CROSS_BUILD_TOOLS=ycross_tools: tools ;.PHONY : CHANGELOGCHANGELOG:	git log --no-merges U-Boot-1_1_5.. | \	unexpand -a | sed -e 's/\s\s*$$//' > $@############################################################################# Cleaning is done on three levels.# make clean     Delete most generated files#                Leave enough to build external modules# make mrproper  Delete the current configuration, and all generated files# make distclean Remove editor backup files, patch leftover files and the like# Directories & files removed with 'make clean'CLEAN_DIRS  += $(MODVERDIR) \	       $(foreach d, spl tpl, $(patsubst %,$d/%, \			$(filter-out include, $(shell ls -1 $d 2>/dev/null))))CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h \	       boot* u-boot* MLO* SPL System.map fit-dtb.blob# Directories & files removed with 'make mrproper'MRPROPER_DIRS  += include/config include/generated spl tpl \		  .tmp_objdiffMRPROPER_FILES += .config .config.old include/autoconf.mk* include/config.h \		  ctags etags tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS# clean - Delete most, but leave enough to build external modules#clean: rm-dirs  := $(CLEAN_DIRS)clean: rm-files := $(CLEAN_FILES)clean-dirs	:= $(foreach f,$(u-boot-alldirs),$(if $(wildcard $(srctree)/$f/Makefile),$f))clean-dirs      := $(addprefix _clean_, $(clean-dirs) doc/DocBook)PHONY += $(clean-dirs) clean archclean$(clean-dirs):	$(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)# TODO: Do not use *.cfgtmpclean: $(clean-dirs)	$(call cmd,rmdirs)	$(call cmd,rmfiles)	@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \		\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \		-o -name '*.ko.*' -o -name '*.su' -o -name '*.cfgtmp' \		-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \		-o -name '*.lex.c' -o -name '*.tab.[ch]' \		-o -name '*.symtypes' -o -name 'modules.order' \		-o -name modules.builtin -o -name '.tmp_*.o.*' \		-o -name 'dsdt.aml' -o -name 'dsdt.asl.tmp' -o -name 'dsdt.c' \		-o -name '*.efi' -o -name '*.gcno' -o -name '*.so' \) \		-type f -print | xargs rm -f# mrproper - Delete all generated files, including .config#mrproper: rm-dirs  := $(wildcard $(MRPROPER_DIRS))mrproper: rm-files := $(wildcard $(MRPROPER_FILES))mrproper-dirs      := $(addprefix _mrproper_,scripts)PHONY += $(mrproper-dirs) mrproper archmrproper$(mrproper-dirs):	$(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)mrproper: clean $(mrproper-dirs)	$(call cmd,rmdirs)	$(call cmd,rmfiles)	@rm -f arch/*/include/asm/arch# distclean#PHONY += distcleandistclean: mrproper	@find $(srctree) $(RCS_FIND_IGNORE) \		\( -name '*.orig' -o -name '*.rej' -o -name '*~' \		-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \		-o -name '.*.rej' -o -name '*%' -o -name 'core' \		-o -name '*.pyc' \) \		-type f -print | xargs rm -f	@rm -f boards.cfgbackup:	F=`basename $(srctree)` ; cd .. ; \	gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$Fhelp:	@echo  'Cleaning targets:'	@echo  '  clean		  - Remove most generated files but keep the config'	@echo  '  mrproper	  - Remove all generated files + config + various backup files'	@echo  '  distclean	  - mrproper + remove editor backup and patch files'	@echo  ''	@echo  'Configuration targets:'	@$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help	@echo  ''	@echo  'Other generic targets:'	@echo  '  all		  - Build all necessary images depending on configuration'	@echo  '  tests		  - Build U-Boot for sandbox and run tests'	@echo  '* u-boot	  - Build the bare u-boot'	@echo  '  dir/            - Build all files in dir and below'	@echo  '  dir/file.[oisS] - Build specified target only'	@echo  '  dir/file.lst    - Build specified mixed source/assembly target only'	@echo  '                    (requires a recent binutils and recent build (System.map))'	@echo  '  tags/ctags	  - Generate ctags file for editors'	@echo  '  etags		  - Generate etags file for editors'	@echo  '  cscope	  - Generate cscope index'	@echo  '  ubootrelease	  - Output the release version string (use with make -s)'	@echo  '  ubootversion	  - Output the version stored in Makefile (use with make -s)'	@echo  "  cfg		  - Don't build, just create the .cfg files"	@echo  "  envtools	  - Build only the target-side environment tools"	@echo  ''	@echo  'Static analysers'	@echo  '  checkstack      - Generate a list of stack hogs'	@echo  '  coccicheck      - Execute static code analysis with Coccinelle'	@echo  ''	@echo  'Documentation targets:'	@$(MAKE) -f $(srctree)/doc/DocBook/Makefile dochelp	@echo  ''	@echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'	@echo  '  make V=2   [targets] 2 => give reason for rebuild of target'	@echo  '  make O=dir [targets] Locate all output files in "dir", including .config'	@echo  '  make C=1   [targets] Check all c source with $$CHECK (sparse by default)'	@echo  '  make C=2   [targets] Force check of all c source with $$CHECK'	@echo  '  make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'	@echo  '  make W=n   [targets] Enable extra gcc checks, n=1,2,3 where'	@echo  '		1: warnings which may be relevant and do not occur too often'	@echo  '		2: warnings which occur quite often but may still be relevant'	@echo  '		3: more obscure warnings, can most likely be ignored'	@echo  '		Multiple levels can be combined with W=12 or W=123'	@echo  ''	@echo  'Execute "make" or "make all" to build all targets marked with [*] '	@echo  'For further info see the ./README file'tests:	$(srctree)/test/run# Documentation targets# ---------------------------------------------------------------------------%docs: scripts_basic FORCE	$(Q)$(MAKE) $(build)=scripts build_docproc	$(Q)$(MAKE) $(build)=doc/DocBook $@endif #ifeq ($(config-targets),1)endif #ifeq ($(mixed-targets),1)PHONY += checkstack ubootrelease ubootversioncheckstack:	$(OBJDUMP) -d u-boot $$(find . -name u-boot-spl) | \	$(PERL) $(src)/scripts/checkstack.pl $(ARCH)ubootrelease:	@echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"ubootversion:	@echo $(UBOOTVERSION)# Single targets# ---------------------------------------------------------------------------# Single targets are compatible with:# - build with mixed source and output# - build with separate output dir 'make O=...'# - external modules##  target-dir => where to store outputfile#  build-dir  => directory in kernel source tree to useifeq ($(KBUILD_EXTMOD),)        build-dir  = $(patsubst %/,%,$(dir $@))        target-dir = $(dir $@)else        zap-slash=$(filter-out .,$(patsubst %/,%,$(dir $@)))        build-dir  = $(KBUILD_EXTMOD)$(if $(zap-slash),/$(zap-slash))        target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))endif%.s: %.c prepare scripts FORCE	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)%.i: %.c prepare scripts FORCE	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)%.o: %.c prepare scripts FORCE	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)%.lst: %.c prepare scripts FORCE	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)%.s: %.S prepare scripts FORCE	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)%.o: %.S prepare scripts FORCE	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)%.symtypes: %.c prepare scripts FORCE	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)# Modules/: prepare scripts FORCE	$(cmd_crmodverdir)	$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \	$(build)=$(build-dir)%/: prepare scripts FORCE	$(cmd_crmodverdir)	$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \	$(build)=$(build-dir)%.ko: prepare scripts FORCE	$(cmd_crmodverdir)	$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1)   \	$(build)=$(build-dir) $(@:.ko=.o)	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost# Consistency checks# ---------------------------------------------------------------------------PHONY += coccicheckcoccicheck:	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@# FIXME Should go into a make.lib or something# ===========================================================================quiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN   $(wildcard $(rm-dirs)))      cmd_rmdirs = rm -rf $(rm-dirs)quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))      cmd_rmfiles = rm -f $(rm-files)# read all saved command linestargets := $(wildcard $(sort $(targets)))cmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))ifneq ($(cmd_files),)  $(cmd_files): ;	# Do not try to update included dependency files  include $(cmd_files)endifendif	# skip-makefilePHONY += FORCEFORCE:# Declare the contents of the .PHONY variable as phony.  We keep that# information in a variable so we can use it in if_changed and friends..PHONY: $(PHONY)
 |