Home | History | Annotate | Download | only in arm-trusted-firmware
      1 #
      2 # Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
      3 #
      4 # SPDX-License-Identifier: BSD-3-Clause
      5 #
      6 
      7 #
      8 # Trusted Firmware Version
      9 #
     10 VERSION_MAJOR			:= 1
     11 VERSION_MINOR			:= 4
     12 
     13 # Default goal is build all images
     14 .DEFAULT_GOAL			:= all
     15 
     16 # Avoid any implicit propagation of command line variable definitions to
     17 # sub-Makefiles, like CFLAGS that we reserved for the firmware images'
     18 # usage. Other command line options like "-s" are still propagated as usual.
     19 MAKEOVERRIDES =
     20 
     21 MAKE_HELPERS_DIRECTORY := make_helpers/
     22 include ${MAKE_HELPERS_DIRECTORY}build_macros.mk
     23 include ${MAKE_HELPERS_DIRECTORY}build_env.mk
     24 
     25 ################################################################################
     26 # Default values for build configurations, and their dependencies
     27 ################################################################################
     28 
     29 ifdef ASM_ASSERTION
     30         $(warning ASM_ASSERTION is removed, use ENABLE_ASSERTIONS instead.)
     31 endif
     32 
     33 include ${MAKE_HELPERS_DIRECTORY}defaults.mk
     34 
     35 # Assertions enabled for DEBUG builds by default
     36 ENABLE_ASSERTIONS		:= ${DEBUG}
     37 ENABLE_PMF			:= ${ENABLE_RUNTIME_INSTRUMENTATION}
     38 PLAT				:= ${DEFAULT_PLAT}
     39 
     40 ################################################################################
     41 # Checkpatch script options
     42 ################################################################################
     43 
     44 CHECKCODE_ARGS		:=	--no-patch
     45 # Do not check the coding style on imported library files or documentation files
     46 INC_LIB_DIRS_TO_CHECK	:=	$(sort $(filter-out			\
     47 					include/lib/libfdt		\
     48 					include/lib/stdlib,		\
     49 					$(wildcard include/lib/*)))
     50 INC_DIRS_TO_CHECK	:=	$(sort $(filter-out			\
     51 					include/lib,			\
     52 					$(wildcard include/*)))
     53 LIB_DIRS_TO_CHECK	:=	$(sort $(filter-out			\
     54 					lib/compiler-rt			\
     55 					lib/libfdt%			\
     56 					lib/stdlib,			\
     57 					$(wildcard lib/*)))
     58 ROOT_DIRS_TO_CHECK	:=	$(sort $(filter-out			\
     59 					lib				\
     60 					include				\
     61 					docs				\
     62 					%.md,				\
     63 					$(wildcard *)))
     64 CHECK_PATHS		:=	${ROOT_DIRS_TO_CHECK}			\
     65 				${INC_DIRS_TO_CHECK}			\
     66 				${INC_LIB_DIRS_TO_CHECK}		\
     67 				${LIB_DIRS_TO_CHECK}
     68 
     69 
     70 ################################################################################
     71 # Process build options
     72 ################################################################################
     73 
     74 # Verbose flag
     75 ifeq (${V},0)
     76         Q:=@
     77         CHECKCODE_ARGS	+=	--no-summary --terse
     78 else
     79         Q:=
     80 endif
     81 export Q
     82 
     83 # Process Debug flag
     84 $(eval $(call add_define,DEBUG))
     85 ifneq (${DEBUG}, 0)
     86         BUILD_TYPE	:=	debug
     87         TF_CFLAGS	+= 	-g
     88         ASFLAGS		+= 	-g -Wa,--gdwarf-2
     89         # Use LOG_LEVEL_INFO by default for debug builds
     90         LOG_LEVEL	:=	40
     91 else
     92         BUILD_TYPE	:=	release
     93         $(eval $(call add_define,NDEBUG))
     94         # Use LOG_LEVEL_NOTICE by default for release builds
     95         LOG_LEVEL	:=	20
     96 endif
     97 
     98 # Default build string (git branch and commit)
     99 ifeq (${BUILD_STRING},)
    100         BUILD_STRING	:=	$(shell git describe --always --dirty --tags 2> /dev/null)
    101 endif
    102 VERSION_STRING		:=	v${VERSION_MAJOR}.${VERSION_MINOR}(${BUILD_TYPE}):${BUILD_STRING}
    103 
    104 # The cert_create tool cannot generate certificates individually, so we use the
    105 # target 'certificates' to create them all
    106 ifneq (${GENERATE_COT},0)
    107         FIP_DEPS += certificates
    108         FWU_FIP_DEPS += fwu_certificates
    109 endif
    110 
    111 
    112 ################################################################################
    113 # Toolchain
    114 ################################################################################
    115 
    116 HOSTCC			:=	gcc
    117 export HOSTCC
    118 
    119 CC			:=	${CROSS_COMPILE}gcc
    120 CPP			:=	${CROSS_COMPILE}cpp
    121 AS			:=	${CROSS_COMPILE}gcc
    122 AR			:=	${CROSS_COMPILE}ar
    123 LD			:=	${CROSS_COMPILE}ld
    124 OC			:=	${CROSS_COMPILE}objcopy
    125 OD			:=	${CROSS_COMPILE}objdump
    126 NM			:=	${CROSS_COMPILE}nm
    127 PP			:=	${CROSS_COMPILE}gcc -E
    128 
    129 ifeq ($(notdir $(CC)),armclang)
    130 TF_CFLAGS_aarch32	=	-target arm-arm-none-eabi -march=armv8-a
    131 TF_CFLAGS_aarch64	=	-target aarch64-arm-none-eabi -march=armv8-a
    132 else ifneq ($(findstring clang,$(notdir $(CC))),)
    133 TF_CFLAGS_aarch32	=	-target armv8a-none-eabi
    134 TF_CFLAGS_aarch64	=	-target aarch64-elf
    135 else
    136 TF_CFLAGS_aarch32	=	-march=armv8-a
    137 TF_CFLAGS_aarch64	=	-march=armv8-a
    138 endif
    139 
    140 TF_CFLAGS_aarch64	+=	-mgeneral-regs-only -mstrict-align
    141 
    142 ASFLAGS_aarch32		=	-march=armv8-a
    143 ASFLAGS_aarch64		=	-march=armv8-a
    144 
    145 CPPFLAGS		=	${DEFINES} ${INCLUDES} -nostdinc		\
    146 				-Wmissing-include-dirs -Werror
    147 ASFLAGS			+=	$(CPPFLAGS) $(ASFLAGS_$(ARCH))			\
    148 				-D__ASSEMBLY__ -ffreestanding 			\
    149 				-Wa,--fatal-warnings
    150 TF_CFLAGS		+=	$(CPPFLAGS) $(TF_CFLAGS_$(ARCH))		\
    151 				-ffreestanding -fno-builtin -Wall -std=gnu99	\
    152 				-Os -ffunction-sections -fdata-sections -fno-pic
    153 
    154 TF_LDFLAGS		+=	--fatal-warnings -O1
    155 TF_LDFLAGS		+=	--gc-sections
    156 TF_LDFLAGS		+=	$(TF_LDFLAGS_$(ARCH))
    157 
    158 ################################################################################
    159 # Common sources and include directories
    160 ################################################################################
    161 include lib/compiler-rt/compiler-rt.mk
    162 include lib/stdlib/stdlib.mk
    163 
    164 BL_COMMON_SOURCES	+=	common/bl_common.c			\
    165 				common/tf_log.c				\
    166 				common/tf_printf.c			\
    167 				common/tf_snprintf.c			\
    168 				common/${ARCH}/debug.S			\
    169 				lib/${ARCH}/cache_helpers.S		\
    170 				lib/${ARCH}/misc_helpers.S		\
    171 				plat/common/plat_log_common.c		\
    172 				plat/common/${ARCH}/plat_common.c	\
    173 				plat/common/${ARCH}/platform_helpers.S	\
    174 				${COMPILER_RT_SRCS}			\
    175 				${STDLIB_SRCS}
    176 
    177 INCLUDES		+=	-Iinclude/bl1				\
    178 				-Iinclude/bl31				\
    179 				-Iinclude/common			\
    180 				-Iinclude/common/${ARCH}		\
    181 				-Iinclude/drivers			\
    182 				-Iinclude/drivers/arm			\
    183 				-Iinclude/drivers/auth			\
    184 				-Iinclude/drivers/io			\
    185 				-Iinclude/drivers/ti/uart		\
    186 				-Iinclude/lib				\
    187 				-Iinclude/lib/${ARCH}			\
    188 				-Iinclude/lib/cpus			\
    189 				-Iinclude/lib/cpus/${ARCH}		\
    190 				-Iinclude/lib/el3_runtime		\
    191 				-Iinclude/lib/el3_runtime/${ARCH}	\
    192 				-Iinclude/lib/pmf			\
    193 				-Iinclude/lib/psci			\
    194 				-Iinclude/lib/xlat_tables		\
    195 				-Iinclude/plat/common			\
    196 				-Iinclude/services			\
    197 				${PLAT_INCLUDES}			\
    198 				${SPD_INCLUDES}				\
    199 				-Iinclude/tools_share
    200 
    201 
    202 ################################################################################
    203 # Generic definitions
    204 ################################################################################
    205 
    206 include ${MAKE_HELPERS_DIRECTORY}plat_helpers.mk
    207 
    208 BUILD_BASE		:=	./build
    209 BUILD_PLAT		:=	${BUILD_BASE}/${PLAT}/${BUILD_TYPE}
    210 
    211 SPDS			:=	$(sort $(filter-out none, $(patsubst services/spd/%,%,$(wildcard services/spd/*))))
    212 
    213 # Platforms providing their own TBB makefile may override this value
    214 INCLUDE_TBBR_MK		:=	1
    215 
    216 
    217 ################################################################################
    218 # Include SPD Makefile if one has been specified
    219 ################################################################################
    220 
    221 ifneq (${SPD},none)
    222 ifeq (${ARCH},aarch32)
    223 	$(error "Error: SPD is incompatible with AArch32.")
    224 endif
    225 ifdef EL3_PAYLOAD_BASE
    226         $(warning "SPD and EL3_PAYLOAD_BASE are incompatible build options.")
    227         $(warning "The SPD and its BL32 companion will be present but ignored.")
    228 endif
    229         # We expect to locate an spd.mk under the specified SPD directory
    230         SPD_MAKE	:=	$(wildcard services/spd/${SPD}/${SPD}.mk)
    231 
    232         ifeq (${SPD_MAKE},)
    233                 $(error Error: No services/spd/${SPD}/${SPD}.mk located)
    234         endif
    235         $(info Including ${SPD_MAKE})
    236         include ${SPD_MAKE}
    237 
    238         # If there's BL32 companion for the chosen SPD, we expect that the SPD's
    239         # Makefile would set NEED_BL32 to "yes". In this case, the build system
    240         # supports two mutually exclusive options:
    241         # * BL32 is built from source: then BL32_SOURCES must contain the list
    242         #   of source files to build BL32
    243         # * BL32 is a prebuilt binary: then BL32 must point to the image file
    244         #   that will be included in the FIP
    245         # If both BL32_SOURCES and BL32 are defined, the binary takes precedence
    246         # over the sources.
    247 endif
    248 
    249 ################################################################################
    250 # Include libraries' Makefile that are used in all BL
    251 ################################################################################
    252 
    253 include lib/stack_protector/stack_protector.mk
    254 
    255 
    256 ################################################################################
    257 # Include the platform specific Makefile after the SPD Makefile (the platform
    258 # makefile may use all previous definitions in this file)
    259 ################################################################################
    260 
    261 include ${PLAT_MAKEFILE_FULL}
    262 
    263 # Platform compatibility is not supported in AArch32
    264 ifneq (${ARCH},aarch32)
    265 # If the platform has not defined ENABLE_PLAT_COMPAT, then enable it by default
    266 ifndef ENABLE_PLAT_COMPAT
    267 ENABLE_PLAT_COMPAT := 1
    268 endif
    269 
    270 # Include the platform compatibility helpers for PSCI
    271 ifneq (${ENABLE_PLAT_COMPAT}, 0)
    272 include plat/compat/plat_compat.mk
    273 endif
    274 endif
    275 
    276 # Include the CPU specific operations makefile, which provides default
    277 # values for all CPU errata workarounds and CPU specific optimisations.
    278 # This can be overridden by the platform.
    279 include lib/cpus/cpu-ops.mk
    280 
    281 ifeq (${ARCH},aarch32)
    282 NEED_BL32 := yes
    283 
    284 ################################################################################
    285 # Build `AARCH32_SP` as BL32 image for AArch32
    286 ################################################################################
    287 ifneq (${AARCH32_SP},none)
    288 # We expect to locate an sp.mk under the specified AARCH32_SP directory
    289 AARCH32_SP_MAKE	:=	$(wildcard bl32/${AARCH32_SP}/${AARCH32_SP}.mk)
    290 
    291 ifeq (${AARCH32_SP_MAKE},)
    292   $(error Error: No bl32/${AARCH32_SP}/${AARCH32_SP}.mk located)
    293 endif
    294 
    295 $(info Including ${AARCH32_SP_MAKE})
    296 include ${AARCH32_SP_MAKE}
    297 endif
    298 
    299 endif
    300 
    301 ################################################################################
    302 # Check incompatible options
    303 ################################################################################
    304 
    305 ifdef EL3_PAYLOAD_BASE
    306         ifdef PRELOADED_BL33_BASE
    307                 $(warning "PRELOADED_BL33_BASE and EL3_PAYLOAD_BASE are \
    308                 incompatible build options. EL3_PAYLOAD_BASE has priority.")
    309         endif
    310         ifneq (${GENERATE_COT},0)
    311                 $(error "GENERATE_COT and EL3_PAYLOAD_BASE are incompatible build options.")
    312         endif
    313         ifneq (${TRUSTED_BOARD_BOOT},0)
    314                 $(error "TRUSTED_BOARD_BOOT and EL3_PAYLOAD_BASE are incompatible build options.")
    315         endif
    316 endif
    317 
    318 ifeq (${NEED_BL33},yes)
    319         ifdef EL3_PAYLOAD_BASE
    320                 $(warning "BL33 image is not needed when option \
    321                 BL33_PAYLOAD_BASE is used and won't be added to the FIP file.")
    322         endif
    323         ifdef PRELOADED_BL33_BASE
    324                 $(warning "BL33 image is not needed when option \
    325                 PRELOADED_BL33_BASE is used and won't be added to the FIP \
    326                 file.")
    327         endif
    328 endif
    329 
    330 # For AArch32, LOAD_IMAGE_V2 must be enabled.
    331 ifeq (${ARCH},aarch32)
    332     ifeq (${LOAD_IMAGE_V2}, 0)
    333         $(error "For AArch32, LOAD_IMAGE_V2 must be enabled.")
    334     endif
    335 endif
    336 
    337 # When building for systems with hardware-assisted coherency, there's no need to
    338 # use USE_COHERENT_MEM. Require that USE_COHERENT_MEM must be set to 0 too.
    339 ifeq ($(HW_ASSISTED_COHERENCY)-$(USE_COHERENT_MEM),1-1)
    340 $(error USE_COHERENT_MEM cannot be enabled with HW_ASSISTED_COHERENCY)
    341 endif
    342 
    343 ################################################################################
    344 # Process platform overrideable behaviour
    345 ################################################################################
    346 
    347 # Using the ARM Trusted Firmware BL2 implies that a BL33 image also needs to be
    348 # supplied for the FIP and Certificate generation tools. This flag can be
    349 # overridden by the platform.
    350 ifdef BL2_SOURCES
    351         ifdef EL3_PAYLOAD_BASE
    352                 # If booting an EL3 payload there is no need for a BL33 image
    353                 # in the FIP file.
    354                 NEED_BL33		:=	no
    355         else
    356                 ifdef PRELOADED_BL33_BASE
    357                         # If booting a BL33 preloaded image there is no need of
    358                         # another one in the FIP file.
    359                         NEED_BL33		:=	no
    360                 else
    361                         NEED_BL33		?=	yes
    362                 endif
    363         endif
    364 endif
    365 
    366 # If SCP_BL2 is given, we always want FIP to include it.
    367 ifdef SCP_BL2
    368         NEED_SCP_BL2		:=	yes
    369 endif
    370 
    371 # Process TBB related flags
    372 ifneq (${GENERATE_COT},0)
    373         # Common cert_create options
    374         ifneq (${CREATE_KEYS},0)
    375                 $(eval CRT_ARGS += -n)
    376                 $(eval FWU_CRT_ARGS += -n)
    377                 ifneq (${SAVE_KEYS},0)
    378                         $(eval CRT_ARGS += -k)
    379                         $(eval FWU_CRT_ARGS += -k)
    380                 endif
    381         endif
    382         # Include TBBR makefile (unless the platform indicates otherwise)
    383         ifeq (${INCLUDE_TBBR_MK},1)
    384                 include make_helpers/tbbr/tbbr_tools.mk
    385         endif
    386 endif
    387 
    388 ifneq (${FIP_ALIGN},0)
    389 FIP_ARGS += --align ${FIP_ALIGN}
    390 endif
    391 
    392 ################################################################################
    393 # Auxiliary tools (fiptool, cert_create, etc)
    394 ################################################################################
    395 
    396 # Variables for use with Certificate Generation Tool
    397 CRTTOOLPATH		?=	tools/cert_create
    398 CRTTOOL			?=	${CRTTOOLPATH}/cert_create${BIN_EXT}
    399 
    400 # Variables for use with Firmware Image Package
    401 FIPTOOLPATH		?=	tools/fiptool
    402 FIPTOOL			?=	${FIPTOOLPATH}/fiptool${BIN_EXT}
    403 
    404 ################################################################################
    405 # Include BL specific makefiles
    406 ################################################################################
    407 ifdef BL1_SOURCES
    408 NEED_BL1 := yes
    409 include bl1/bl1.mk
    410 endif
    411 
    412 ifdef BL2_SOURCES
    413 NEED_BL2 := yes
    414 include bl2/bl2.mk
    415 endif
    416 
    417 ifdef BL2U_SOURCES
    418 NEED_BL2U := yes
    419 include bl2u/bl2u.mk
    420 endif
    421 
    422 # For AArch32, BL31 is not currently supported.
    423 ifneq (${ARCH},aarch32)
    424 ifdef BL31_SOURCES
    425 # When booting an EL3 payload, there is no need to compile the BL31 image nor
    426 # put it in the FIP.
    427 ifndef EL3_PAYLOAD_BASE
    428 NEED_BL31 := yes
    429 include bl31/bl31.mk
    430 endif
    431 endif
    432 endif
    433 
    434 ################################################################################
    435 # Build options checks
    436 ################################################################################
    437 
    438 $(eval $(call assert_boolean,COLD_BOOT_SINGLE_CPU))
    439 $(eval $(call assert_boolean,CREATE_KEYS))
    440 $(eval $(call assert_boolean,CTX_INCLUDE_AARCH32_REGS))
    441 $(eval $(call assert_boolean,CTX_INCLUDE_FPREGS))
    442 $(eval $(call assert_boolean,DEBUG))
    443 $(eval $(call assert_boolean,DISABLE_PEDANTIC))
    444 $(eval $(call assert_boolean,ENABLE_ASSERTIONS))
    445 $(eval $(call assert_boolean,ENABLE_PLAT_COMPAT))
    446 $(eval $(call assert_boolean,ENABLE_PMF))
    447 $(eval $(call assert_boolean,ENABLE_PSCI_STAT))
    448 $(eval $(call assert_boolean,ENABLE_RUNTIME_INSTRUMENTATION))
    449 $(eval $(call assert_boolean,ENABLE_SPE_FOR_LOWER_ELS))
    450 $(eval $(call assert_boolean,ERROR_DEPRECATED))
    451 $(eval $(call assert_boolean,GENERATE_COT))
    452 $(eval $(call assert_boolean,GICV2_G0_FOR_EL3))
    453 $(eval $(call assert_boolean,HW_ASSISTED_COHERENCY))
    454 $(eval $(call assert_boolean,LOAD_IMAGE_V2))
    455 $(eval $(call assert_boolean,NS_TIMER_SWITCH))
    456 $(eval $(call assert_boolean,PL011_GENERIC_UART))
    457 $(eval $(call assert_boolean,PROGRAMMABLE_RESET_ADDRESS))
    458 $(eval $(call assert_boolean,PSCI_EXTENDED_STATE_ID))
    459 $(eval $(call assert_boolean,RESET_TO_BL31))
    460 $(eval $(call assert_boolean,SAVE_KEYS))
    461 $(eval $(call assert_boolean,SEPARATE_CODE_AND_RODATA))
    462 $(eval $(call assert_boolean,SPIN_ON_BL1_EXIT))
    463 $(eval $(call assert_boolean,TRUSTED_BOARD_BOOT))
    464 $(eval $(call assert_boolean,USE_COHERENT_MEM))
    465 $(eval $(call assert_boolean,USE_TBBR_DEFS))
    466 $(eval $(call assert_boolean,WARMBOOT_ENABLE_DCACHE_EARLY))
    467 
    468 $(eval $(call assert_numeric,ARM_ARCH_MAJOR))
    469 $(eval $(call assert_numeric,ARM_ARCH_MINOR))
    470 
    471 ################################################################################
    472 # Add definitions to the cpp preprocessor based on the current build options.
    473 # This is done after including the platform specific makefile to allow the
    474 # platform to overwrite the default options
    475 ################################################################################
    476 
    477 $(eval $(call add_define,ARM_ARCH_MAJOR))
    478 $(eval $(call add_define,ARM_ARCH_MINOR))
    479 $(eval $(call add_define,ARM_GIC_ARCH))
    480 $(eval $(call add_define,COLD_BOOT_SINGLE_CPU))
    481 $(eval $(call add_define,CTX_INCLUDE_AARCH32_REGS))
    482 $(eval $(call add_define,CTX_INCLUDE_FPREGS))
    483 $(eval $(call add_define,ENABLE_ASSERTIONS))
    484 $(eval $(call add_define,ENABLE_PLAT_COMPAT))
    485 $(eval $(call add_define,ENABLE_PMF))
    486 $(eval $(call add_define,ENABLE_PSCI_STAT))
    487 $(eval $(call add_define,ENABLE_RUNTIME_INSTRUMENTATION))
    488 $(eval $(call add_define,ENABLE_SPE_FOR_LOWER_ELS))
    489 $(eval $(call add_define,ERROR_DEPRECATED))
    490 $(eval $(call add_define,GICV2_G0_FOR_EL3))
    491 $(eval $(call add_define,HW_ASSISTED_COHERENCY))
    492 $(eval $(call add_define,LOAD_IMAGE_V2))
    493 $(eval $(call add_define,LOG_LEVEL))
    494 $(eval $(call add_define,NS_TIMER_SWITCH))
    495 $(eval $(call add_define,PL011_GENERIC_UART))
    496 $(eval $(call add_define,PLAT_${PLAT}))
    497 $(eval $(call add_define,PROGRAMMABLE_RESET_ADDRESS))
    498 $(eval $(call add_define,PSCI_EXTENDED_STATE_ID))
    499 $(eval $(call add_define,RESET_TO_BL31))
    500 $(eval $(call add_define,SEPARATE_CODE_AND_RODATA))
    501 $(eval $(call add_define,SPD_${SPD}))
    502 $(eval $(call add_define,SPIN_ON_BL1_EXIT))
    503 $(eval $(call add_define,TRUSTED_BOARD_BOOT))
    504 $(eval $(call add_define,USE_COHERENT_MEM))
    505 $(eval $(call add_define,USE_TBBR_DEFS))
    506 $(eval $(call add_define,WARMBOOT_ENABLE_DCACHE_EARLY))
    507 
    508 # Define the EL3_PAYLOAD_BASE flag only if it is provided.
    509 ifdef EL3_PAYLOAD_BASE
    510         $(eval $(call add_define,EL3_PAYLOAD_BASE))
    511 else
    512         # Define the PRELOADED_BL33_BASE flag only if it is provided and
    513         # EL3_PAYLOAD_BASE is not defined, as it has priority.
    514         ifdef PRELOADED_BL33_BASE
    515                 $(eval $(call add_define,PRELOADED_BL33_BASE))
    516         endif
    517 endif
    518 # Define the AARCH32/AARCH64 flag based on the ARCH flag
    519 ifeq (${ARCH},aarch32)
    520         $(eval $(call add_define,AARCH32))
    521 else
    522         $(eval $(call add_define,AARCH64))
    523 endif
    524 
    525 ################################################################################
    526 # Build targets
    527 ################################################################################
    528 
    529 .PHONY:	all msg_start clean realclean distclean cscope locate-checkpatch checkcodebase checkpatch fiptool fip fwu_fip certtool
    530 .SUFFIXES:
    531 
    532 all: msg_start
    533 
    534 msg_start:
    535 	@echo "Building ${PLAT}"
    536 
    537 # Check if deprecated declarations should be treated as error or not.
    538 ifeq (${ERROR_DEPRECATED},0)
    539     TF_CFLAGS		+= 	-Wno-error=deprecated-declarations
    540 endif
    541 
    542 # Expand build macros for the different images
    543 ifeq (${NEED_BL1},yes)
    544 $(eval $(call MAKE_BL,1))
    545 endif
    546 
    547 ifeq (${NEED_BL2},yes)
    548 $(if ${BL2}, $(eval $(call MAKE_TOOL_ARGS,2,${BL2},tb-fw)),\
    549 	$(eval $(call MAKE_BL,2,tb-fw)))
    550 endif
    551 
    552 ifeq (${NEED_SCP_BL2},yes)
    553 $(eval $(call FIP_ADD_IMG,SCP_BL2,--scp-fw))
    554 endif
    555 
    556 ifeq (${NEED_BL31},yes)
    557 BL31_SOURCES += ${SPD_SOURCES}
    558 $(if ${BL31}, $(eval $(call MAKE_TOOL_ARGS,31,${BL31},soc-fw)),\
    559 	$(eval $(call MAKE_BL,31,soc-fw)))
    560 endif
    561 
    562 # If a BL32 image is needed but neither BL32 nor BL32_SOURCES is defined, the
    563 # build system will call FIP_ADD_IMG to print a warning message and abort the
    564 # process. Note that the dependency on BL32 applies to the FIP only.
    565 ifeq (${NEED_BL32},yes)
    566 $(if ${BL32}, $(eval $(call MAKE_TOOL_ARGS,32,${BL32},tos-fw)),\
    567 	$(if ${BL32_SOURCES}, $(eval $(call MAKE_BL,32,tos-fw)),\
    568 		$(eval $(call FIP_ADD_IMG,BL32,--tos-fw))))
    569 endif
    570 
    571 # Add the BL33 image if required by the platform
    572 ifeq (${NEED_BL33},yes)
    573 $(eval $(call FIP_ADD_IMG,BL33,--nt-fw))
    574 endif
    575 
    576 ifeq (${NEED_BL2U},yes)
    577 BL2U_PATH	:= $(if ${BL2U},${BL2U},$(call IMG_BIN,2u))
    578 $(if ${BL2U}, ,$(eval $(call MAKE_BL,2u)))
    579 $(eval $(call FWU_FIP_ADD_PAYLOAD,${BL2U_PATH},--ap-fwu-cfg))
    580 endif
    581 
    582 locate-checkpatch:
    583 ifndef CHECKPATCH
    584 	$(error "Please set CHECKPATCH to point to the Linux checkpatch.pl file, eg: CHECKPATCH=../linux/scripts/checkpatch.pl")
    585 else
    586 ifeq (,$(wildcard ${CHECKPATCH}))
    587 	$(error "The file CHECKPATCH points to cannot be found, use eg: CHECKPATCH=../linux/scripts/checkpatch.pl")
    588 endif
    589 endif
    590 
    591 clean:
    592 	@echo "  CLEAN"
    593 	$(call SHELL_REMOVE_DIR,${BUILD_PLAT})
    594 	${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean
    595 	${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} clean
    596 
    597 realclean distclean:
    598 	@echo "  REALCLEAN"
    599 	$(call SHELL_REMOVE_DIR,${BUILD_BASE})
    600 	$(call SHELL_DELETE_ALL, ${CURDIR}/cscope.*)
    601 	${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean
    602 	${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} clean
    603 
    604 checkcodebase:		locate-checkpatch
    605 	@echo "  CHECKING STYLE"
    606 	@if test -d .git ; then						\
    607 		git ls-files | grep -E -v 'libfdt|stdlib|docs|\.md' |	\
    608 		while read GIT_FILE ;					\
    609 		do ${CHECKPATCH} ${CHECKCODE_ARGS} -f $$GIT_FILE ;	\
    610 		done ;							\
    611 	else								\
    612 		 find . -type f -not -iwholename "*.git*"		\
    613 		 -not -iwholename "*build*"				\
    614 		 -not -iwholename "*libfdt*"				\
    615 		 -not -iwholename "*stdlib*"				\
    616 		 -not -iwholename "*docs*"				\
    617 		 -not -iwholename "*.md"				\
    618 		 -exec ${CHECKPATCH} ${CHECKCODE_ARGS} -f {} \; ;	\
    619 	fi
    620 
    621 checkpatch:		locate-checkpatch
    622 	@echo "  CHECKING STYLE"
    623 	${Q}git format-patch --stdout ${BASE_COMMIT}..HEAD -- ${CHECK_PATHS} | ${CHECKPATCH} - || true
    624 
    625 certtool: ${CRTTOOL}
    626 
    627 .PHONY: ${CRTTOOL}
    628 ${CRTTOOL}:
    629 	${Q}${MAKE} PLAT=${PLAT} USE_TBBR_DEFS=${USE_TBBR_DEFS} --no-print-directory -C ${CRTTOOLPATH}
    630 	@${ECHO_BLANK_LINE}
    631 	@echo "Built $@ successfully"
    632 	@${ECHO_BLANK_LINE}
    633 
    634 ifneq (${GENERATE_COT},0)
    635 certificates: ${CRT_DEPS} ${CRTTOOL}
    636 	${Q}${CRTTOOL} ${CRT_ARGS}
    637 	@${ECHO_BLANK_LINE}
    638 	@echo "Built $@ successfully"
    639 	@echo "Certificates can be found in ${BUILD_PLAT}"
    640 	@${ECHO_BLANK_LINE}
    641 endif
    642 
    643 ${BUILD_PLAT}/${FIP_NAME}: ${FIP_DEPS} ${FIPTOOL}
    644 	${Q}${FIPTOOL} create ${FIP_ARGS} $@
    645 	${Q}${FIPTOOL} info $@
    646 	@${ECHO_BLANK_LINE}
    647 	@echo "Built $@ successfully"
    648 	@${ECHO_BLANK_LINE}
    649 
    650 ifneq (${GENERATE_COT},0)
    651 fwu_certificates: ${FWU_CRT_DEPS} ${CRTTOOL}
    652 	${Q}${CRTTOOL} ${FWU_CRT_ARGS}
    653 	@${ECHO_BLANK_LINE}
    654 	@echo "Built $@ successfully"
    655 	@echo "FWU certificates can be found in ${BUILD_PLAT}"
    656 	@${ECHO_BLANK_LINE}
    657 endif
    658 
    659 ${BUILD_PLAT}/${FWU_FIP_NAME}: ${FWU_FIP_DEPS} ${FIPTOOL}
    660 	${Q}${FIPTOOL} create ${FWU_FIP_ARGS} $@
    661 	${Q}${FIPTOOL} info $@
    662 	@${ECHO_BLANK_LINE}
    663 	@echo "Built $@ successfully"
    664 	@${ECHO_BLANK_LINE}
    665 
    666 fiptool: ${FIPTOOL}
    667 fip: ${BUILD_PLAT}/${FIP_NAME}
    668 fwu_fip: ${BUILD_PLAT}/${FWU_FIP_NAME}
    669 
    670 .PHONY: ${FIPTOOL}
    671 ${FIPTOOL}:
    672 	${Q}${MAKE} CPPFLAGS="-DVERSION='\"${VERSION_STRING}\"'" --no-print-directory -C ${FIPTOOLPATH}
    673 
    674 cscope:
    675 	@echo "  CSCOPE"
    676 	${Q}find ${CURDIR} -name "*.[chsS]" > cscope.files
    677 	${Q}cscope -b -q -k
    678 
    679 help:
    680 	@echo "usage: ${MAKE} PLAT=<${PLATFORM_LIST}> [OPTIONS] [TARGET]"
    681 	@echo ""
    682 	@echo "PLAT is used to specify which platform you wish to build."
    683 	@echo "If no platform is specified, PLAT defaults to: ${DEFAULT_PLAT}"
    684 	@echo ""
    685 	@echo "Please refer to the User Guide for a list of all supported options."
    686 	@echo "Note that the build system doesn't track dependencies for build "
    687 	@echo "options. Therefore, if any of the build options are changed "
    688 	@echo "from a previous build, a clean build must be performed."
    689 	@echo ""
    690 	@echo "Supported Targets:"
    691 	@echo "  all            Build all individual bootloader binaries"
    692 	@echo "  bl1            Build the BL1 binary"
    693 	@echo "  bl2            Build the BL2 binary"
    694 	@echo "  bl2u           Build the BL2U binary"
    695 	@echo "  bl31           Build the BL31 binary"
    696 	@echo "  bl32           Build the BL32 binary. If ARCH=aarch32, then "
    697 	@echo "                 this builds secure payload specified by AARCH32_SP"
    698 	@echo "  certificates   Build the certificates (requires 'GENERATE_COT=1')"
    699 	@echo "  fip            Build the Firmware Image Package (FIP)"
    700 	@echo "  fwu_fip        Build the FWU Firmware Image Package (FIP)"
    701 	@echo "  checkcodebase  Check the coding style of the entire source tree"
    702 	@echo "  checkpatch     Check the coding style on changes in the current"
    703 	@echo "                 branch against BASE_COMMIT (default origin/master)"
    704 	@echo "  clean          Clean the build for the selected platform"
    705 	@echo "  cscope         Generate cscope index"
    706 	@echo "  distclean      Remove all build artifacts for all platforms"
    707 	@echo "  certtool       Build the Certificate generation tool"
    708 	@echo "  fiptool        Build the Firmware Image Package (FIP) creation tool"
    709 	@echo ""
    710 	@echo "Note: most build targets require PLAT to be set to a specific platform."
    711 	@echo ""
    712 	@echo "example: build all targets for the FVP platform:"
    713 	@echo "  CROSS_COMPILE=aarch64-none-elf- make PLAT=fvp all"
    714