Makefile 71 KB

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