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