Makefile 73 KB

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