2 # Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
4 # SPDX-License-Identifier: BSD-3-Clause
8 # Trusted Firmware Version
13 # Default goal is build all images
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.
21 MAKE_HELPERS_DIRECTORY
:= make_helpers
/
22 include ${MAKE_HELPERS_DIRECTORY}build_macros.mk
23 include ${MAKE_HELPERS_DIRECTORY}build_env.mk
25 ################################################################################
26 # Default values for build configurations, and their dependencies
27 ################################################################################
30 $(warning ASM_ASSERTION is removed
, use ENABLE_ASSERTIONS instead.
)
33 include ${MAKE_HELPERS_DIRECTORY}defaults.mk
35 # Assertions enabled for DEBUG builds by default
36 ENABLE_ASSERTIONS
:= ${DEBUG}
37 ENABLE_PMF
:= ${ENABLE_RUNTIME_INSTRUMENTATION}
38 PLAT
:= ${DEFAULT_PLAT}
40 ################################################################################
41 # Checkpatch script options
42 ################################################################################
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 \
49 $(wildcard include/lib
/*)))
50 INC_DIRS_TO_CHECK
:= $(sort $(filter-out \
52 $(wildcard include/*)))
53 LIB_DIRS_TO_CHECK
:= $(sort $(filter-out \
58 ROOT_DIRS_TO_CHECK
:= $(sort $(filter-out \
64 CHECK_PATHS
:= ${ROOT_DIRS_TO_CHECK} \
65 ${INC_DIRS_TO_CHECK} \
66 ${INC_LIB_DIRS_TO_CHECK} \
70 ################################################################################
71 # Process build options
72 ################################################################################
78 CHECKCODE_ARGS
+= --no-summary
--terse
84 ifneq ($(findstring s
,$(filter-out --%,$(MAKEFLAGS
))),)
92 $(eval
$(call add_define
,DEBUG
))
97 ifneq ($(findstring clang
,$(notdir $(CC
))),)
100 ASFLAGS
+= -g
-Wa
,--gdwarf-2
103 # Use LOG_LEVEL_INFO by default for debug builds
106 BUILD_TYPE
:= release
107 # Use LOG_LEVEL_NOTICE by default for release builds
111 # Default build string (git branch and commit)
112 ifeq (${BUILD_STRING},)
113 BUILD_STRING
:= $(shell git describe
--always
--dirty
--tags 2> /dev
/null
)
115 VERSION_STRING
:= v
${VERSION_MAJOR}.
${VERSION_MINOR}(${BUILD_TYPE}):${BUILD_STRING}
117 # The cert_create tool cannot generate certificates individually, so we use the
118 # target 'certificates' to create them all
119 ifneq (${GENERATE_COT},0)
120 FIP_DEPS
+= certificates
121 FWU_FIP_DEPS
+= fwu_certificates
125 ################################################################################
127 ################################################################################
132 CC
:= ${CROSS_COMPILE}gcc
133 CPP
:= ${CROSS_COMPILE}cpp
134 AS
:= ${CROSS_COMPILE}gcc
135 AR
:= ${CROSS_COMPILE}ar
136 LINKER
:= ${CROSS_COMPILE}ld
137 OC
:= ${CROSS_COMPILE}objcopy
138 OD
:= ${CROSS_COMPILE}objdump
139 NM
:= ${CROSS_COMPILE}nm
140 PP
:= ${CROSS_COMPILE}gcc
-E
143 # Use ${LD}.bfd instead if it exists (as absolute path or together with $PATH).
144 ifneq ($(strip $(wildcard ${LD}.bfd
) \
145 $(foreach dir,$(subst :, ,${PATH}),$(wildcard ${dir}/${LINKER}.bfd
))),)
146 LINKER
:= ${LINKER}.bfd
149 ifeq (${ARM_ARCH_MAJOR},7)
150 target32-directive
= -target arm-none-eabi
151 # Will set march32-directive from platform configuration
153 target32-directive
= -target armv8a-none-eabi
154 march32-directive
= -march
=armv8-a
157 ifneq ($(findstring armclang
,$(notdir $(CC
))),)
158 TF_CFLAGS_aarch32
= -target arm-arm-none-eabi
$(march32-directive
)
159 TF_CFLAGS_aarch64
= -target aarch64-arm-none-eabi
-march
=armv8-a
161 AS
= $(CC
) -c
-x assembler-with-cpp
$(TF_CFLAGS_
$(ARCH
))
162 CPP
= $(CC
) -E
$(TF_CFLAGS_
$(ARCH
))
163 PP
= $(CC
) -E
$(TF_CFLAGS_
$(ARCH
))
164 else ifneq ($(findstring clang
,$(notdir $(CC
))),)
165 TF_CFLAGS_aarch32
= $(target32-directive
) $(march32-directive
)
166 TF_CFLAGS_aarch64
= -target aarch64-elf
168 AS
= $(CC
) -c
-x assembler-with-cpp
$(TF_CFLAGS_
$(ARCH
))
172 TF_CFLAGS_aarch32
= $(march32-directive
)
173 TF_CFLAGS_aarch64
= -march
=armv8-a
177 ifeq (${AARCH32_INSTRUCTION_SET},A32
)
178 TF_CFLAGS_aarch32
+= -marm
179 else ifeq (${AARCH32_INSTRUCTION_SET},T32
)
180 TF_CFLAGS_aarch32
+= -mthumb
182 $(error Error
: Unknown AArch32 instruction set
${AARCH32_INSTRUCTION_SET})
185 TF_CFLAGS_aarch32
+= -mno-unaligned-access
186 TF_CFLAGS_aarch64
+= -mgeneral-regs-only
-mstrict-align
188 ASFLAGS_aarch32
= $(march32-directive
)
189 ASFLAGS_aarch64
= -march
=armv8-a
192 WARNING1
+= -Wunused
-Wno-unused-parameter
193 WARNING1
+= -Wmissing-declarations
194 WARNING1
+= -Wmissing-format-attribute
195 WARNING1
+= -Wmissing-prototypes
196 WARNING1
+= -Wold-style-definition
197 WARNING1
+= -Wunused-but-set-variable
198 WARNING1
+= -Wunused-const-variable
200 WARNING2
:= -Waggregate-return
201 WARNING2
+= -Wcast-align
202 WARNING2
+= -Wdisabled-optimization
203 WARNING2
+= -Wnested-externs
205 WARNING2
+= -Wlogical-op
206 WARNING2
+= -Wmissing-field-initializers
207 WARNING2
+= -Wsign-compare
208 WARNING2
+= -Wmaybe-uninitialized
210 WARNING3
:= -Wbad-function-cast
211 WARNING3
+= -Wcast-qual
212 WARNING3
+= -Wconversion
215 WARNING3
+= -Wpointer-arith
216 WARNING3
+= -Wredundant-decls
217 WARNING3
+= -Wswitch-default
218 WARNING3
+= -Wpacked-bitfield-compat
222 WARNINGS
:= $(WARNING1
)
224 WARNINGS
:= $(WARNING1
) $(WARNING2
)
226 WARNINGS
:= $(WARNING1
) $(WARNING2
) $(WARNING3
)
233 CPPFLAGS
= ${DEFINES} ${INCLUDES} ${MBEDTLS_INC} -nostdinc \
234 -Wmissing-include-dirs
$(ERRORS
) $(WARNINGS
)
235 ASFLAGS
+= $(CPPFLAGS
) $(ASFLAGS_
$(ARCH
)) \
236 -D__ASSEMBLY__
-ffreestanding \
238 TF_CFLAGS
+= $(CPPFLAGS
) $(TF_CFLAGS_
$(ARCH
)) \
239 -ffreestanding
-fno-builtin
-Wall
-std
=gnu99 \
240 -Os
-ffunction-sections
-fdata-sections
242 GCC_V_OUTPUT
:= $(shell $(CC
) -v
2>&1)
244 TF_LDFLAGS
+= --fatal-warnings
-O1
245 TF_LDFLAGS
+= --gc-sections
246 TF_LDFLAGS
+= $(TF_LDFLAGS_
$(ARCH
))
248 DTC_FLAGS
+= -I dts
-O dtb
250 ################################################################################
251 # Common sources and include directories
252 ################################################################################
253 include lib
/compiler-rt
/compiler-rt.mk
254 include lib
/libc
/libc.mk
256 BL_COMMON_SOURCES
+= common
/bl_common.c \
258 common
/${ARCH}/debug.S \
259 drivers
/console
/multi_console.c \
260 lib
/${ARCH}/cache_helpers.S \
261 lib
/${ARCH}/misc_helpers.S \
262 plat
/common
/plat_bl_common.c \
263 plat
/common
/plat_log_common.c \
264 plat
/common
/${ARCH}/plat_common.c \
265 plat
/common
/${ARCH}/platform_helpers.S \
268 ifeq ($(notdir $(CC
)),armclang
)
269 BL_COMMON_SOURCES
+= lib
/${ARCH}/armclang_printf.S
272 INCLUDES
+= -Iinclude \
273 -Iinclude
/arch
/${ARCH} \
274 -Iinclude
/lib
/cpus
/${ARCH} \
275 -Iinclude
/lib
/el3_runtime
/${ARCH} \
279 ifeq (${ERROR_DEPRECATED},0)
280 INCLUDES
+= -Iinclude
/bl1 \
285 -Iinclude
/drivers
/arm \
286 -Iinclude
/drivers
/auth \
287 -Iinclude
/drivers
/io \
288 -Iinclude
/drivers
/ti
/uart \
291 -Iinclude
/lib
/el3_runtime \
292 -Iinclude
/lib
/extensions \
295 -Iinclude
/lib
/xlat_tables \
296 -Iinclude
/plat
/common \
298 -Iinclude
/tools_share
301 include common
/backtrace
/backtrace.mk
303 ################################################################################
304 # Generic definitions
305 ################################################################################
307 include ${MAKE_HELPERS_DIRECTORY}plat_helpers.mk
309 BUILD_BASE
:= .
/build
310 BUILD_PLAT
:= ${BUILD_BASE}/${PLAT}/${BUILD_TYPE}
312 SPDS
:= $(sort $(filter-out none
, $(patsubst services
/spd
/%,%,$(wildcard services
/spd
/*))))
314 # Platforms providing their own TBB makefile may override this value
318 ################################################################################
319 # Include SPD Makefile if one has been specified
320 ################################################################################
323 ifeq (${ARCH},aarch32
)
324 $(error
"Error: SPD is incompatible with AArch32.")
326 ifdef EL3_PAYLOAD_BASE
327 $(warning
"SPD and EL3_PAYLOAD_BASE are incompatible build options.")
328 $(warning
"The SPD and its BL32 companion will be present but ignored.")
330 # We expect to locate an spd.mk under the specified SPD directory
331 SPD_MAKE
:= $(wildcard services
/spd
/${SPD}/${SPD}.mk
)
334 $(error Error
: No services
/spd
/${SPD}/${SPD}.mk located
)
336 $(info Including
${SPD_MAKE})
339 # If there's BL32 companion for the chosen SPD, we expect that the SPD's
340 # Makefile would set NEED_BL32 to "yes". In this case, the build system
341 # supports two mutually exclusive options:
342 # * BL32 is built from source: then BL32_SOURCES must contain the list
343 # of source files to build BL32
344 # * BL32 is a prebuilt binary: then BL32 must point to the image file
345 # that will be included in the FIP
346 # If both BL32_SOURCES and BL32 are defined, the binary takes precedence
350 ################################################################################
351 # Include the platform specific Makefile after the SPD Makefile (the platform
352 # makefile may use all previous definitions in this file)
353 ################################################################################
355 include ${PLAT_MAKEFILE_FULL}
357 $(eval
$(call MAKE_PREREQ_DIR
,${BUILD_PLAT}))
359 ifeq (${ARM_ARCH_MAJOR},7)
360 include make_helpers
/armv7-a-cpus.mk
363 ifeq ($(ENABLE_PIE
),1)
367 PIE_FOUND
:= $(findstring --enable-default-pie
,${GCC_V_OUTPUT})
368 ifneq ($(PIE_FOUND
),)
369 TF_CFLAGS
+= -fno-PIE
373 # Include the CPU specific operations makefile, which provides default
374 # values for all CPU errata workarounds and CPU specific optimisations.
375 # This can be overridden by the platform.
376 include lib
/cpus
/cpu-ops.mk
378 ifeq (${ARCH},aarch32
)
381 ################################################################################
382 # Build `AARCH32_SP` as BL32 image for AArch32
383 ################################################################################
384 ifneq (${AARCH32_SP},none
)
385 # We expect to locate an sp.mk under the specified AARCH32_SP directory
386 AARCH32_SP_MAKE
:= $(wildcard bl32
/${AARCH32_SP}/${AARCH32_SP}.mk
)
388 ifeq (${AARCH32_SP_MAKE},)
389 $(error Error
: No bl32
/${AARCH32_SP}/${AARCH32_SP}.mk located
)
392 $(info Including
${AARCH32_SP_MAKE})
393 include ${AARCH32_SP_MAKE}
398 ################################################################################
399 # Check incompatible options
400 ################################################################################
402 ifdef EL3_PAYLOAD_BASE
403 ifdef PRELOADED_BL33_BASE
404 $(warning
"PRELOADED_BL33_BASE and EL3_PAYLOAD_BASE are \
405 incompatible build options. EL3_PAYLOAD_BASE has priority.")
407 ifneq (${GENERATE_COT},0)
408 $(error
"GENERATE_COT and EL3_PAYLOAD_BASE are incompatible build options.")
410 ifneq (${TRUSTED_BOARD_BOOT},0)
411 $(error
"TRUSTED_BOARD_BOOT and EL3_PAYLOAD_BASE are incompatible build options.")
415 ifeq (${NEED_BL33},yes
)
416 ifdef EL3_PAYLOAD_BASE
417 $(warning
"BL33 image is not needed when option \
418 BL33_PAYLOAD_BASE is used and won't be added to the FIP file.")
420 ifdef PRELOADED_BL33_BASE
421 $(warning
"BL33 image is not needed when option \
422 PRELOADED_BL33_BASE is used and won't be added to the FIP \
427 # When building for systems with hardware-assisted coherency, there's no need to
428 # use USE_COHERENT_MEM. Require that USE_COHERENT_MEM must be set to 0 too.
429 ifeq ($(HW_ASSISTED_COHERENCY
)-$(USE_COHERENT_MEM
),1-1)
430 $(error USE_COHERENT_MEM cannot be enabled with HW_ASSISTED_COHERENCY
)
433 #For now, BL2_IN_XIP_MEM is only supported when BL2_AT_EL3 is 1.
434 ifeq ($(BL2_AT_EL3
)-$(BL2_IN_XIP_MEM
),0-1)
435 $(error
"BL2_IN_XIP_MEM is only supported when BL2_AT_EL3 is enabled")
438 # SMC Calling Convention checks
439 ifneq (${SMCCC_MAJOR_VERSION},1)
441 $(error
"SMC Calling Convention 1.X must be used with SPDs")
443 ifeq (${ARCH},aarch32
)
444 $(error
"Only SMCCC 1.X is supported in AArch32 mode.")
448 # For RAS_EXTENSION, require that EAs are handled in EL3 first
449 ifeq ($(RAS_EXTENSION
),1)
450 ifneq ($(HANDLE_EA_EL3_FIRST
),1)
451 $(error For RAS_EXTENSION
, HANDLE_EA_EL3_FIRST must also be
1)
455 # When FAULT_INJECTION_SUPPORT is used, require that RAS_EXTENSION is enabled
456 ifeq ($(FAULT_INJECTION_SUPPORT
),1)
457 ifneq ($(RAS_EXTENSION
),1)
458 $(error For FAULT_INJECTION_SUPPORT
, RAS_EXTENSION must also be
1)
462 # DYN_DISABLE_AUTH can be set only when TRUSTED_BOARD_BOOT=1
463 ifeq ($(DYN_DISABLE_AUTH
), 1)
464 ifeq (${TRUSTED_BOARD_BOOT}, 0)
465 $(error
"TRUSTED_BOARD_BOOT must be enabled for DYN_DISABLE_AUTH to be set.")
469 ################################################################################
470 # Process platform overrideable behaviour
471 ################################################################################
473 # Using the ARM Trusted Firmware BL2 implies that a BL33 image also needs to be
474 # supplied for the FIP and Certificate generation tools. This flag can be
475 # overridden by the platform.
477 ifdef EL3_PAYLOAD_BASE
478 # If booting an EL3 payload there is no need for a BL33 image
482 ifdef PRELOADED_BL33_BASE
483 # If booting a BL33 preloaded image there is no need of
484 # another one in the FIP file.
492 # If SCP_BL2 is given, we always want FIP to include it.
497 # For AArch32, BL31 is not currently supported.
498 ifneq (${ARCH},aarch32
)
500 # When booting an EL3 payload, there is no need to compile the BL31 image nor
502 ifndef EL3_PAYLOAD_BASE
508 # Process TBB related flags
509 ifneq (${GENERATE_COT},0)
510 # Common cert_create options
511 ifneq (${CREATE_KEYS},0)
512 $(eval CRT_ARGS
+= -n
)
513 $(eval FWU_CRT_ARGS
+= -n
)
514 ifneq (${SAVE_KEYS},0)
515 $(eval CRT_ARGS
+= -k
)
516 $(eval FWU_CRT_ARGS
+= -k
)
519 # Include TBBR makefile (unless the platform indicates otherwise)
520 ifeq (${INCLUDE_TBBR_MK},1)
521 include make_helpers
/tbbr
/tbbr_tools.mk
525 ifneq (${FIP_ALIGN},0)
526 FIP_ARGS
+= --align
${FIP_ALIGN}
529 ################################################################################
530 # Include libraries' Makefile that are used in all BL
531 ################################################################################
533 include lib
/stack_protector
/stack_protector.mk
535 ################################################################################
536 # Auxiliary tools (fiptool, cert_create, etc)
537 ################################################################################
539 # Variables for use with Certificate Generation Tool
540 CRTTOOLPATH ?
= tools
/cert_create
541 CRTTOOL ?
= ${CRTTOOLPATH}/cert_create
${BIN_EXT}
543 # Variables for use with Firmware Image Package
544 FIPTOOLPATH ?
= tools
/fiptool
545 FIPTOOL ?
= ${FIPTOOLPATH}/fiptool
${BIN_EXT}
547 # Variables for use with sptool
548 SPTOOLPATH ?
= tools
/sptool
549 SPTOOL ?
= ${SPTOOLPATH}/sptool
${BIN_EXT}
551 # Variables for use with ROMLIB
552 ROMLIBPATH ?
= lib
/romlib
554 ################################################################################
555 # Include BL specific makefiles
556 ################################################################################
572 ifeq (${NEED_BL31},yes
)
582 ################################################################################
583 # Build options checks
584 ################################################################################
586 $(eval
$(call assert_boolean
,COLD_BOOT_SINGLE_CPU
))
587 $(eval
$(call assert_boolean
,CREATE_KEYS
))
588 $(eval
$(call assert_boolean
,CTX_INCLUDE_AARCH32_REGS
))
589 $(eval
$(call assert_boolean
,CTX_INCLUDE_FPREGS
))
590 $(eval
$(call assert_boolean
,DEBUG
))
591 $(eval
$(call assert_boolean
,DISABLE_PEDANTIC
))
592 $(eval
$(call assert_boolean
,DYN_DISABLE_AUTH
))
593 $(eval
$(call assert_boolean
,EL3_EXCEPTION_HANDLING
))
594 $(eval
$(call assert_boolean
,ENABLE_AMU
))
595 $(eval
$(call assert_boolean
,ENABLE_ASSERTIONS
))
596 $(eval
$(call assert_boolean
,ENABLE_MPAM_FOR_LOWER_ELS
))
597 $(eval
$(call assert_boolean
,ENABLE_PIE
))
598 $(eval
$(call assert_boolean
,ENABLE_PMF
))
599 $(eval
$(call assert_boolean
,ENABLE_PSCI_STAT
))
600 $(eval
$(call assert_boolean
,ENABLE_RUNTIME_INSTRUMENTATION
))
601 $(eval
$(call assert_boolean
,ENABLE_SPE_FOR_LOWER_ELS
))
602 $(eval
$(call assert_boolean
,ENABLE_SPM
))
603 $(eval
$(call assert_boolean
,ENABLE_SVE_FOR_NS
))
604 $(eval
$(call assert_boolean
,ERROR_DEPRECATED
))
605 $(eval
$(call assert_boolean
,FAULT_INJECTION_SUPPORT
))
606 $(eval
$(call assert_boolean
,GENERATE_COT
))
607 $(eval
$(call assert_boolean
,GICV2_G0_FOR_EL3
))
608 $(eval
$(call assert_boolean
,HANDLE_EA_EL3_FIRST
))
609 $(eval
$(call assert_boolean
,HW_ASSISTED_COHERENCY
))
610 $(eval
$(call assert_boolean
,MULTI_CONSOLE_API
))
611 $(eval
$(call assert_boolean
,NS_TIMER_SWITCH
))
612 $(eval
$(call assert_boolean
,PL011_GENERIC_UART
))
613 $(eval
$(call assert_boolean
,PROGRAMMABLE_RESET_ADDRESS
))
614 $(eval
$(call assert_boolean
,PSCI_EXTENDED_STATE_ID
))
615 $(eval
$(call assert_boolean
,RAS_EXTENSION
))
616 $(eval
$(call assert_boolean
,RESET_TO_BL31
))
617 $(eval
$(call assert_boolean
,SAVE_KEYS
))
618 $(eval
$(call assert_boolean
,SEPARATE_CODE_AND_RODATA
))
619 $(eval
$(call assert_boolean
,SPIN_ON_BL1_EXIT
))
620 $(eval
$(call assert_boolean
,SPM_DEPRECATED
))
621 $(eval
$(call assert_boolean
,TRUSTED_BOARD_BOOT
))
622 $(eval
$(call assert_boolean
,USE_COHERENT_MEM
))
623 $(eval
$(call assert_boolean
,USE_ROMLIB
))
624 $(eval
$(call assert_boolean
,USE_TBBR_DEFS
))
625 $(eval
$(call assert_boolean
,WARMBOOT_ENABLE_DCACHE_EARLY
))
626 $(eval
$(call assert_boolean
,BL2_AT_EL3
))
627 $(eval
$(call assert_boolean
,BL2_IN_XIP_MEM
))
629 $(eval
$(call assert_numeric
,ARM_ARCH_MAJOR
))
630 $(eval
$(call assert_numeric
,ARM_ARCH_MINOR
))
631 $(eval
$(call assert_numeric
,SMCCC_MAJOR_VERSION
))
633 ################################################################################
634 # Add definitions to the cpp preprocessor based on the current build options.
635 # This is done after including the platform specific makefile to allow the
636 # platform to overwrite the default options
637 ################################################################################
639 $(eval
$(call add_define
,ARM_ARCH_MAJOR
))
640 $(eval
$(call add_define
,ARM_ARCH_MINOR
))
641 $(eval
$(call add_define
,COLD_BOOT_SINGLE_CPU
))
642 $(eval
$(call add_define
,CTX_INCLUDE_AARCH32_REGS
))
643 $(eval
$(call add_define
,CTX_INCLUDE_FPREGS
))
644 $(eval
$(call add_define
,EL3_EXCEPTION_HANDLING
))
645 $(eval
$(call add_define
,ENABLE_AMU
))
646 $(eval
$(call add_define
,ENABLE_ASSERTIONS
))
647 $(eval
$(call add_define
,ENABLE_MPAM_FOR_LOWER_ELS
))
648 $(eval
$(call add_define
,ENABLE_PIE
))
649 $(eval
$(call add_define
,ENABLE_PMF
))
650 $(eval
$(call add_define
,ENABLE_PSCI_STAT
))
651 $(eval
$(call add_define
,ENABLE_RUNTIME_INSTRUMENTATION
))
652 $(eval
$(call add_define
,ENABLE_SPE_FOR_LOWER_ELS
))
653 $(eval
$(call add_define
,ENABLE_SPM
))
654 $(eval
$(call add_define
,ENABLE_SVE_FOR_NS
))
655 $(eval
$(call add_define
,ERROR_DEPRECATED
))
656 $(eval
$(call add_define
,FAULT_INJECTION_SUPPORT
))
657 $(eval
$(call add_define
,GICV2_G0_FOR_EL3
))
658 $(eval
$(call add_define
,HANDLE_EA_EL3_FIRST
))
659 $(eval
$(call add_define
,HW_ASSISTED_COHERENCY
))
660 $(eval
$(call add_define
,LOG_LEVEL
))
661 $(eval
$(call add_define
,MULTI_CONSOLE_API
))
662 $(eval
$(call add_define
,NS_TIMER_SWITCH
))
663 $(eval
$(call add_define
,PL011_GENERIC_UART
))
664 $(eval
$(call add_define
,PLAT_
${PLAT}))
665 $(eval
$(call add_define
,PROGRAMMABLE_RESET_ADDRESS
))
666 $(eval
$(call add_define
,PSCI_EXTENDED_STATE_ID
))
667 $(eval
$(call add_define
,RAS_EXTENSION
))
668 $(eval
$(call add_define
,RESET_TO_BL31
))
669 $(eval
$(call add_define
,SEPARATE_CODE_AND_RODATA
))
670 $(eval
$(call add_define
,RECLAIM_INIT_CODE
))
671 $(eval
$(call add_define
,SMCCC_MAJOR_VERSION
))
672 $(eval
$(call add_define
,SPD_
${SPD}))
673 $(eval
$(call add_define
,SPIN_ON_BL1_EXIT
))
674 $(eval
$(call add_define
,SPM_DEPRECATED
))
675 $(eval
$(call add_define
,TRUSTED_BOARD_BOOT
))
676 $(eval
$(call add_define
,USE_COHERENT_MEM
))
677 $(eval
$(call add_define
,USE_ROMLIB
))
678 $(eval
$(call add_define
,USE_TBBR_DEFS
))
679 $(eval
$(call add_define
,WARMBOOT_ENABLE_DCACHE_EARLY
))
680 $(eval
$(call add_define
,BL2_AT_EL3
))
681 $(eval
$(call add_define
,BL2_IN_XIP_MEM
))
683 # Define the EL3_PAYLOAD_BASE flag only if it is provided.
684 ifdef EL3_PAYLOAD_BASE
685 $(eval
$(call add_define
,EL3_PAYLOAD_BASE
))
687 # Define the PRELOADED_BL33_BASE flag only if it is provided and
688 # EL3_PAYLOAD_BASE is not defined, as it has priority.
689 ifdef PRELOADED_BL33_BASE
690 $(eval
$(call add_define
,PRELOADED_BL33_BASE
))
693 # Define the AARCH32/AARCH64 flag based on the ARCH flag
694 ifeq (${ARCH},aarch32
)
695 $(eval
$(call add_define
,AARCH32
))
697 $(eval
$(call add_define
,AARCH64
))
700 # Define the DYN_DISABLE_AUTH flag only if set.
701 ifeq (${DYN_DISABLE_AUTH},1)
702 $(eval
$(call add_define
,DYN_DISABLE_AUTH
))
705 ################################################################################
707 ################################################################################
709 .PHONY
: all msg_start
clean realclean distclean cscope locate-checkpatch checkcodebase checkpatch fiptool sptool fip fwu_fip certtool dtbs
715 @echo
"Building ${PLAT}"
717 # Check if deprecated declarations and cpp warnings should be treated as error or not.
718 ifeq (${ERROR_DEPRECATED},0)
719 CPPFLAGS
+= -Wno-error
=deprecated-declarations
-Wno-error
=cpp
722 $(eval
$(call MAKE_LIB_DIRS
))
723 $(eval
$(call MAKE_LIB
,c
))
725 # Expand build macros for the different images
726 ifeq (${NEED_BL1},yes
)
727 $(eval
$(call MAKE_BL
,1))
730 ifeq (${NEED_BL2},yes
)
731 ifeq (${BL2_AT_EL3}, 0)
732 FIP_BL2_ARGS
:= tb-fw
735 $(if
${BL2}, $(eval
$(call TOOL_ADD_IMG
,bl2
,--${FIP_BL2_ARGS})),\
736 $(eval
$(call MAKE_BL
,2,${FIP_BL2_ARGS})))
739 ifeq (${NEED_SCP_BL2},yes
)
740 $(eval
$(call TOOL_ADD_IMG
,scp_bl2
,--scp-fw
))
743 ifeq (${NEED_BL31},yes
)
744 BL31_SOURCES
+= ${SPD_SOURCES}
745 $(if
${BL31}, $(eval
$(call TOOL_ADD_IMG
,bl31
,--soc-fw
)),\
746 $(eval
$(call MAKE_BL
,31,soc-fw
)))
749 # If a BL32 image is needed but neither BL32 nor BL32_SOURCES is defined, the
750 # build system will call TOOL_ADD_IMG to print a warning message and abort the
751 # process. Note that the dependency on BL32 applies to the FIP only.
752 ifeq (${NEED_BL32},yes
)
754 BUILD_BL32
:= $(if
$(BL32
),,$(if
$(BL32_SOURCES
),1))
756 $(if
${BUILD_BL32}, $(eval
$(call MAKE_BL
,32,tos-fw
)),\
757 $(eval
$(call TOOL_ADD_IMG
,bl32
,--tos-fw
)))
760 # Add the BL33 image if required by the platform
761 ifeq (${NEED_BL33},yes
)
762 $(eval
$(call TOOL_ADD_IMG
,bl33
,--nt-fw
))
765 ifeq (${NEED_BL2U},yes
)
766 $(if
${BL2U}, $(eval
$(call TOOL_ADD_IMG
,bl2u
,--ap-fwu-cfg
,FWU_
)),\
767 $(eval
$(call MAKE_BL
,2u,ap-fwu-cfg
,FWU_
)))
770 # Expand build macros for the different images
771 ifeq (${NEED_FDT},yes
)
772 $(eval
$(call MAKE_DTBS
,$(BUILD_PLAT
)/fdts
,$(FDT_SOURCES
)))
777 $(error
"Please set CHECKPATCH to point to the Linux checkpatch.pl file, eg: CHECKPATCH=../linux/scripts/checkpatch.pl")
779 ifeq (,$(wildcard ${CHECKPATCH}))
780 $(error
"The file CHECKPATCH points to cannot be found, use eg: CHECKPATCH=../linux/scripts/checkpatch.pl")
786 $(call SHELL_REMOVE_DIR
,${BUILD_PLAT})
787 ${Q}${MAKE} --no-print-directory
-C
${FIPTOOLPATH} clean
788 ${Q}${MAKE} PLAT
=${PLAT} --no-print-directory
-C
${CRTTOOLPATH} clean
789 ${Q}${MAKE} --no-print-directory
-C
${ROMLIBPATH} clean
793 $(call SHELL_REMOVE_DIR
,${BUILD_BASE})
794 $(call SHELL_DELETE_ALL
, ${CURDIR}/cscope.
*)
795 ${Q}${MAKE} --no-print-directory
-C
${FIPTOOLPATH} clean
796 ${Q}${MAKE} --no-print-directory
-C
${SPTOOLPATH} clean
797 ${Q}${MAKE} PLAT
=${PLAT} --no-print-directory
-C
${CRTTOOLPATH} clean
798 ${Q}${MAKE} --no-print-directory
-C
${ROMLIBPATH} clean
800 checkcodebase
: locate-checkpatch
801 @echo
" CHECKING STYLE"
802 @if
test -d .git
; then \
803 git ls-files | grep
-E
-v
'libfdt|libc|docs|\.md' | \
804 while read GIT_FILE
; \
805 do
${CHECKPATCH} ${CHECKCODE_ARGS} -f
$$GIT_FILE ; \
808 find .
-type f
-not
-iwholename
"*.git*" \
809 -not
-iwholename
"*build*" \
810 -not
-iwholename
"*libfdt*" \
811 -not
-iwholename
"*libc*" \
812 -not
-iwholename
"*docs*" \
813 -not
-iwholename
"*.md" \
814 -exec
${CHECKPATCH} ${CHECKCODE_ARGS} -f
{} \
; ; \
817 checkpatch
: locate-checkpatch
818 @echo
" CHECKING STYLE"
819 ${Q}COMMON_COMMIT
=$$(git merge-base HEAD
${BASE_COMMIT}); \
820 for commit in
`git rev-list $$COMMON_COMMIT..HEAD`; do \
821 printf
"\n[*] Checking style of '$$commit'\n\n"; \
822 git log
--format
=email
"$$commit~..$$commit" \
823 -- ${CHECK_PATHS} |
${CHECKPATCH} - || true
; \
824 git diff
--format
=email
"$$commit~..$$commit" \
825 -- ${CHECK_PATHS} |
${CHECKPATCH} - || true
; \
832 ${Q}${MAKE} PLAT
=${PLAT} USE_TBBR_DEFS
=${USE_TBBR_DEFS} --no-print-directory
-C
${CRTTOOLPATH}
834 @echo
"Built $@ successfully"
837 ifneq (${GENERATE_COT},0)
838 certificates
: ${CRT_DEPS} ${CRTTOOL}
839 ${Q}${CRTTOOL} ${CRT_ARGS}
841 @echo
"Built $@ successfully"
842 @echo
"Certificates can be found in ${BUILD_PLAT}"
846 ${BUILD_PLAT}/${FIP_NAME}: ${FIP_DEPS} ${FIPTOOL}
847 ${Q}${FIPTOOL} create
${FIP_ARGS} $@
848 ${Q}${FIPTOOL} info $@
850 @echo
"Built $@ successfully"
853 ifneq (${GENERATE_COT},0)
854 fwu_certificates
: ${FWU_CRT_DEPS} ${CRTTOOL}
855 ${Q}${CRTTOOL} ${FWU_CRT_ARGS}
857 @echo
"Built $@ successfully"
858 @echo
"FWU certificates can be found in ${BUILD_PLAT}"
862 ${BUILD_PLAT}/${FWU_FIP_NAME}: ${FWU_FIP_DEPS} ${FIPTOOL}
863 ${Q}${FIPTOOL} create
${FWU_FIP_ARGS} $@
864 ${Q}${FIPTOOL} info $@
866 @echo
"Built $@ successfully"
870 fip
: ${BUILD_PLAT}/${FIP_NAME}
871 fwu_fip
: ${BUILD_PLAT}/${FWU_FIP_NAME}
875 ${Q}${MAKE} CPPFLAGS
="-DVERSION='\"${VERSION_STRING}\"'" --no-print-directory
-C
${FIPTOOLPATH}
880 ${Q}${MAKE} CPPFLAGS
="-DVERSION='\"${VERSION_STRING}\"'" --no-print-directory
-C
${SPTOOLPATH}
883 romlib.bin
: libraries
884 ${Q}${MAKE} PLAT_DIR
=${PLAT_DIR} BUILD_PLAT
=${BUILD_PLAT} INCLUDES
='${INCLUDES}' DEFINES
='${DEFINES}' --no-print-directory
-C
${ROMLIBPATH} all
888 ${Q}find
${CURDIR} -name
"*.[chsS]" > cscope.files
892 @echo
"usage: ${MAKE} PLAT=<${PLATFORM_LIST}> [OPTIONS] [TARGET]"
894 @echo
"PLAT is used to specify which platform you wish to build."
895 @echo
"If no platform is specified, PLAT defaults to: ${DEFAULT_PLAT}"
897 @echo
"Please refer to the User Guide for a list of all supported options."
898 @echo
"Note that the build system doesn't track dependencies for build "
899 @echo
"options. Therefore, if any of the build options are changed "
900 @echo
"from a previous build, a clean build must be performed."
902 @echo
"Supported Targets:"
903 @echo
" all Build all individual bootloader binaries"
904 @echo
" bl1 Build the BL1 binary"
905 @echo
" bl2 Build the BL2 binary"
906 @echo
" bl2u Build the BL2U binary"
907 @echo
" bl31 Build the BL31 binary"
908 @echo
" bl32 Build the BL32 binary. If ARCH=aarch32, then "
909 @echo
" this builds secure payload specified by AARCH32_SP"
910 @echo
" certificates Build the certificates (requires 'GENERATE_COT=1')"
911 @echo
" fip Build the Firmware Image Package (FIP)"
912 @echo
" fwu_fip Build the FWU Firmware Image Package (FIP)"
913 @echo
" checkcodebase Check the coding style of the entire source tree"
914 @echo
" checkpatch Check the coding style on changes in the current"
915 @echo
" branch against BASE_COMMIT (default origin/master)"
916 @echo
" clean Clean the build for the selected platform"
917 @echo
" cscope Generate cscope index"
918 @echo
" distclean Remove all build artifacts for all platforms"
919 @echo
" certtool Build the Certificate generation tool"
920 @echo
" fiptool Build the Firmware Image Package (FIP) creation tool"
921 @echo
" sptool Build the Secure Partition Package creation tool"
922 @echo
" dtbs Build the Device Tree Blobs (if required for the platform)"
924 @echo
"Note: most build targets require PLAT to be set to a specific platform."
926 @echo
"example: build all targets for the FVP platform:"
927 @echo
" CROSS_COMPILE=aarch64-none-elf- make PLAT=fvp all"