Fork of the vendor (Boundary Devices) u-boot for Reform 2, with minor tweaks. The goal is to migrate to mainstream u-boot or barebox ASAP. The main impediment so far is the 4GB RAM config.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1843 lines
60KB

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