1# 2# Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved. 3# 4# SPDX-License-Identifier: BSD-3-Clause 5# 6 7# 8# Trusted Firmware Version 9# 10VERSION_MAJOR := 2 11VERSION_MINOR := 10 12VERSION_PATCH := 0 # Only used for LTS releases 13VERSION := ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH} 14 15# Default goal is build all images 16.DEFAULT_GOAL := all 17 18# Avoid any implicit propagation of command line variable definitions to 19# sub-Makefiles, like CFLAGS that we reserved for the firmware images' 20# usage. Other command line options like "-s" are still propagated as usual. 21MAKEOVERRIDES = 22 23MAKE_HELPERS_DIRECTORY := make_helpers/ 24include ${MAKE_HELPERS_DIRECTORY}build_macros.mk 25include ${MAKE_HELPERS_DIRECTORY}build_env.mk 26 27################################################################################ 28# Default values for build configurations, and their dependencies 29################################################################################ 30 31include ${MAKE_HELPERS_DIRECTORY}defaults.mk 32 33################################################################################ 34# Configure the toolchains used to build TF-A and its tools 35################################################################################ 36 37include ${MAKE_HELPERS_DIRECTORY}toolchain.mk 38 39# Assertions enabled for DEBUG builds by default 40ENABLE_ASSERTIONS := ${DEBUG} 41ENABLE_PMF := ${ENABLE_RUNTIME_INSTRUMENTATION} 42PLAT := ${DEFAULT_PLAT} 43 44################################################################################ 45# Checkpatch script options 46################################################################################ 47 48CHECKCODE_ARGS := --no-patch 49# Do not check the coding style on imported library files or documentation files 50INC_DRV_DIRS_TO_CHECK := $(sort $(filter-out \ 51 include/drivers/arm, \ 52 $(wildcard include/drivers/*))) 53INC_LIB_DIRS_TO_CHECK := $(sort $(filter-out \ 54 include/lib/libfdt \ 55 include/lib/libc, \ 56 $(wildcard include/lib/*))) 57INC_DIRS_TO_CHECK := $(sort $(filter-out \ 58 include/lib \ 59 include/drivers, \ 60 $(wildcard include/*))) 61LIB_DIRS_TO_CHECK := $(sort $(filter-out \ 62 lib/compiler-rt \ 63 lib/libfdt% \ 64 lib/libc, \ 65 lib/zlib \ 66 $(wildcard lib/*))) 67ROOT_DIRS_TO_CHECK := $(sort $(filter-out \ 68 lib \ 69 include \ 70 docs \ 71 %.rst, \ 72 $(wildcard *))) 73CHECK_PATHS := ${ROOT_DIRS_TO_CHECK} \ 74 ${INC_DIRS_TO_CHECK} \ 75 ${INC_LIB_DIRS_TO_CHECK} \ 76 ${LIB_DIRS_TO_CHECK} \ 77 ${INC_DRV_DIRS_TO_CHECK} \ 78 ${INC_ARM_DIRS_TO_CHECK} 79 80################################################################################ 81# Process build options 82################################################################################ 83 84# Verbose flag 85ifeq (${V},0) 86 Q:=@ 87 ECHO:=@echo 88 CHECKCODE_ARGS += --no-summary --terse 89else 90 Q:= 91 ECHO:=$(ECHO_QUIET) 92endif 93 94ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),) 95 Q:=@ 96 ECHO:=$(ECHO_QUIET) 97endif 98 99export Q ECHO 100 101################################################################################ 102# Auxiliary tools (fiptool, cert_create, etc) 103################################################################################ 104 105# Variables for use with Certificate Generation Tool 106CRTTOOLPATH ?= tools/cert_create 107CRTTOOL ?= ${CRTTOOLPATH}/cert_create${BIN_EXT} 108 109# Variables for use with Firmware Encryption Tool 110ENCTOOLPATH ?= tools/encrypt_fw 111ENCTOOL ?= ${ENCTOOLPATH}/encrypt_fw${BIN_EXT} 112 113# Variables for use with Firmware Image Package 114FIPTOOLPATH ?= tools/fiptool 115FIPTOOL ?= ${FIPTOOLPATH}/fiptool${BIN_EXT} 116 117# Variables for use with sptool 118SPTOOLPATH ?= tools/sptool 119SPTOOL ?= ${SPTOOLPATH}/sptool.py 120SP_MK_GEN ?= ${SPTOOLPATH}/sp_mk_generator.py 121SP_DTS_LIST_FRAGMENT ?= ${BUILD_PLAT}/sp_list_fragment.dts 122 123# Variables for use with ROMLIB 124ROMLIBPATH ?= lib/romlib 125 126# Variable for use with Python 127PYTHON ?= python3 128 129# Variables for use with documentation build using Sphinx tool 130DOCS_PATH ?= docs 131 132################################################################################ 133# Compiler Configuration based on ARCH_MAJOR and ARCH_MINOR flags 134################################################################################ 135ifeq (${ARM_ARCH_MAJOR},7) 136 target32-directive = -target arm-none-eabi 137# Will set march-directive from platform configuration 138else 139 target32-directive = -target armv8a-none-eabi 140endif #(ARM_ARCH_MAJOR) 141 142################################################################################ 143# Get Architecture Feature Modifiers 144################################################################################ 145arch-features = ${ARM_ARCH_FEATURE} 146 147ifneq ($(filter %-clang,$($(ARCH)-cc-id)),) 148 ifeq ($($(ARCH)-cc-id),arm-clang) 149 TF_CFLAGS_aarch32 := -target arm-arm-none-eabi 150 TF_CFLAGS_aarch64 := -target aarch64-arm-none-eabi 151 else 152 TF_CFLAGS_aarch32 = $(target32-directive) 153 TF_CFLAGS_aarch64 := -target aarch64-elf 154 endif 155 156else ifeq ($($(ARCH)-cc-id),gnu-gcc) 157 ifeq ($(ENABLE_LTO),1) 158 # Enable LTO only for aarch64 159 ifeq (${ARCH},aarch64) 160 LTO_CFLAGS = -flto 161 endif 162 endif 163endif #(clang) 164 165# Process Debug flag 166$(eval $(call add_define,DEBUG)) 167ifneq (${DEBUG}, 0) 168 BUILD_TYPE := debug 169 TF_CFLAGS += -g -gdwarf-4 170 ASFLAGS += -g -Wa,-gdwarf-4 171 172 # Use LOG_LEVEL_INFO by default for debug builds 173 LOG_LEVEL := 40 174else 175 BUILD_TYPE := release 176 # Use LOG_LEVEL_NOTICE by default for release builds 177 LOG_LEVEL := 20 178endif #(Debug) 179 180# Default build string (git branch and commit) 181ifeq (${BUILD_STRING},) 182 BUILD_STRING := $(shell git describe --always --dirty --tags 2> /dev/null) 183endif 184VERSION_STRING := v${VERSION}(${BUILD_TYPE}):${BUILD_STRING} 185 186ifeq (${AARCH32_INSTRUCTION_SET},A32) 187 TF_CFLAGS_aarch32 += -marm 188else ifeq (${AARCH32_INSTRUCTION_SET},T32) 189 TF_CFLAGS_aarch32 += -mthumb 190else 191 $(error Error: Unknown AArch32 instruction set ${AARCH32_INSTRUCTION_SET}) 192endif #(AARCH32_INSTRUCTION_SET) 193 194TF_CFLAGS_aarch32 += -mno-unaligned-access 195TF_CFLAGS_aarch64 += -mgeneral-regs-only -mstrict-align 196 197############################################################################## 198# WARNINGS Configuration 199############################################################################### 200# General warnings 201WARNINGS := -Wall -Wmissing-include-dirs -Wunused \ 202 -Wdisabled-optimization -Wvla -Wshadow \ 203 -Wredundant-decls 204# stricter warnings 205WARNINGS += -Wextra -Wno-trigraphs 206# too verbose for generic build 207WARNINGS += -Wno-missing-field-initializers \ 208 -Wno-type-limits -Wno-sign-compare \ 209# on clang this flag gets reset if -Wextra is set after it. No difference on gcc 210WARNINGS += -Wno-unused-parameter 211 212# Additional warnings 213# Level 1 - infrequent warnings we should have none of 214# full -Wextra 215WARNING1 += -Wsign-compare 216WARNING1 += -Wtype-limits 217WARNING1 += -Wmissing-field-initializers 218 219# Level 2 - problematic warnings that we want 220# zlib, compiler-rt, coreboot, and mbdedtls blow up with these 221# TODO: disable just for them and move into default build 222WARNING2 += -Wold-style-definition 223WARNING2 += -Wmissing-prototypes 224WARNING2 += -Wmissing-format-attribute 225# TF-A aims to comply with this eventually. Effort too large at present 226WARNING2 += -Wundef 227# currently very involved and many platforms set this off 228WARNING2 += -Wunused-const-variable=2 229 230# Level 3 - very pedantic, frequently ignored 231WARNING3 := -Wbad-function-cast 232WARNING3 += -Waggregate-return 233WARNING3 += -Wnested-externs 234WARNING3 += -Wcast-align 235WARNING3 += -Wcast-qual 236WARNING3 += -Wconversion 237WARNING3 += -Wpacked 238WARNING3 += -Wpointer-arith 239WARNING3 += -Wswitch-default 240 241# Setting W is quite verbose and most warnings will be pre-existing issues 242# outside of the contributor's control. Don't fail the build on them so warnings 243# can be seen and hopefully addressed 244ifdef W 245 ifneq (${W},0) 246 E ?= 0 247 endif 248endif 249 250ifeq (${W},1) 251 WARNINGS += $(WARNING1) 252else ifeq (${W},2) 253 WARNINGS += $(WARNING1) $(WARNING2) 254else ifeq (${W},3) 255 WARNINGS += $(WARNING1) $(WARNING2) $(WARNING3) 256endif #(W) 257 258# Compiler specific warnings 259ifeq ($(filter %-clang,$($(ARCH)-cc-id)),) 260# not using clang 261WARNINGS += -Wunused-but-set-variable -Wmaybe-uninitialized \ 262 -Wpacked-bitfield-compat -Wshift-overflow=2 \ 263 -Wlogical-op 264 265# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105523 266TF_CFLAGS += $(call cc_option, --param=min-pagesize=0) 267 268ifeq ($(HARDEN_SLS), 1) 269 TF_CFLAGS_aarch64 += $(call cc_option, -mharden-sls=all) 270endif 271 272else 273# using clang 274WARNINGS += -Wshift-overflow -Wshift-sign-overflow \ 275 -Wlogical-op-parentheses 276endif #(Clang Warning) 277 278ifneq (${E},0) 279 ERRORS := -Werror 280endif #(E) 281 282################################################################################ 283# Compiler and Linker Directives 284################################################################################ 285CPPFLAGS = ${DEFINES} ${INCLUDES} ${MBEDTLS_INC} -nostdinc \ 286 $(ERRORS) $(WARNINGS) 287ASFLAGS += $(CPPFLAGS) \ 288 -ffreestanding -Wa,--fatal-warnings 289TF_CFLAGS += $(CPPFLAGS) $(TF_CFLAGS_$(ARCH)) \ 290 -ffunction-sections -fdata-sections \ 291 -ffreestanding -fno-builtin -fno-common \ 292 -Os -std=gnu99 293 294ifeq (${SANITIZE_UB},on) 295 TF_CFLAGS += -fsanitize=undefined -fno-sanitize-recover 296endif #(${SANITIZE_UB},on) 297 298ifeq (${SANITIZE_UB},trap) 299 TF_CFLAGS += -fsanitize=undefined -fno-sanitize-recover \ 300 -fsanitize-undefined-trap-on-error 301endif #(${SANITIZE_UB},trap) 302 303GCC_V_OUTPUT := $(shell $($(ARCH)-cc) -v 2>&1) 304 305TF_LDFLAGS += -z noexecstack 306 307# LD = armlink 308ifeq ($($(ARCH)-ld-id),arm-link) 309 TF_LDFLAGS += --diag_error=warning --lto_level=O1 310 TF_LDFLAGS += --remove --info=unused,unusedsymbols 311 TF_LDFLAGS += $(TF_LDFLAGS_$(ARCH)) 312 313# LD = gcc (used when GCC LTO is enabled) 314else ifeq ($($(ARCH)-ld-id),gnu-gcc) 315 # Pass ld options with Wl or Xlinker switches 316 TF_LDFLAGS += $(call ld_option,-Xlinker --no-warn-rwx-segments) 317 TF_LDFLAGS += -Wl,--fatal-warnings -O1 318 TF_LDFLAGS += -Wl,--gc-sections 319 320 TF_LDFLAGS += -Wl,-z,common-page-size=4096 #Configure page size constants 321 TF_LDFLAGS += -Wl,-z,max-page-size=4096 322 TF_LDFLAGS += -Wl,--build-id=none 323 324 ifeq ($(ENABLE_LTO),1) 325 ifeq (${ARCH},aarch64) 326 TF_LDFLAGS += -flto -fuse-linker-plugin 327 endif 328 endif #(ENABLE_LTO) 329 330# GCC automatically adds fix-cortex-a53-843419 flag when used to link 331# which breaks some builds, so disable if errata fix is not explicitly enabled 332 ifeq (${ARCH},aarch64) 333 ifneq (${ERRATA_A53_843419},1) 334 TF_LDFLAGS += -mno-fix-cortex-a53-843419 335 endif 336 endif 337 TF_LDFLAGS += -nostdlib 338 TF_LDFLAGS += $(subst --,-Xlinker --,$(TF_LDFLAGS_$(ARCH))) 339 340# LD = gcc-ld (ld) or llvm-ld (ld.lld) or other 341else 342# With ld.bfd version 2.39 and newer new warnings are added. Skip those since we 343# are not loaded by a elf loader. 344 TF_LDFLAGS += $(call ld_option, --no-warn-rwx-segments) 345 TF_LDFLAGS += -O1 346 TF_LDFLAGS += --gc-sections 347 348 TF_LDFLAGS += -z common-page-size=4096 # Configure page size constants 349 TF_LDFLAGS += -z max-page-size=4096 350 TF_LDFLAGS += --build-id=none 351 352# ld.lld doesn't recognize the errata flags, 353# therefore don't add those in that case. 354# ld.lld reports section type mismatch warnings, 355# therefore don't add --fatal-warnings to it. 356 ifneq ($($(ARCH)-ld-id),llvm-lld) 357 TF_LDFLAGS += $(TF_LDFLAGS_$(ARCH)) --fatal-warnings 358 endif 359 360endif #(LD = armlink) 361 362################################################################################ 363# Setup ARCH_MAJOR/MINOR before parsing arch_features. 364################################################################################ 365ifeq (${ENABLE_RME},1) 366 ARM_ARCH_MAJOR := 8 367 ARM_ARCH_MINOR := 6 368endif 369 370################################################################################ 371# Common sources and include directories 372################################################################################ 373include lib/compiler-rt/compiler-rt.mk 374 375BL_COMMON_SOURCES += common/bl_common.c \ 376 common/tf_log.c \ 377 common/${ARCH}/debug.S \ 378 drivers/console/multi_console.c \ 379 lib/${ARCH}/cache_helpers.S \ 380 lib/${ARCH}/misc_helpers.S \ 381 lib/extensions/pmuv3/${ARCH}/pmuv3.c \ 382 plat/common/plat_bl_common.c \ 383 plat/common/plat_log_common.c \ 384 plat/common/${ARCH}/plat_common.c \ 385 plat/common/${ARCH}/platform_helpers.S \ 386 ${COMPILER_RT_SRCS} 387 388ifeq ($($(ARCH)-cc-id),arm-clang) 389 BL_COMMON_SOURCES += lib/${ARCH}/armclang_printf.S 390endif 391 392ifeq (${SANITIZE_UB},on) 393 BL_COMMON_SOURCES += plat/common/ubsan.c 394endif 395 396INCLUDES += -Iinclude \ 397 -Iinclude/arch/${ARCH} \ 398 -Iinclude/lib/cpus/${ARCH} \ 399 -Iinclude/lib/el3_runtime/${ARCH} \ 400 ${PLAT_INCLUDES} \ 401 ${SPD_INCLUDES} 402 403DTC_FLAGS += -I dts -O dtb 404DTC_CPPFLAGS += -P -nostdinc $(INCLUDES) -Ifdts -undef \ 405 -x assembler-with-cpp $(DEFINES) 406 407include common/backtrace/backtrace.mk 408 409################################################################################ 410# Generic definitions 411################################################################################ 412include ${MAKE_HELPERS_DIRECTORY}plat_helpers.mk 413 414ifeq (${BUILD_BASE},) 415 BUILD_BASE := ./build 416endif 417BUILD_PLAT := $(abspath ${BUILD_BASE})/${PLAT}/${BUILD_TYPE} 418 419SPDS := $(sort $(filter-out none, $(patsubst services/spd/%,%,$(wildcard services/spd/*)))) 420 421# Platforms providing their own TBB makefile may override this value 422INCLUDE_TBBR_MK := 1 423 424################################################################################ 425# Include SPD Makefile if one has been specified 426################################################################################ 427 428ifneq (${SPD},none) 429 ifeq (${ARCH},aarch32) 430 $(error "Error: SPD is incompatible with AArch32.") 431 endif 432 433 ifdef EL3_PAYLOAD_BASE 434 $(warning "SPD and EL3_PAYLOAD_BASE are incompatible build options.") 435 $(warning "The SPD and its BL32 companion will be present but \ 436 ignored.") 437 endif 438 439 ifeq (${SPD},spmd) 440 # SPMD is located in std_svc directory 441 SPD_DIR := std_svc 442 443 ifeq ($(SPMD_SPM_AT_SEL2),1) 444 CTX_INCLUDE_EL2_REGS := 1 445 ifeq ($(SPMC_AT_EL3),1) 446 $(error SPM cannot be enabled in both S-EL2 and EL3.) 447 endif 448 endif 449 450 ifeq ($(findstring optee_sp,$(ARM_SPMC_MANIFEST_DTS)),optee_sp) 451 DTC_CPPFLAGS += -DOPTEE_SP_FW_CONFIG 452 endif 453 454 ifeq ($(TS_SP_FW_CONFIG),1) 455 DTC_CPPFLAGS += -DTS_SP_FW_CONFIG 456 endif 457 458 ifneq ($(ARM_BL2_SP_LIST_DTS),) 459 DTC_CPPFLAGS += -DARM_BL2_SP_LIST_DTS=$(ARM_BL2_SP_LIST_DTS) 460 endif 461 462 ifneq ($(SP_LAYOUT_FILE),) 463 BL2_ENABLE_SP_LOAD := 1 464 endif 465 466 ifeq ($(SPMC_AT_EL3_SEL0_SP),1) 467 ifneq ($(SPMC_AT_EL3),1) 468 $(error SEL0 SP cannot be enabled without SPMC at EL3) 469 endif 470 endif 471 else 472 # All other SPDs in spd directory 473 SPD_DIR := spd 474 endif #(SPD) 475 476 # We expect to locate an spd.mk under the specified SPD directory 477 SPD_MAKE := $(wildcard services/${SPD_DIR}/${SPD}/${SPD}.mk) 478 479 ifeq (${SPD_MAKE},) 480 $(error Error: No services/${SPD_DIR}/${SPD}/${SPD}.mk located) 481 endif 482 $(info Including ${SPD_MAKE}) 483 include ${SPD_MAKE} 484 485 # If there's BL32 companion for the chosen SPD, we expect that the SPD's 486 # Makefile would set NEED_BL32 to "yes". In this case, the build system 487 # supports two mutually exclusive options: 488 # * BL32 is built from source: then BL32_SOURCES must contain the list 489 # of source files to build BL32 490 # * BL32 is a prebuilt binary: then BL32 must point to the image file 491 # that will be included in the FIP 492 # If both BL32_SOURCES and BL32 are defined, the binary takes precedence 493 # over the sources. 494endif #(SPD=none) 495 496ifeq (${ENABLE_SPMD_LP}, 1) 497ifneq (${SPD},spmd) 498 $(error Error: ENABLE_SPMD_LP requires SPD=spmd.) 499endif 500ifeq ($(SPMC_AT_EL3),1) 501 $(error SPMC at EL3 not supported when enabling SPMD Logical partitions.) 502endif 503endif 504 505################################################################################ 506# Process BRANCH_PROTECTION value and set 507# Pointer Authentication and Branch Target Identification flags 508################################################################################ 509ifeq (${BRANCH_PROTECTION},0) 510 # Default value turns off all types of branch protection 511 BP_OPTION := none 512else ifneq (${ARCH},aarch64) 513 $(error BRANCH_PROTECTION requires AArch64) 514else ifeq (${BRANCH_PROTECTION},1) 515 # Enables all types of branch protection features 516 BP_OPTION := standard 517 ENABLE_BTI := 1 518 ENABLE_PAUTH := 1 519else ifeq (${BRANCH_PROTECTION},2) 520 # Return address signing to its standard level 521 BP_OPTION := pac-ret 522 ENABLE_PAUTH := 1 523else ifeq (${BRANCH_PROTECTION},3) 524 # Extend the signing to include leaf functions 525 BP_OPTION := pac-ret+leaf 526 ENABLE_PAUTH := 1 527else ifeq (${BRANCH_PROTECTION},4) 528 # Turn on branch target identification mechanism 529 BP_OPTION := bti 530 ENABLE_BTI := 1 531else 532 $(error Unknown BRANCH_PROTECTION value ${BRANCH_PROTECTION}) 533endif #(BRANCH_PROTECTION) 534 535ifeq ($(ENABLE_PAUTH),1) 536 CTX_INCLUDE_PAUTH_REGS := 1 537endif 538ifneq (${BP_OPTION},none) 539 TF_CFLAGS_aarch64 += -mbranch-protection=${BP_OPTION} 540endif #(BP_OPTION) 541 542# Pointer Authentication sources 543ifeq (${ENABLE_PAUTH}, 1) 544# arm/common/aarch64/arm_pauth.c contains a sample platform hook to complete the 545# Pauth support. As it's not secure, it must be reimplemented for real platforms 546 BL_COMMON_SOURCES += lib/extensions/pauth/pauth_helpers.S 547endif 548 549################################################################################ 550# Include the platform specific Makefile after the SPD Makefile (the platform 551# makefile may use all previous definitions in this file) 552################################################################################ 553include ${PLAT_MAKEFILE_FULL} 554 555################################################################################ 556# Setup arch_features based on ARM_ARCH_MAJOR, ARM_ARCH_MINOR provided from 557# platform. 558################################################################################ 559include ${MAKE_HELPERS_DIRECTORY}arch_features.mk 560 561#################################################### 562# Enable required options for Memory Stack Tagging. 563#################################################### 564 565# Currently, these options are enabled only for clang and armclang compiler. 566ifeq (${SUPPORT_STACK_MEMTAG},yes) 567 ifdef mem_tag_arch_support 568 # Check for armclang and clang compilers 569 ifneq ($(filter %-clang,$($(ARCH)-cc-id)),) 570 # Add "memtag" architecture feature modifier if not specified 571 ifeq ( ,$(findstring memtag,$(arch-features))) 572 arch-features := $(arch-features)+memtag 573 endif # memtag 574 ifeq ($($(ARCH)-cc-id),arm-clang) 575 TF_CFLAGS += -mmemtag-stack 576 else ifeq ($($(ARCH)-cc-id),llvm-clang) 577 TF_CFLAGS += -fsanitize=memtag 578 endif # armclang 579 endif 580 else 581 $(error "Error: stack memory tagging is not supported for \ 582 architecture ${ARCH},armv${ARM_ARCH_MAJOR}.${ARM_ARCH_MINOR}-a") 583 endif #(mem_tag_arch_support) 584endif #(SUPPORT_STACK_MEMTAG) 585 586################################################################################ 587# RME dependent flags configuration, Enable optional features for RME. 588################################################################################ 589# FEAT_RME 590ifeq (${ENABLE_RME},1) 591 # RME doesn't support BRBE 592 ENABLE_BRBE_FOR_NS := 0 593 594 # RME doesn't support PIE 595 ifneq (${ENABLE_PIE},0) 596 $(error ENABLE_RME does not support PIE) 597 endif 598 599 # RME doesn't support BRBE 600 ifneq (${ENABLE_BRBE_FOR_NS},0) 601 $(error ENABLE_RME does not support BRBE.) 602 endif 603 604 # RME requires AARCH64 605 ifneq (${ARCH},aarch64) 606 $(error ENABLE_RME requires AArch64) 607 endif 608 609 # RME requires el2 context to be saved for now. 610 CTX_INCLUDE_EL2_REGS := 1 611 CTX_INCLUDE_AARCH32_REGS := 0 612 CTX_INCLUDE_PAUTH_REGS := 1 613 614 # RME enables CSV2_2 extension by default. 615 ENABLE_FEAT_CSV2_2 = 1 616endif #(FEAT_RME) 617 618################################################################################ 619# Include rmmd Makefile if RME is enabled 620################################################################################ 621ifneq (${ENABLE_RME},0) 622 ifneq (${ARCH},aarch64) 623 $(error ENABLE_RME requires AArch64) 624 endif 625 ifeq ($(SPMC_AT_EL3),1) 626 $(error SPMC_AT_EL3 and ENABLE_RME cannot both be enabled.) 627 endif 628 629 ifneq (${SPD}, none) 630 ifneq (${SPD}, spmd) 631 $(error ENABLE_RME is incompatible with SPD=${SPD}. Use SPD=spmd) 632 endif 633 endif 634include services/std_svc/rmmd/rmmd.mk 635$(warning "RME is an experimental feature") 636endif 637 638ifeq (${CTX_INCLUDE_EL2_REGS}, 1) 639 ifeq (${SPD},none) 640 ifeq (${ENABLE_RME},0) 641 $(error CTX_INCLUDE_EL2_REGS is available only when SPD \ 642 or RME is enabled) 643 endif 644 endif 645endif 646 647################################################################################ 648# Platform specific Makefile might provide us ARCH_MAJOR/MINOR use that to come 649# up with appropriate march values for compiler. 650################################################################################ 651include ${MAKE_HELPERS_DIRECTORY}march.mk 652 653TF_CFLAGS += $(march-directive) 654ASFLAGS += $(march-directive) 655 656# This internal flag is common option which is set to 1 for scenarios 657# when the BL2 is running in EL3 level. This occurs in two scenarios - 658# 4 world system running BL2 at EL3 and two world system without BL1 running 659# BL2 in EL3 660 661ifeq (${RESET_TO_BL2},1) 662 BL2_RUNS_AT_EL3 := 1 663 ifeq (${ENABLE_RME},1) 664 $(error RESET_TO_BL2=1 and ENABLE_RME=1 configuration is not \ 665 supported at the moment.) 666 endif 667else ifeq (${ENABLE_RME},1) 668 BL2_RUNS_AT_EL3 := 1 669else 670 BL2_RUNS_AT_EL3 := 0 671endif 672 673# This internal flag is set to 1 when Firmware First handling of External aborts 674# is required by lowe ELs. Currently only NS requires this support. 675ifeq ($(HANDLE_EA_EL3_FIRST_NS),1) 676 FFH_SUPPORT := 1 677else 678 FFH_SUPPORT := 0 679endif 680 681$(eval $(call MAKE_PREREQ_DIR,${BUILD_PLAT})) 682 683ifeq (${ARM_ARCH_MAJOR},7) 684include make_helpers/armv7-a-cpus.mk 685endif 686 687PIE_FOUND := $(findstring --enable-default-pie,${GCC_V_OUTPUT}) 688ifneq ($(PIE_FOUND),) 689 TF_CFLAGS += -fno-PIE 690ifeq ($($(ARCH)-ld-id),gnu-gcc) 691 TF_LDFLAGS += -no-pie 692endif 693endif #(PIE_FOUND) 694 695ifeq ($($(ARCH)-ld-id),gnu-gcc) 696 PIE_LDFLAGS += -Wl,-pie -Wl,--no-dynamic-linker 697else 698 PIE_LDFLAGS += -pie --no-dynamic-linker 699endif 700 701ifeq ($(ENABLE_PIE),1) 702 ifeq ($(RESET_TO_BL2),1) 703 ifneq ($(BL2_IN_XIP_MEM),1) 704 BL2_CPPFLAGS += -fpie 705 BL2_CFLAGS += -fpie 706 BL2_LDFLAGS += $(PIE_LDFLAGS) 707 endif #(BL2_IN_XIP_MEM) 708 endif #(RESET_TO_BL2) 709 BL31_CPPFLAGS += -fpie 710 BL31_CFLAGS += -fpie 711 BL31_LDFLAGS += $(PIE_LDFLAGS) 712 713 BL32_CPPFLAGS += -fpie 714 BL32_CFLAGS += -fpie 715 BL32_LDFLAGS += $(PIE_LDFLAGS) 716endif #(ENABLE_PIE) 717 718BL1_CPPFLAGS += -DREPORT_ERRATA=${DEBUG} 719BL31_CPPFLAGS += -DREPORT_ERRATA=${DEBUG} 720BL32_CPPFLAGS += -DREPORT_ERRATA=${DEBUG} 721 722BL1_CPPFLAGS += -DIMAGE_AT_EL3 723ifeq ($(RESET_TO_BL2),1) 724 BL2_CPPFLAGS += -DIMAGE_AT_EL3 725else 726 BL2_CPPFLAGS += -DIMAGE_AT_EL1 727endif #(RESET_TO_BL2) 728 729ifeq (${ARCH},aarch64) 730 BL2U_CPPFLAGS += -DIMAGE_AT_EL1 731 BL31_CPPFLAGS += -DIMAGE_AT_EL3 732 BL32_CPPFLAGS += -DIMAGE_AT_EL1 733else 734 BL32_CPPFLAGS += -DIMAGE_AT_EL3 735endif 736 737# Include the CPU specific operations makefile, which provides default 738# values for all CPU errata workarounds and CPU specific optimisations. 739# This can be overridden by the platform. 740include lib/cpus/cpu-ops.mk 741 742################################################################################ 743# Build `AARCH32_SP` as BL32 image for AArch32 744################################################################################ 745ifeq (${ARCH},aarch32) 746 NEED_BL32 := yes 747 748 ifneq (${AARCH32_SP},none) 749 # We expect to locate an sp.mk under the specified AARCH32_SP directory 750 AARCH32_SP_MAKE := $(wildcard bl32/${AARCH32_SP}/${AARCH32_SP}.mk) 751 752 ifeq (${AARCH32_SP_MAKE},) 753 $(error Error: No bl32/${AARCH32_SP}/${AARCH32_SP}.mk located) 754 endif 755 $(info Including ${AARCH32_SP_MAKE}) 756 include ${AARCH32_SP_MAKE} 757 endif 758endif #(ARCH=aarch32) 759 760################################################################################ 761# Include libc if not overridden 762################################################################################ 763ifeq (${OVERRIDE_LIBC},0) 764include lib/libc/libc.mk 765endif 766 767################################################################################ 768# Check incompatible options and dependencies 769################################################################################ 770 771# USE_DEBUGFS experimental feature recommended only in debug builds 772ifeq (${USE_DEBUGFS},1) 773 ifeq (${DEBUG},1) 774 $(warning DEBUGFS experimental feature is enabled.) 775 else 776 $(warning DEBUGFS experimental, recommended in DEBUG builds ONLY) 777 endif 778endif #(USE_DEBUGFS) 779 780# USE_SPINLOCK_CAS requires AArch64 build 781ifeq (${USE_SPINLOCK_CAS},1) 782 ifneq (${ARCH},aarch64) 783 $(error USE_SPINLOCK_CAS requires AArch64) 784 endif 785endif #(USE_SPINLOCK_CAS) 786 787# The cert_create tool cannot generate certificates individually, so we use the 788# target 'certificates' to create them all 789ifneq (${GENERATE_COT},0) 790 FIP_DEPS += certificates 791 FWU_FIP_DEPS += fwu_certificates 792endif 793 794ifneq (${DECRYPTION_SUPPORT},none) 795 ENC_ARGS += -f ${FW_ENC_STATUS} 796 ENC_ARGS += -k ${ENC_KEY} 797 ENC_ARGS += -n ${ENC_NONCE} 798 FIP_DEPS += enctool 799 FWU_FIP_DEPS += enctool 800endif #(DECRYPTION_SUPPORT) 801 802ifdef EL3_PAYLOAD_BASE 803 ifdef PRELOADED_BL33_BASE 804 $(warning "PRELOADED_BL33_BASE and EL3_PAYLOAD_BASE are \ 805 incompatible build options. EL3_PAYLOAD_BASE has priority.") 806 endif 807 ifneq (${GENERATE_COT},0) 808 $(error "GENERATE_COT and EL3_PAYLOAD_BASE are incompatible \ 809 build options.") 810 endif 811 ifneq (${TRUSTED_BOARD_BOOT},0) 812 $(error "TRUSTED_BOARD_BOOT and EL3_PAYLOAD_BASE are \ 813 incompatible \ build options.") 814 endif 815endif #(EL3_PAYLOAD_BASE) 816 817ifeq (${NEED_BL33},yes) 818 ifdef EL3_PAYLOAD_BASE 819 $(warning "BL33 image is not needed when option \ 820 BL33_PAYLOAD_BASE is used and won't be added to the FIP file.") 821 endif 822 ifdef PRELOADED_BL33_BASE 823 $(warning "BL33 image is not needed when option \ 824 PRELOADED_BL33_BASE is used and won't be added to the FIP file.") 825 endif 826endif #(NEED_BL33) 827 828# When building for systems with hardware-assisted coherency, there's no need to 829# use USE_COHERENT_MEM. Require that USE_COHERENT_MEM must be set to 0 too. 830ifeq ($(HW_ASSISTED_COHERENCY)-$(USE_COHERENT_MEM),1-1) 831 $(error USE_COHERENT_MEM cannot be enabled with HW_ASSISTED_COHERENCY) 832endif 833 834#For now, BL2_IN_XIP_MEM is only supported when RESET_TO_BL2 is 1. 835ifeq ($(RESET_TO_BL2)-$(BL2_IN_XIP_MEM),0-1) 836 $(error "BL2_IN_XIP_MEM is only supported when RESET_TO_BL2 is enabled") 837endif 838 839# RAS_EXTENSION is deprecated, provide alternate build options 840ifeq ($(RAS_EXTENSION),1) 841 $(error "RAS_EXTENSION is now deprecated, please use ENABLE_FEAT_RAS \ 842 and HANDLE_EA_EL3_FIRST_NS instead") 843endif 844 845 846# When FAULT_INJECTION_SUPPORT is used, require that FEAT_RAS is enabled 847ifeq ($(FAULT_INJECTION_SUPPORT),1) 848 ifeq ($(ENABLE_FEAT_RAS),0) 849 $(error For FAULT_INJECTION_SUPPORT, ENABLE_FEAT_RAS must not be 0) 850 endif 851endif #(FAULT_INJECTION_SUPPORT) 852 853# DYN_DISABLE_AUTH can be set only when TRUSTED_BOARD_BOOT=1 854ifeq ($(DYN_DISABLE_AUTH), 1) 855 ifeq (${TRUSTED_BOARD_BOOT}, 0) 856 $(error "TRUSTED_BOARD_BOOT must be enabled for DYN_DISABLE_AUTH \ 857 to be set.") 858 endif 859endif #(DYN_DISABLE_AUTH) 860 861ifeq ($(MEASURED_BOOT)-$(TRUSTED_BOARD_BOOT),1-1) 862# Support authentication verification and hash calculation 863 CRYPTO_SUPPORT := 3 864else ifeq ($(DRTM_SUPPORT)-$(TRUSTED_BOARD_BOOT),1-1) 865# Support authentication verification and hash calculation 866 CRYPTO_SUPPORT := 3 867else ifneq ($(filter 1,${MEASURED_BOOT} ${DRTM_SUPPORT}),) 868# Support hash calculation only 869 CRYPTO_SUPPORT := 2 870else ifeq (${TRUSTED_BOARD_BOOT},1) 871# Support authentication verification only 872 CRYPTO_SUPPORT := 1 873else 874 CRYPTO_SUPPORT := 0 875endif #($(MEASURED_BOOT)-$(TRUSTED_BOARD_BOOT)) 876 877# SDEI_IN_FCONF is only supported when SDEI_SUPPORT is enabled. 878ifeq ($(SDEI_SUPPORT)-$(SDEI_IN_FCONF),0-1) 879 $(error "SDEI_IN_FCONF is only supported when SDEI_SUPPORT is enabled") 880endif 881 882# If pointer authentication is used in the firmware, make sure that all the 883# registers associated to it are also saved and restored. 884# Not doing it would leak the value of the keys used by EL3 to EL1 and S-EL1. 885ifeq ($(ENABLE_PAUTH),1) 886 ifeq ($(CTX_INCLUDE_PAUTH_REGS),0) 887 $(error Pointer Authentication requires CTX_INCLUDE_PAUTH_REGS=1) 888 endif 889endif #(ENABLE_PAUTH) 890 891ifeq ($(CTX_INCLUDE_PAUTH_REGS),1) 892 ifneq (${ARCH},aarch64) 893 $(error CTX_INCLUDE_PAUTH_REGS requires AArch64) 894 endif 895endif #(CTX_INCLUDE_PAUTH_REGS) 896 897ifeq ($(PSA_FWU_SUPPORT),1) 898 $(info PSA_FWU_SUPPORT is an experimental feature) 899endif #(PSA_FWU_SUPPORT) 900 901ifeq ($(FEATURE_DETECTION),1) 902 $(info FEATURE_DETECTION is an experimental feature) 903endif #(FEATURE_DETECTION) 904 905ifneq ($(ENABLE_SME2_FOR_NS), 0) 906 ifeq (${ENABLE_SME_FOR_NS}, 0) 907 $(warning "ENABLE_SME2_FOR_NS requires ENABLE_SME_FOR_NS also \ 908 to be set") 909 $(warning "Forced ENABLE_SME_FOR_NS=1") 910 override ENABLE_SME_FOR_NS := 1 911 endif 912endif #(ENABLE_SME2_FOR_NS) 913 914ifeq (${ARM_XLAT_TABLES_LIB_V1}, 1) 915 ifeq (${ALLOW_RO_XLAT_TABLES}, 1) 916 $(error "ALLOW_RO_XLAT_TABLES requires translation tables \ 917 library v2") 918 endif 919endif #(ARM_XLAT_TABLES_LIB_V1) 920 921ifneq (${DECRYPTION_SUPPORT},none) 922 ifeq (${TRUSTED_BOARD_BOOT}, 0) 923 $(error TRUSTED_BOARD_BOOT must be enabled for DECRYPTION_SUPPORT \ 924 to be set) 925 endif 926endif #(DECRYPTION_SUPPORT) 927 928# Ensure that no Aarch64-only features are enabled in Aarch32 build 929ifeq (${ARCH},aarch32) 930 931 # SME/SVE only supported on AArch64 932 ifneq (${ENABLE_SME_FOR_NS},0) 933 $(error "ENABLE_SME_FOR_NS cannot be used with ARCH=aarch32") 934 endif 935 936 ifeq (${ENABLE_SVE_FOR_NS},1) 937 # Warning instead of error due to CI dependency on this 938 $(error "ENABLE_SVE_FOR_NS cannot be used with ARCH=aarch32") 939 endif 940 941 # BRBE is not supported in AArch32 942 ifeq (${ENABLE_BRBE_FOR_NS},1) 943 $(error "ENABLE_BRBE_FOR_NS cannot be used with ARCH=aarch32") 944 endif 945 946 # FEAT_RNG_TRAP is not supported in AArch32 947 ifeq (${ENABLE_FEAT_RNG_TRAP},1) 948 $(error "ENABLE_FEAT_RNG_TRAP cannot be used with ARCH=aarch32") 949 endif 950endif #(ARCH=aarch32) 951 952ifneq (${ENABLE_SME_FOR_NS},0) 953 ifeq (${ENABLE_SVE_FOR_NS},0) 954 $(error "ENABLE_SME_FOR_NS requires ENABLE_SVE_FOR_NS") 955 endif 956endif #(ENABLE_SME_FOR_NS) 957 958# Secure SME/SVE requires the non-secure component as well 959ifeq (${ENABLE_SME_FOR_SWD},1) 960 ifeq (${ENABLE_SME_FOR_NS},0) 961 $(error "ENABLE_SME_FOR_SWD requires ENABLE_SME_FOR_NS") 962 endif 963 ifeq (${ENABLE_SVE_FOR_SWD},0) 964 $(error "ENABLE_SME_FOR_SWD requires ENABLE_SVE_FOR_SWD") 965 endif 966endif #(ENABLE_SME_FOR_SWD) 967 968ifeq (${ENABLE_SVE_FOR_SWD},1) 969 ifeq (${ENABLE_SVE_FOR_NS},0) 970 $(error "ENABLE_SVE_FOR_SWD requires ENABLE_SVE_FOR_NS") 971 endif 972endif #(ENABLE_SVE_FOR_SWD) 973 974# SVE and SME cannot be used with CTX_INCLUDE_FPREGS since secure manager does 975# its own context management including FPU registers. 976ifeq (${CTX_INCLUDE_FPREGS},1) 977 ifneq (${ENABLE_SME_FOR_NS},0) 978 $(error "ENABLE_SME_FOR_NS cannot be used with CTX_INCLUDE_FPREGS") 979 endif 980 981 ifeq (${ENABLE_SVE_FOR_NS},1) 982 # Warning instead of error due to CI dependency on this 983 $(warning "ENABLE_SVE_FOR_NS cannot be used with CTX_INCLUDE_FPREGS") 984 $(warning "Forced ENABLE_SVE_FOR_NS=0") 985 override ENABLE_SVE_FOR_NS := 0 986 endif 987endif #(CTX_INCLUDE_FPREGS) 988 989ifeq ($(DRTM_SUPPORT),1) 990 $(info DRTM_SUPPORT is an experimental feature) 991endif 992 993ifeq (${TRANSFER_LIST},1) 994 $(info TRANSFER_LIST is an experimental feature) 995endif 996 997ifeq (${ENABLE_RME},1) 998 ifneq (${SEPARATE_CODE_AND_RODATA},1) 999 $(error `ENABLE_RME=1` requires `SEPARATE_CODE_AND_RODATA=1`) 1000 endif 1001endif 1002 1003ifeq ($(PSA_CRYPTO),1) 1004 $(info PSA_CRYPTO is an experimental feature) 1005endif 1006 1007################################################################################ 1008# Process platform overrideable behaviour 1009################################################################################ 1010 1011ifdef BL1_SOURCES 1012 NEED_BL1 := yes 1013endif #(BL1_SOURCES) 1014 1015ifdef BL2_SOURCES 1016 NEED_BL2 := yes 1017 1018 # Using BL2 implies that a BL33 image also needs to be supplied for the FIP and 1019 # Certificate generation tools. This flag can be overridden by the platform. 1020 ifdef EL3_PAYLOAD_BASE 1021 # If booting an EL3 payload there is no need for a BL33 image 1022 # in the FIP file. 1023 NEED_BL33 := no 1024 else 1025 ifdef PRELOADED_BL33_BASE 1026 # If booting a BL33 preloaded image there is no need of 1027 # another one in the FIP file. 1028 NEED_BL33 := no 1029 else 1030 NEED_BL33 ?= yes 1031 endif 1032 endif 1033endif #(BL2_SOURCES) 1034 1035ifdef BL2U_SOURCES 1036 NEED_BL2U := yes 1037endif #(BL2U_SOURCES) 1038 1039# If SCP_BL2 is given, we always want FIP to include it. 1040ifdef SCP_BL2 1041 NEED_SCP_BL2 := yes 1042endif #(SCP_BL2) 1043 1044# For AArch32, BL31 is not currently supported. 1045ifneq (${ARCH},aarch32) 1046 ifdef BL31_SOURCES 1047 # When booting an EL3 payload, there is no need to compile the BL31 1048 # image nor put it in the FIP. 1049 ifndef EL3_PAYLOAD_BASE 1050 NEED_BL31 := yes 1051 endif 1052 endif 1053endif #(ARCH=aarch64) 1054 1055# Process TBB related flags 1056ifneq (${GENERATE_COT},0) 1057 # Common cert_create options 1058 ifneq (${CREATE_KEYS},0) 1059 $(eval CRT_ARGS += -n) 1060 $(eval FWU_CRT_ARGS += -n) 1061 ifneq (${SAVE_KEYS},0) 1062 $(eval CRT_ARGS += -k) 1063 $(eval FWU_CRT_ARGS += -k) 1064 endif 1065 endif 1066 # Include TBBR makefile (unless the platform indicates otherwise) 1067 ifeq (${INCLUDE_TBBR_MK},1) 1068 include make_helpers/tbbr/tbbr_tools.mk 1069 endif 1070endif #(GENERATE_COT) 1071 1072ifneq (${FIP_ALIGN},0) 1073 FIP_ARGS += --align ${FIP_ALIGN} 1074endif #(FIP_ALIGN) 1075 1076ifdef FDT_SOURCES 1077 NEED_FDT := yes 1078endif #(FDT_SOURCES) 1079 1080################################################################################ 1081# Include libraries' Makefile that are used in all BL 1082################################################################################ 1083 1084include lib/stack_protector/stack_protector.mk 1085 1086################################################################################ 1087# Include BL specific makefiles 1088################################################################################ 1089 1090ifeq (${NEED_BL1},yes) 1091include bl1/bl1.mk 1092endif 1093 1094ifeq (${NEED_BL2},yes) 1095include bl2/bl2.mk 1096endif 1097 1098ifeq (${NEED_BL2U},yes) 1099include bl2u/bl2u.mk 1100endif 1101 1102ifeq (${NEED_BL31},yes) 1103include bl31/bl31.mk 1104endif 1105 1106################################################################################ 1107# Build options checks 1108################################################################################ 1109 1110# Boolean_Flags 1111$(eval $(call assert_booleans,\ 1112 $(sort \ 1113 ALLOW_RO_XLAT_TABLES \ 1114 BL2_ENABLE_SP_LOAD \ 1115 COLD_BOOT_SINGLE_CPU \ 1116 CREATE_KEYS \ 1117 CTX_INCLUDE_AARCH32_REGS \ 1118 CTX_INCLUDE_FPREGS \ 1119 CTX_INCLUDE_EL2_REGS \ 1120 CTX_INCLUDE_MPAM_REGS \ 1121 DEBUG \ 1122 DYN_DISABLE_AUTH \ 1123 EL3_EXCEPTION_HANDLING \ 1124 ENABLE_AMU_AUXILIARY_COUNTERS \ 1125 ENABLE_AMU_FCONF \ 1126 AMU_RESTRICT_COUNTERS \ 1127 ENABLE_ASSERTIONS \ 1128 ENABLE_PIE \ 1129 ENABLE_PMF \ 1130 ENABLE_PSCI_STAT \ 1131 ENABLE_RUNTIME_INSTRUMENTATION \ 1132 ENABLE_SME_FOR_SWD \ 1133 ENABLE_SVE_FOR_SWD \ 1134 ENABLE_FEAT_RAS \ 1135 FFH_SUPPORT \ 1136 ERROR_DEPRECATED \ 1137 FAULT_INJECTION_SUPPORT \ 1138 GENERATE_COT \ 1139 GICV2_G0_FOR_EL3 \ 1140 HANDLE_EA_EL3_FIRST_NS \ 1141 HARDEN_SLS \ 1142 HW_ASSISTED_COHERENCY \ 1143 MEASURED_BOOT \ 1144 DRTM_SUPPORT \ 1145 NS_TIMER_SWITCH \ 1146 OVERRIDE_LIBC \ 1147 PL011_GENERIC_UART \ 1148 PROGRAMMABLE_RESET_ADDRESS \ 1149 PSCI_EXTENDED_STATE_ID \ 1150 PSCI_OS_INIT_MODE \ 1151 RESET_TO_BL31 \ 1152 SAVE_KEYS \ 1153 SEPARATE_CODE_AND_RODATA \ 1154 SEPARATE_BL2_NOLOAD_REGION \ 1155 SEPARATE_NOBITS_REGION \ 1156 SPIN_ON_BL1_EXIT \ 1157 SPM_MM \ 1158 SPMC_AT_EL3 \ 1159 SPMC_AT_EL3_SEL0_SP \ 1160 SPMD_SPM_AT_SEL2 \ 1161 ENABLE_SPMD_LP \ 1162 TRANSFER_LIST \ 1163 TRUSTED_BOARD_BOOT \ 1164 USE_COHERENT_MEM \ 1165 USE_DEBUGFS \ 1166 ARM_IO_IN_DTB \ 1167 SDEI_IN_FCONF \ 1168 SEC_INT_DESC_IN_FCONF \ 1169 USE_ROMLIB \ 1170 USE_TBBR_DEFS \ 1171 WARMBOOT_ENABLE_DCACHE_EARLY \ 1172 RESET_TO_BL2 \ 1173 BL2_IN_XIP_MEM \ 1174 BL2_INV_DCACHE \ 1175 USE_SPINLOCK_CAS \ 1176 ENCRYPT_BL31 \ 1177 ENCRYPT_BL32 \ 1178 ERRATA_SPECULATIVE_AT \ 1179 RAS_TRAP_NS_ERR_REC_ACCESS \ 1180 COT_DESC_IN_DTB \ 1181 USE_SP804_TIMER \ 1182 PSA_FWU_SUPPORT \ 1183 ENABLE_MPMM \ 1184 ENABLE_MPMM_FCONF \ 1185 FEATURE_DETECTION \ 1186 TRNG_SUPPORT \ 1187 ERRATA_ABI_SUPPORT \ 1188 ERRATA_NON_ARM_INTERCONNECT \ 1189 CONDITIONAL_CMO \ 1190 PSA_CRYPTO \ 1191 ENABLE_CONSOLE_GETC \ 1192 INIT_UNUSED_NS_EL2 \ 1193 PLATFORM_REPORT_CTX_MEM_USE \ 1194))) 1195 1196# Numeric_Flags 1197$(eval $(call assert_numerics,\ 1198 $(sort \ 1199 ARM_ARCH_MAJOR \ 1200 ARM_ARCH_MINOR \ 1201 BRANCH_PROTECTION \ 1202 CTX_INCLUDE_PAUTH_REGS \ 1203 CTX_INCLUDE_NEVE_REGS \ 1204 CRYPTO_SUPPORT \ 1205 DISABLE_MTPMU \ 1206 ENABLE_BRBE_FOR_NS \ 1207 ENABLE_TRBE_FOR_NS \ 1208 ENABLE_BTI \ 1209 ENABLE_PAUTH \ 1210 ENABLE_FEAT_AMU \ 1211 ENABLE_FEAT_AMUv1p1 \ 1212 ENABLE_FEAT_CSV2_2 \ 1213 ENABLE_FEAT_CSV2_3 \ 1214 ENABLE_FEAT_DIT \ 1215 ENABLE_FEAT_ECV \ 1216 ENABLE_FEAT_FGT \ 1217 ENABLE_FEAT_HCX \ 1218 ENABLE_FEAT_MTE \ 1219 ENABLE_FEAT_PAN \ 1220 ENABLE_FEAT_RNG \ 1221 ENABLE_FEAT_RNG_TRAP \ 1222 ENABLE_FEAT_SEL2 \ 1223 ENABLE_FEAT_TCR2 \ 1224 ENABLE_FEAT_SB \ 1225 ENABLE_FEAT_S2PIE \ 1226 ENABLE_FEAT_S1PIE \ 1227 ENABLE_FEAT_S2POE \ 1228 ENABLE_FEAT_S1POE \ 1229 ENABLE_FEAT_GCS \ 1230 ENABLE_FEAT_VHE \ 1231 ENABLE_FEAT_MTE_PERM \ 1232 ENABLE_FEAT_MPAM \ 1233 ENABLE_RME \ 1234 ENABLE_SPE_FOR_NS \ 1235 ENABLE_SYS_REG_TRACE_FOR_NS \ 1236 ENABLE_SME_FOR_NS \ 1237 ENABLE_SME2_FOR_NS \ 1238 ENABLE_SVE_FOR_NS \ 1239 ENABLE_TRF_FOR_NS \ 1240 FW_ENC_STATUS \ 1241 NR_OF_FW_BANKS \ 1242 NR_OF_IMAGES_IN_FW_BANK \ 1243 TWED_DELAY \ 1244 ENABLE_FEAT_TWED \ 1245 SVE_VECTOR_LEN \ 1246 IMPDEF_SYSREG_TRAP \ 1247))) 1248 1249ifdef KEY_SIZE 1250 $(eval $(call assert_numeric,KEY_SIZE)) 1251endif 1252 1253ifeq ($(filter $(SANITIZE_UB), on off trap),) 1254 $(error "Invalid value for SANITIZE_UB: can be one of on, off, trap") 1255endif 1256 1257################################################################################ 1258# Add definitions to the cpp preprocessor based on the current build options. 1259# This is done after including the platform specific makefile to allow the 1260# platform to overwrite the default options 1261################################################################################ 1262 1263$(eval $(call add_defines,\ 1264 $(sort \ 1265 ALLOW_RO_XLAT_TABLES \ 1266 ARM_ARCH_MAJOR \ 1267 ARM_ARCH_MINOR \ 1268 BL2_ENABLE_SP_LOAD \ 1269 COLD_BOOT_SINGLE_CPU \ 1270 CTX_INCLUDE_AARCH32_REGS \ 1271 CTX_INCLUDE_FPREGS \ 1272 CTX_INCLUDE_PAUTH_REGS \ 1273 CTX_INCLUDE_MPAM_REGS \ 1274 EL3_EXCEPTION_HANDLING \ 1275 CTX_INCLUDE_EL2_REGS \ 1276 CTX_INCLUDE_NEVE_REGS \ 1277 DECRYPTION_SUPPORT_${DECRYPTION_SUPPORT} \ 1278 DISABLE_MTPMU \ 1279 ENABLE_FEAT_AMU \ 1280 ENABLE_AMU_AUXILIARY_COUNTERS \ 1281 ENABLE_AMU_FCONF \ 1282 AMU_RESTRICT_COUNTERS \ 1283 ENABLE_ASSERTIONS \ 1284 ENABLE_BTI \ 1285 ENABLE_FEAT_MPAM \ 1286 ENABLE_PAUTH \ 1287 ENABLE_PIE \ 1288 ENABLE_PMF \ 1289 ENABLE_PSCI_STAT \ 1290 ENABLE_RME \ 1291 ENABLE_RUNTIME_INSTRUMENTATION \ 1292 ENABLE_SME_FOR_NS \ 1293 ENABLE_SME2_FOR_NS \ 1294 ENABLE_SME_FOR_SWD \ 1295 ENABLE_SPE_FOR_NS \ 1296 ENABLE_SVE_FOR_NS \ 1297 ENABLE_SVE_FOR_SWD \ 1298 ENABLE_FEAT_RAS \ 1299 FFH_SUPPORT \ 1300 ENCRYPT_BL31 \ 1301 ENCRYPT_BL32 \ 1302 ERROR_DEPRECATED \ 1303 FAULT_INJECTION_SUPPORT \ 1304 GICV2_G0_FOR_EL3 \ 1305 HANDLE_EA_EL3_FIRST_NS \ 1306 HW_ASSISTED_COHERENCY \ 1307 LOG_LEVEL \ 1308 MEASURED_BOOT \ 1309 DRTM_SUPPORT \ 1310 NS_TIMER_SWITCH \ 1311 PL011_GENERIC_UART \ 1312 PLAT_${PLAT} \ 1313 PROGRAMMABLE_RESET_ADDRESS \ 1314 PSCI_EXTENDED_STATE_ID \ 1315 PSCI_OS_INIT_MODE \ 1316 RESET_TO_BL31 \ 1317 SEPARATE_CODE_AND_RODATA \ 1318 SEPARATE_BL2_NOLOAD_REGION \ 1319 SEPARATE_NOBITS_REGION \ 1320 RECLAIM_INIT_CODE \ 1321 SPD_${SPD} \ 1322 SPIN_ON_BL1_EXIT \ 1323 SPM_MM \ 1324 SPMC_AT_EL3 \ 1325 SPMC_AT_EL3_SEL0_SP \ 1326 SPMD_SPM_AT_SEL2 \ 1327 TRANSFER_LIST \ 1328 TRUSTED_BOARD_BOOT \ 1329 CRYPTO_SUPPORT \ 1330 TRNG_SUPPORT \ 1331 ERRATA_ABI_SUPPORT \ 1332 ERRATA_NON_ARM_INTERCONNECT \ 1333 USE_COHERENT_MEM \ 1334 USE_DEBUGFS \ 1335 ARM_IO_IN_DTB \ 1336 SDEI_IN_FCONF \ 1337 SEC_INT_DESC_IN_FCONF \ 1338 USE_ROMLIB \ 1339 USE_TBBR_DEFS \ 1340 WARMBOOT_ENABLE_DCACHE_EARLY \ 1341 RESET_TO_BL2 \ 1342 BL2_RUNS_AT_EL3 \ 1343 BL2_IN_XIP_MEM \ 1344 BL2_INV_DCACHE \ 1345 USE_SPINLOCK_CAS \ 1346 ERRATA_SPECULATIVE_AT \ 1347 RAS_TRAP_NS_ERR_REC_ACCESS \ 1348 COT_DESC_IN_DTB \ 1349 USE_SP804_TIMER \ 1350 ENABLE_FEAT_RNG \ 1351 ENABLE_FEAT_RNG_TRAP \ 1352 ENABLE_FEAT_SB \ 1353 ENABLE_FEAT_DIT \ 1354 NR_OF_FW_BANKS \ 1355 NR_OF_IMAGES_IN_FW_BANK \ 1356 PSA_FWU_SUPPORT \ 1357 ENABLE_BRBE_FOR_NS \ 1358 ENABLE_TRBE_FOR_NS \ 1359 ENABLE_SYS_REG_TRACE_FOR_NS \ 1360 ENABLE_TRF_FOR_NS \ 1361 ENABLE_FEAT_HCX \ 1362 ENABLE_MPMM \ 1363 ENABLE_MPMM_FCONF \ 1364 ENABLE_FEAT_FGT \ 1365 ENABLE_FEAT_ECV \ 1366 ENABLE_FEAT_AMUv1p1 \ 1367 ENABLE_FEAT_SEL2 \ 1368 ENABLE_FEAT_VHE \ 1369 ENABLE_FEAT_CSV2_2 \ 1370 ENABLE_FEAT_CSV2_3 \ 1371 ENABLE_FEAT_PAN \ 1372 ENABLE_FEAT_TCR2 \ 1373 ENABLE_FEAT_S2PIE \ 1374 ENABLE_FEAT_S1PIE \ 1375 ENABLE_FEAT_S2POE \ 1376 ENABLE_FEAT_S1POE \ 1377 ENABLE_FEAT_GCS \ 1378 ENABLE_FEAT_MTE \ 1379 ENABLE_FEAT_MTE_PERM \ 1380 FEATURE_DETECTION \ 1381 TWED_DELAY \ 1382 ENABLE_FEAT_TWED \ 1383 CONDITIONAL_CMO \ 1384 IMPDEF_SYSREG_TRAP \ 1385 SVE_VECTOR_LEN \ 1386 ENABLE_SPMD_LP \ 1387 PSA_CRYPTO \ 1388 ENABLE_CONSOLE_GETC \ 1389 INIT_UNUSED_NS_EL2 \ 1390 PLATFORM_REPORT_CTX_MEM_USE \ 1391))) 1392 1393ifeq (${PLATFORM_REPORT_CTX_MEM_USE}, 1) 1394ifeq (${DEBUG}, 0) 1395 $(warning "PLATFORM_REPORT_CTX_MEM_USE can be applied when DEBUG=1 only") 1396 override PLATFORM_REPORT_CTX_MEM_USE := 0 1397endif 1398endif 1399 1400ifeq (${SANITIZE_UB},trap) 1401 $(eval $(call add_define,MONITOR_TRAPS)) 1402endif #(SANITIZE_UB) 1403 1404# Define the EL3_PAYLOAD_BASE flag only if it is provided. 1405ifdef EL3_PAYLOAD_BASE 1406 $(eval $(call add_define,EL3_PAYLOAD_BASE)) 1407else 1408# Define the PRELOADED_BL33_BASE flag only if it is provided and 1409# EL3_PAYLOAD_BASE is not defined, as it has priority. 1410 ifdef PRELOADED_BL33_BASE 1411 $(eval $(call add_define,PRELOADED_BL33_BASE)) 1412 endif 1413endif #(EL3_PAYLOAD_BASE) 1414 1415# Define the DYN_DISABLE_AUTH flag only if set. 1416ifeq (${DYN_DISABLE_AUTH},1) 1417 $(eval $(call add_define,DYN_DISABLE_AUTH)) 1418endif 1419 1420ifeq ($($(ARCH)-ld-id),arm-link) 1421 $(eval $(call add_define,USE_ARM_LINK)) 1422endif 1423 1424# Generate and include sp_gen.mk if SPD is spmd and SP_LAYOUT_FILE is defined 1425ifeq (${SPD},spmd) 1426ifdef SP_LAYOUT_FILE 1427 -include $(BUILD_PLAT)/sp_gen.mk 1428 FIP_DEPS += sp 1429 CRT_DEPS += sp 1430 NEED_SP_PKG := yes 1431else 1432 ifeq (${SPMD_SPM_AT_SEL2},1) 1433 $(error "SPMD with SPM at S-EL2 require SP_LAYOUT_FILE") 1434 endif 1435endif #(SP_LAYOUT_FILE) 1436endif #(SPD) 1437 1438################################################################################ 1439# Build targets 1440################################################################################ 1441 1442.PHONY: all msg_start clean realclean distclean cscope locate-checkpatch checkcodebase checkpatch fiptool sptool fip sp fwu_fip certtool dtbs memmap doc enctool 1443.SUFFIXES: 1444 1445all: msg_start 1446 1447msg_start: 1448 @echo "Building ${PLAT}" 1449 1450ifeq (${ERROR_DEPRECATED},0) 1451# Check if deprecated declarations and cpp warnings should be treated as error or not. 1452ifneq ($(filter %-clang,$($(ARCH)-cc-id)),) 1453 CPPFLAGS += -Wno-error=deprecated-declarations 1454else 1455 CPPFLAGS += -Wno-error=deprecated-declarations -Wno-error=cpp 1456endif 1457endif #(!ERROR_DEPRECATED) 1458 1459$(eval $(call MAKE_LIB_DIRS)) 1460$(eval $(call MAKE_LIB,c)) 1461 1462# Expand build macros for the different images 1463ifeq (${NEED_BL1},yes) 1464BL1_SOURCES := $(sort ${BL1_SOURCES}) 1465$(eval $(call MAKE_BL,bl1)) 1466endif #(NEED_BL1) 1467 1468ifeq (${NEED_BL2},yes) 1469 1470ifeq (${RESET_TO_BL2}, 0) 1471FIP_BL2_ARGS := tb-fw 1472endif 1473 1474BL2_SOURCES := $(sort ${BL2_SOURCES}) 1475 1476$(if ${BL2}, $(eval $(call TOOL_ADD_IMG,bl2,--${FIP_BL2_ARGS})),\ 1477 $(eval $(call MAKE_BL,bl2,${FIP_BL2_ARGS}))) 1478 1479endif #(NEED_BL2) 1480 1481ifeq (${NEED_SCP_BL2},yes) 1482$(eval $(call TOOL_ADD_IMG,scp_bl2,--scp-fw)) 1483endif #(NEED_SCP_BL2) 1484 1485ifeq (${NEED_BL31},yes) 1486BL31_SOURCES += ${SPD_SOURCES} 1487# Sort BL31 source files to remove duplicates 1488BL31_SOURCES := $(sort ${BL31_SOURCES}) 1489ifneq (${DECRYPTION_SUPPORT},none) 1490$(if ${BL31}, $(eval $(call TOOL_ADD_IMG,bl31,--soc-fw,,$(ENCRYPT_BL31))),\ 1491 $(eval $(call MAKE_BL,bl31,soc-fw,,$(ENCRYPT_BL31)))) 1492else 1493$(if ${BL31}, $(eval $(call TOOL_ADD_IMG,bl31,--soc-fw)),\ 1494 $(eval $(call MAKE_BL,bl31,soc-fw))) 1495endif #(DECRYPTION_SUPPORT) 1496endif #(NEED_BL31) 1497 1498# If a BL32 image is needed but neither BL32 nor BL32_SOURCES is defined, the 1499# build system will call TOOL_ADD_IMG to print a warning message and abort the 1500# process. Note that the dependency on BL32 applies to the FIP only. 1501ifeq (${NEED_BL32},yes) 1502# Sort BL32 source files to remove duplicates 1503BL32_SOURCES := $(sort ${BL32_SOURCES}) 1504BUILD_BL32 := $(if $(BL32),,$(if $(BL32_SOURCES),1)) 1505 1506ifneq (${DECRYPTION_SUPPORT},none) 1507$(if ${BUILD_BL32}, $(eval $(call MAKE_BL,bl32,tos-fw,,$(ENCRYPT_BL32))),\ 1508 $(eval $(call TOOL_ADD_IMG,bl32,--tos-fw,,$(ENCRYPT_BL32)))) 1509else 1510$(if ${BUILD_BL32}, $(eval $(call MAKE_BL,bl32,tos-fw)),\ 1511 $(eval $(call TOOL_ADD_IMG,bl32,--tos-fw))) 1512endif #(DECRYPTION_SUPPORT) 1513endif #(NEED_BL32) 1514 1515# If RMM image is needed but RMM is not defined, Test Realm Payload (TRP) 1516# needs to be built from RMM_SOURCES. 1517ifeq (${NEED_RMM},yes) 1518# Sort RMM source files to remove duplicates 1519RMM_SOURCES := $(sort ${RMM_SOURCES}) 1520BUILD_RMM := $(if $(RMM),,$(if $(RMM_SOURCES),1)) 1521 1522$(if ${BUILD_RMM}, $(eval $(call MAKE_BL,rmm,rmm-fw)),\ 1523 $(eval $(call TOOL_ADD_IMG,rmm,--rmm-fw))) 1524endif #(NEED_RMM) 1525 1526# Add the BL33 image if required by the platform 1527ifeq (${NEED_BL33},yes) 1528$(eval $(call TOOL_ADD_IMG,bl33,--nt-fw)) 1529endif #(NEED_BL33) 1530 1531ifeq (${NEED_BL2U},yes) 1532$(if ${BL2U}, $(eval $(call TOOL_ADD_IMG,bl2u,--ap-fwu-cfg,FWU_)),\ 1533 $(eval $(call MAKE_BL,bl2u,ap-fwu-cfg,FWU_))) 1534endif #(NEED_BL2U) 1535 1536# Expand build macros for the different images 1537ifeq (${NEED_FDT},yes) 1538 $(eval $(call MAKE_DTBS,$(BUILD_PLAT)/fdts,$(FDT_SOURCES))) 1539endif #(NEED_FDT) 1540 1541# Add Secure Partition packages 1542ifeq (${NEED_SP_PKG},yes) 1543$(BUILD_PLAT)/sp_gen.mk: ${SP_MK_GEN} ${SP_LAYOUT_FILE} | ${BUILD_PLAT} 1544 @${PYTHON} "$<" "$@" $(filter-out $<,$^) $(BUILD_PLAT) ${COT} ${SP_DTS_LIST_FRAGMENT} 1545sp: $(DTBS) $(BUILD_PLAT)/sp_gen.mk $(SP_PKGS) 1546 @${ECHO_BLANK_LINE} 1547 @echo "Built SP Images successfully" 1548 @${ECHO_BLANK_LINE} 1549endif #(NEED_SP_PKG) 1550 1551locate-checkpatch: 1552ifndef CHECKPATCH 1553 $(error "Please set CHECKPATCH to point to the Linux checkpatch.pl file, eg: CHECKPATCH=../linux/scripts/checkpatch.pl") 1554else 1555ifeq (,$(wildcard ${CHECKPATCH})) 1556 $(error "The file CHECKPATCH points to cannot be found, use eg: CHECKPATCH=../linux/scripts/checkpatch.pl") 1557endif 1558endif #(CHECKPATCH) 1559 1560clean: 1561 @echo " CLEAN" 1562 $(call SHELL_REMOVE_DIR,${BUILD_PLAT}) 1563ifdef UNIX_MK 1564 ${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean 1565else 1566# Clear the MAKEFLAGS as we do not want 1567# to pass the gnumake flags to nmake. 1568 ${Q}set MAKEFLAGS= && ${MSVC_NMAKE} /nologo /f ${FIPTOOLPATH}/Makefile.msvc FIPTOOLPATH=$(subst /,\,$(FIPTOOLPATH)) FIPTOOL=$(subst /,\,$(FIPTOOL)) clean 1569endif #(UNIX_MK) 1570 ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} clean 1571 ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${ENCTOOLPATH} clean 1572 ${Q}${MAKE} --no-print-directory -C ${ROMLIBPATH} clean 1573 1574realclean distclean: 1575 @echo " REALCLEAN" 1576 $(call SHELL_REMOVE_DIR,${BUILD_BASE}) 1577 $(call SHELL_DELETE_ALL, ${CURDIR}/cscope.*) 1578ifdef UNIX_MK 1579 ${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean 1580else 1581# Clear the MAKEFLAGS as we do not want 1582# to pass the gnumake flags to nmake. 1583 ${Q}set MAKEFLAGS= && ${MSVC_NMAKE} /nologo /f ${FIPTOOLPATH}/Makefile.msvc FIPTOOLPATH=$(subst /,\,$(FIPTOOLPATH)) FIPTOOL=$(subst /,\,$(FIPTOOL)) realclean 1584endif #(UNIX_MK) 1585 ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} realclean 1586 ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${ENCTOOLPATH} realclean 1587 ${Q}${MAKE} --no-print-directory -C ${ROMLIBPATH} clean 1588 1589checkcodebase: locate-checkpatch 1590 @echo " CHECKING STYLE" 1591 @if test -d .git ; then \ 1592 git ls-files | grep -E -v 'libfdt|libc|docs|\.rst' | \ 1593 while read GIT_FILE ; \ 1594 do ${CHECKPATCH} ${CHECKCODE_ARGS} -f $$GIT_FILE ; \ 1595 done ; \ 1596 else \ 1597 find . -type f -not -iwholename "*.git*" \ 1598 -not -iwholename "*build*" \ 1599 -not -iwholename "*libfdt*" \ 1600 -not -iwholename "*libc*" \ 1601 -not -iwholename "*docs*" \ 1602 -not -iwholename "*.rst" \ 1603 -exec ${CHECKPATCH} ${CHECKCODE_ARGS} -f {} \; ; \ 1604 fi 1605 1606checkpatch: locate-checkpatch 1607 @echo " CHECKING STYLE" 1608 @if test -n "${CHECKPATCH_OPTS}"; then \ 1609 echo " with ${CHECKPATCH_OPTS} option(s)"; \ 1610 fi 1611 ${Q}COMMON_COMMIT=$$(git merge-base HEAD ${BASE_COMMIT}); \ 1612 for commit in `git rev-list --no-merges $$COMMON_COMMIT..HEAD`; \ 1613 do \ 1614 printf "\n[*] Checking style of '$$commit'\n\n"; \ 1615 git log --format=email "$$commit~..$$commit" \ 1616 -- ${CHECK_PATHS} | \ 1617 ${CHECKPATCH} ${CHECKPATCH_OPTS} - || true; \ 1618 git diff --format=email "$$commit~..$$commit" \ 1619 -- ${CHECK_PATHS} | \ 1620 ${CHECKPATCH} ${CHECKPATCH_OPTS} - || true; \ 1621 done 1622 1623certtool: ${CRTTOOL} 1624 1625${CRTTOOL}: FORCE 1626 ${Q}${MAKE} PLAT=${PLAT} USE_TBBR_DEFS=${USE_TBBR_DEFS} COT=${COT} OPENSSL_DIR=${OPENSSL_DIR} CRTTOOL=${CRTTOOL} DEBUG=${DEBUG} V=${V} --no-print-directory -C ${CRTTOOLPATH} all 1627 @${ECHO_BLANK_LINE} 1628 @echo "Built $@ successfully" 1629 @${ECHO_BLANK_LINE} 1630 1631ifneq (${GENERATE_COT},0) 1632certificates: ${CRT_DEPS} ${CRTTOOL} 1633 ${Q}${CRTTOOL} ${CRT_ARGS} 1634 @${ECHO_BLANK_LINE} 1635 @echo "Built $@ successfully" 1636 @echo "Certificates can be found in ${BUILD_PLAT}" 1637 @${ECHO_BLANK_LINE} 1638endif #(GENERATE_COT) 1639 1640${BUILD_PLAT}/${FIP_NAME}: ${FIP_DEPS} ${FIPTOOL} 1641 $(eval ${CHECK_FIP_CMD}) 1642 ${Q}${FIPTOOL} create ${FIP_ARGS} $@ 1643 ${Q}${FIPTOOL} info $@ 1644 @${ECHO_BLANK_LINE} 1645 @echo "Built $@ successfully" 1646 @${ECHO_BLANK_LINE} 1647 1648ifneq (${GENERATE_COT},0) 1649fwu_certificates: ${FWU_CRT_DEPS} ${CRTTOOL} 1650 ${Q}${CRTTOOL} ${FWU_CRT_ARGS} 1651 @${ECHO_BLANK_LINE} 1652 @echo "Built $@ successfully" 1653 @echo "FWU certificates can be found in ${BUILD_PLAT}" 1654 @${ECHO_BLANK_LINE} 1655endif #(GENERATE_COT) 1656 1657${BUILD_PLAT}/${FWU_FIP_NAME}: ${FWU_FIP_DEPS} ${FIPTOOL} 1658 $(eval ${CHECK_FWU_FIP_CMD}) 1659 ${Q}${FIPTOOL} create ${FWU_FIP_ARGS} $@ 1660 ${Q}${FIPTOOL} info $@ 1661 @${ECHO_BLANK_LINE} 1662 @echo "Built $@ successfully" 1663 @${ECHO_BLANK_LINE} 1664 1665fiptool: ${FIPTOOL} 1666fip: ${BUILD_PLAT}/${FIP_NAME} 1667fwu_fip: ${BUILD_PLAT}/${FWU_FIP_NAME} 1668 1669${FIPTOOL}: FORCE 1670ifdef UNIX_MK 1671 ${Q}${MAKE} CPPFLAGS="-DVERSION='\"${VERSION_STRING}\"'" FIPTOOL=${FIPTOOL} OPENSSL_DIR=${OPENSSL_DIR} DEBUG=${DEBUG} V=${V} --no-print-directory -C ${FIPTOOLPATH} all 1672else 1673# Clear the MAKEFLAGS as we do not want 1674# to pass the gnumake flags to nmake. 1675 ${Q}set MAKEFLAGS= && ${MSVC_NMAKE} /nologo /f ${FIPTOOLPATH}/Makefile.msvc FIPTOOLPATH=$(subst /,\,$(FIPTOOLPATH)) FIPTOOL=$(subst /,\,$(FIPTOOL)) 1676endif #(UNIX_MK) 1677 1678romlib.bin: libraries FORCE 1679 ${Q}${MAKE} PLAT_DIR=${PLAT_DIR} BUILD_PLAT=${BUILD_PLAT} ENABLE_BTI=${ENABLE_BTI} ARM_ARCH_MINOR=${ARM_ARCH_MINOR} INCLUDES='${INCLUDES}' DEFINES='${DEFINES}' --no-print-directory -C ${ROMLIBPATH} all 1680 1681memmap: all 1682ifdef UNIX_MK 1683 ${Q}PYTHONPATH=${CURDIR}/tools/memory \ 1684 ${PYTHON} -m memory.memmap -sr ${BUILD_PLAT} 1685else 1686 ${Q}set PYTHONPATH=${CURDIR}/tools/memory && \ 1687 ${PYTHON} -m memory.memmap -sr ${BUILD_PLAT} 1688endif 1689 1690doc: 1691 @echo " BUILD DOCUMENTATION" 1692 ${Q}${MAKE} --no-print-directory -C ${DOCS_PATH} html 1693 1694enctool: ${ENCTOOL} 1695 1696${ENCTOOL}: FORCE 1697 ${Q}${MAKE} PLAT=${PLAT} BUILD_INFO=0 OPENSSL_DIR=${OPENSSL_DIR} ENCTOOL=${ENCTOOL} DEBUG=${DEBUG} V=${V} --no-print-directory -C ${ENCTOOLPATH} all 1698 @${ECHO_BLANK_LINE} 1699 @echo "Built $@ successfully" 1700 @${ECHO_BLANK_LINE} 1701 1702cscope: 1703 @echo " CSCOPE" 1704 ${Q}find ${CURDIR} -name "*.[chsS]" > cscope.files 1705 ${Q}cscope -b -q -k 1706 1707help: 1708 @echo "usage: ${MAKE} [PLAT=<platform>] [OPTIONS] [TARGET]" 1709 @echo "" 1710 @echo "PLAT is used to specify which platform you wish to build." 1711 @echo "If no platform is specified, PLAT defaults to: ${DEFAULT_PLAT}" 1712 @echo "" 1713 @echo "platform = ${PLATFORM_LIST}" 1714 @echo "" 1715 @echo "Please refer to the User Guide for a list of all supported options." 1716 @echo "Note that the build system doesn't track dependencies for build " 1717 @echo "options. Therefore, if any of the build options are changed " 1718 @echo "from a previous build, a clean build must be performed." 1719 @echo "" 1720 @echo "Supported Targets:" 1721 @echo " all Build all individual bootloader binaries" 1722 @echo " bl1 Build the BL1 binary" 1723 @echo " bl2 Build the BL2 binary" 1724 @echo " bl2u Build the BL2U binary" 1725 @echo " bl31 Build the BL31 binary" 1726 @echo " bl32 Build the BL32 binary. If ARCH=aarch32, then " 1727 @echo " this builds secure payload specified by AARCH32_SP" 1728 @echo " certificates Build the certificates (requires 'GENERATE_COT=1')" 1729 @echo " fip Build the Firmware Image Package (FIP)" 1730 @echo " fwu_fip Build the FWU Firmware Image Package (FIP)" 1731 @echo " checkcodebase Check the coding style of the entire source tree" 1732 @echo " checkpatch Check the coding style on changes in the current" 1733 @echo " branch against BASE_COMMIT (default origin/master)" 1734 @echo " clean Clean the build for the selected platform" 1735 @echo " cscope Generate cscope index" 1736 @echo " distclean Remove all build artifacts for all platforms" 1737 @echo " certtool Build the Certificate generation tool" 1738 @echo " enctool Build the Firmware encryption tool" 1739 @echo " fiptool Build the Firmware Image Package (FIP) creation tool" 1740 @echo " sp Build the Secure Partition Packages" 1741 @echo " sptool Build the Secure Partition Package creation tool" 1742 @echo " dtbs Build the Device Tree Blobs (if required for the platform)" 1743 @echo " memmap Print the memory map of the built binaries" 1744 @echo " doc Build html based documentation using Sphinx tool" 1745 @echo "" 1746 @echo "Note: most build targets require PLAT to be set to a specific platform." 1747 @echo "" 1748 @echo "example: build all targets for the FVP platform:" 1749 @echo " CROSS_COMPILE=aarch64-none-elf- make PLAT=fvp all" 1750 1751.PHONY: FORCE 1752FORCE:; 1753