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