6b5b0803ef37474d52a19339561240cbbcf39ad3
[project/bcm63xx/atf.git] / Makefile
1 #
2 # Copyright (c) 2013-2018, 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 := 2
11 VERSION_MINOR := 0
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/libc, \
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/libc, \
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 ECHO:=@echo
78 CHECKCODE_ARGS += --no-summary --terse
79 else
80 Q:=
81 ECHO:=$(ECHO_QUIET)
82 endif
83
84 ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
85 Q:=@
86 ECHO:=$(ECHO_QUIET)
87 endif
88
89 export Q ECHO
90
91 # Process Debug flag
92 $(eval $(call add_define,DEBUG))
93 ifneq (${DEBUG}, 0)
94 BUILD_TYPE := debug
95 TF_CFLAGS += -g
96
97 ifneq ($(findstring clang,$(notdir $(CC))),)
98 ASFLAGS += -g
99 else
100 ASFLAGS += -g -Wa,--gdwarf-2
101 endif
102
103 # Use LOG_LEVEL_INFO by default for debug builds
104 LOG_LEVEL := 40
105 else
106 BUILD_TYPE := release
107 # Use LOG_LEVEL_NOTICE by default for release builds
108 LOG_LEVEL := 20
109 endif
110
111 # Default build string (git branch and commit)
112 ifeq (${BUILD_STRING},)
113 BUILD_STRING := $(shell git describe --always --dirty --tags 2> /dev/null)
114 endif
115 VERSION_STRING := v${VERSION_MAJOR}.${VERSION_MINOR}(${BUILD_TYPE}):${BUILD_STRING}
116
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
122 endif
123
124
125 ################################################################################
126 # Toolchain
127 ################################################################################
128
129 HOSTCC := gcc
130 export HOSTCC
131
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
141 DTC := dtc
142
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
147 endif
148
149 ifeq (${ARM_ARCH_MAJOR},7)
150 target32-directive = -target arm-none-eabi
151 # Will set march32-directive from platform configuration
152 else
153 target32-directive = -target armv8a-none-eabi
154 march32-directive = -march=armv8-a
155 endif
156
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
160 LD = $(LINKER)
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
167 LD = $(LINKER)
168 AS = $(CC) -c -x assembler-with-cpp $(TF_CFLAGS_$(ARCH))
169 CPP = $(CC) -E
170 PP = $(CC) -E
171 else
172 TF_CFLAGS_aarch32 = $(march32-directive)
173 TF_CFLAGS_aarch64 = -march=armv8-a
174 LD = $(LINKER)
175 endif
176
177 ifeq (${AARCH32_INSTRUCTION_SET},A32)
178 TF_CFLAGS_aarch32 += -marm
179 else ifeq (${AARCH32_INSTRUCTION_SET},T32)
180 TF_CFLAGS_aarch32 += -mthumb
181 else
182 $(error Error: Unknown AArch32 instruction set ${AARCH32_INSTRUCTION_SET})
183 endif
184
185 TF_CFLAGS_aarch32 += -mno-unaligned-access
186 TF_CFLAGS_aarch64 += -mgeneral-regs-only -mstrict-align
187
188 ASFLAGS_aarch32 = $(march32-directive)
189 ASFLAGS_aarch64 = -march=armv8-a
190
191 WARNING1 := -Wextra
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
199
200 WARNING2 := -Waggregate-return
201 WARNING2 += -Wcast-align
202 WARNING2 += -Wdisabled-optimization
203 WARNING2 += -Wnested-externs
204 WARNING2 += -Wshadow
205 WARNING2 += -Wlogical-op
206 WARNING2 += -Wmissing-field-initializers
207 WARNING2 += -Wsign-compare
208 WARNING2 += -Wmaybe-uninitialized
209
210 WARNING3 := -Wbad-function-cast
211 WARNING3 += -Wcast-qual
212 WARNING3 += -Wconversion
213 WARNING3 += -Wpacked
214 WARNING3 += -Wpadded
215 WARNING3 += -Wpointer-arith
216 WARNING3 += -Wredundant-decls
217 WARNING3 += -Wswitch-default
218 WARNING3 += -Wpacked-bitfield-compat
219 WARNING3 += -Wvla
220
221 ifeq (${W},1)
222 WARNINGS := $(WARNING1)
223 else ifeq (${W},2)
224 WARNINGS := $(WARNING1) $(WARNING2)
225 else ifeq (${W},3)
226 WARNINGS := $(WARNING1) $(WARNING2) $(WARNING3)
227 endif
228
229 ifneq (${E},0)
230 ERRORS := -Werror
231 endif
232
233 CPPFLAGS = ${DEFINES} ${INCLUDES} ${MBEDTLS_INC} -nostdinc \
234 -Wmissing-include-dirs $(ERRORS) $(WARNINGS)
235 ASFLAGS += $(CPPFLAGS) $(ASFLAGS_$(ARCH)) \
236 -D__ASSEMBLY__ -ffreestanding \
237 -Wa,--fatal-warnings
238 TF_CFLAGS += $(CPPFLAGS) $(TF_CFLAGS_$(ARCH)) \
239 -ffreestanding -fno-builtin -Wall -std=gnu99 \
240 -Os -ffunction-sections -fdata-sections
241
242 GCC_V_OUTPUT := $(shell $(CC) -v 2>&1)
243
244 TF_LDFLAGS += --fatal-warnings -O1
245 TF_LDFLAGS += --gc-sections
246 TF_LDFLAGS += $(TF_LDFLAGS_$(ARCH))
247
248 DTC_FLAGS += -I dts -O dtb
249
250 ################################################################################
251 # Common sources and include directories
252 ################################################################################
253 include lib/compiler-rt/compiler-rt.mk
254 include lib/libc/libc.mk
255
256 BL_COMMON_SOURCES += common/bl_common.c \
257 common/tf_log.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 \
266 ${COMPILER_RT_SRCS}
267
268 ifeq ($(notdir $(CC)),armclang)
269 BL_COMMON_SOURCES += lib/${ARCH}/armclang_printf.S
270 endif
271
272 INCLUDES += -Iinclude \
273 -Iinclude/arch/${ARCH} \
274 -Iinclude/bl1 \
275 -Iinclude/bl2 \
276 -Iinclude/bl2u \
277 -Iinclude/bl31 \
278 -Iinclude/common \
279 -Iinclude/drivers \
280 -Iinclude/drivers/arm \
281 -Iinclude/drivers/auth \
282 -Iinclude/drivers/io \
283 -Iinclude/drivers/ti/uart \
284 -Iinclude/lib \
285 -Iinclude/lib/cpus \
286 -Iinclude/lib/cpus/${ARCH} \
287 -Iinclude/lib/el3_runtime \
288 -Iinclude/lib/el3_runtime/${ARCH} \
289 -Iinclude/lib/extensions \
290 -Iinclude/lib/pmf \
291 -Iinclude/lib/psci \
292 -Iinclude/lib/xlat_tables \
293 -Iinclude/plat/common \
294 -Iinclude/services \
295 ${PLAT_INCLUDES} \
296 ${SPD_INCLUDES} \
297 -Iinclude/tools_share
298
299 include common/backtrace/backtrace.mk
300
301 ################################################################################
302 # Generic definitions
303 ################################################################################
304
305 include ${MAKE_HELPERS_DIRECTORY}plat_helpers.mk
306
307 BUILD_BASE := ./build
308 BUILD_PLAT := ${BUILD_BASE}/${PLAT}/${BUILD_TYPE}
309
310 SPDS := $(sort $(filter-out none, $(patsubst services/spd/%,%,$(wildcard services/spd/*))))
311
312 # Platforms providing their own TBB makefile may override this value
313 INCLUDE_TBBR_MK := 1
314
315
316 ################################################################################
317 # Include SPD Makefile if one has been specified
318 ################################################################################
319
320 ifneq (${SPD},none)
321 ifeq (${ARCH},aarch32)
322 $(error "Error: SPD is incompatible with AArch32.")
323 endif
324 ifdef EL3_PAYLOAD_BASE
325 $(warning "SPD and EL3_PAYLOAD_BASE are incompatible build options.")
326 $(warning "The SPD and its BL32 companion will be present but ignored.")
327 endif
328 # We expect to locate an spd.mk under the specified SPD directory
329 SPD_MAKE := $(wildcard services/spd/${SPD}/${SPD}.mk)
330
331 ifeq (${SPD_MAKE},)
332 $(error Error: No services/spd/${SPD}/${SPD}.mk located)
333 endif
334 $(info Including ${SPD_MAKE})
335 include ${SPD_MAKE}
336
337 # If there's BL32 companion for the chosen SPD, we expect that the SPD's
338 # Makefile would set NEED_BL32 to "yes". In this case, the build system
339 # supports two mutually exclusive options:
340 # * BL32 is built from source: then BL32_SOURCES must contain the list
341 # of source files to build BL32
342 # * BL32 is a prebuilt binary: then BL32 must point to the image file
343 # that will be included in the FIP
344 # If both BL32_SOURCES and BL32 are defined, the binary takes precedence
345 # over the sources.
346 endif
347
348 ################################################################################
349 # Include the platform specific Makefile after the SPD Makefile (the platform
350 # makefile may use all previous definitions in this file)
351 ################################################################################
352
353 include ${PLAT_MAKEFILE_FULL}
354
355 $(eval $(call MAKE_PREREQ_DIR,${BUILD_PLAT}))
356
357 ifeq (${ARM_ARCH_MAJOR},7)
358 include make_helpers/armv7-a-cpus.mk
359 endif
360
361 ifeq ($(ENABLE_PIE),1)
362 TF_CFLAGS += -fpie
363 TF_LDFLAGS += -pie
364 else
365 PIE_FOUND := $(findstring --enable-default-pie,${GCC_V_OUTPUT})
366 ifneq ($(PIE_FOUND),)
367 TF_CFLAGS += -fno-PIE
368 endif
369 endif
370
371 # Include the CPU specific operations makefile, which provides default
372 # values for all CPU errata workarounds and CPU specific optimisations.
373 # This can be overridden by the platform.
374 include lib/cpus/cpu-ops.mk
375
376 ifeq (${ARCH},aarch32)
377 NEED_BL32 := yes
378
379 ################################################################################
380 # Build `AARCH32_SP` as BL32 image for AArch32
381 ################################################################################
382 ifneq (${AARCH32_SP},none)
383 # We expect to locate an sp.mk under the specified AARCH32_SP directory
384 AARCH32_SP_MAKE := $(wildcard bl32/${AARCH32_SP}/${AARCH32_SP}.mk)
385
386 ifeq (${AARCH32_SP_MAKE},)
387 $(error Error: No bl32/${AARCH32_SP}/${AARCH32_SP}.mk located)
388 endif
389
390 $(info Including ${AARCH32_SP_MAKE})
391 include ${AARCH32_SP_MAKE}
392 endif
393
394 endif
395
396 ################################################################################
397 # Check incompatible options
398 ################################################################################
399
400 ifdef EL3_PAYLOAD_BASE
401 ifdef PRELOADED_BL33_BASE
402 $(warning "PRELOADED_BL33_BASE and EL3_PAYLOAD_BASE are \
403 incompatible build options. EL3_PAYLOAD_BASE has priority.")
404 endif
405 ifneq (${GENERATE_COT},0)
406 $(error "GENERATE_COT and EL3_PAYLOAD_BASE are incompatible build options.")
407 endif
408 ifneq (${TRUSTED_BOARD_BOOT},0)
409 $(error "TRUSTED_BOARD_BOOT and EL3_PAYLOAD_BASE are incompatible build options.")
410 endif
411 endif
412
413 ifeq (${NEED_BL33},yes)
414 ifdef EL3_PAYLOAD_BASE
415 $(warning "BL33 image is not needed when option \
416 BL33_PAYLOAD_BASE is used and won't be added to the FIP file.")
417 endif
418 ifdef PRELOADED_BL33_BASE
419 $(warning "BL33 image is not needed when option \
420 PRELOADED_BL33_BASE is used and won't be added to the FIP \
421 file.")
422 endif
423 endif
424
425 # When building for systems with hardware-assisted coherency, there's no need to
426 # use USE_COHERENT_MEM. Require that USE_COHERENT_MEM must be set to 0 too.
427 ifeq ($(HW_ASSISTED_COHERENCY)-$(USE_COHERENT_MEM),1-1)
428 $(error USE_COHERENT_MEM cannot be enabled with HW_ASSISTED_COHERENCY)
429 endif
430
431 #For now, BL2_IN_XIP_MEM is only supported when BL2_AT_EL3 is 1.
432 ifeq ($(BL2_AT_EL3)-$(BL2_IN_XIP_MEM),0-1)
433 $(error "BL2_IN_XIP_MEM is only supported when BL2_AT_EL3 is enabled")
434 endif
435
436 # SMC Calling Convention checks
437 ifneq (${SMCCC_MAJOR_VERSION},1)
438 ifneq (${SPD},none)
439 $(error "SMC Calling Convention 1.X must be used with SPDs")
440 endif
441 ifeq (${ARCH},aarch32)
442 $(error "Only SMCCC 1.X is supported in AArch32 mode.")
443 endif
444 endif
445
446 # For RAS_EXTENSION, require that EAs are handled in EL3 first
447 ifeq ($(RAS_EXTENSION),1)
448 ifneq ($(HANDLE_EA_EL3_FIRST),1)
449 $(error For RAS_EXTENSION, HANDLE_EA_EL3_FIRST must also be 1)
450 endif
451 endif
452
453 # When FAULT_INJECTION_SUPPORT is used, require that RAS_EXTENSION is enabled
454 ifeq ($(FAULT_INJECTION_SUPPORT),1)
455 ifneq ($(RAS_EXTENSION),1)
456 $(error For FAULT_INJECTION_SUPPORT, RAS_EXTENSION must also be 1)
457 endif
458 endif
459
460 # DYN_DISABLE_AUTH can be set only when TRUSTED_BOARD_BOOT=1
461 ifeq ($(DYN_DISABLE_AUTH), 1)
462 ifeq (${TRUSTED_BOARD_BOOT}, 0)
463 $(error "TRUSTED_BOARD_BOOT must be enabled for DYN_DISABLE_AUTH to be set.")
464 endif
465 endif
466
467 ################################################################################
468 # Process platform overrideable behaviour
469 ################################################################################
470
471 # Using the ARM Trusted Firmware BL2 implies that a BL33 image also needs to be
472 # supplied for the FIP and Certificate generation tools. This flag can be
473 # overridden by the platform.
474 ifdef BL2_SOURCES
475 ifdef EL3_PAYLOAD_BASE
476 # If booting an EL3 payload there is no need for a BL33 image
477 # in the FIP file.
478 NEED_BL33 := no
479 else
480 ifdef PRELOADED_BL33_BASE
481 # If booting a BL33 preloaded image there is no need of
482 # another one in the FIP file.
483 NEED_BL33 := no
484 else
485 NEED_BL33 ?= yes
486 endif
487 endif
488 endif
489
490 # If SCP_BL2 is given, we always want FIP to include it.
491 ifdef SCP_BL2
492 NEED_SCP_BL2 := yes
493 endif
494
495 # For AArch32, BL31 is not currently supported.
496 ifneq (${ARCH},aarch32)
497 ifdef BL31_SOURCES
498 # When booting an EL3 payload, there is no need to compile the BL31 image nor
499 # put it in the FIP.
500 ifndef EL3_PAYLOAD_BASE
501 NEED_BL31 := yes
502 endif
503 endif
504 endif
505
506 # Process TBB related flags
507 ifneq (${GENERATE_COT},0)
508 # Common cert_create options
509 ifneq (${CREATE_KEYS},0)
510 $(eval CRT_ARGS += -n)
511 $(eval FWU_CRT_ARGS += -n)
512 ifneq (${SAVE_KEYS},0)
513 $(eval CRT_ARGS += -k)
514 $(eval FWU_CRT_ARGS += -k)
515 endif
516 endif
517 # Include TBBR makefile (unless the platform indicates otherwise)
518 ifeq (${INCLUDE_TBBR_MK},1)
519 include make_helpers/tbbr/tbbr_tools.mk
520 endif
521 endif
522
523 ifneq (${FIP_ALIGN},0)
524 FIP_ARGS += --align ${FIP_ALIGN}
525 endif
526
527 ################################################################################
528 # Include libraries' Makefile that are used in all BL
529 ################################################################################
530
531 include lib/stack_protector/stack_protector.mk
532
533 ################################################################################
534 # Auxiliary tools (fiptool, cert_create, etc)
535 ################################################################################
536
537 # Variables for use with Certificate Generation Tool
538 CRTTOOLPATH ?= tools/cert_create
539 CRTTOOL ?= ${CRTTOOLPATH}/cert_create${BIN_EXT}
540
541 # Variables for use with Firmware Image Package
542 FIPTOOLPATH ?= tools/fiptool
543 FIPTOOL ?= ${FIPTOOLPATH}/fiptool${BIN_EXT}
544
545 # Variables for use with sptool
546 SPTOOLPATH ?= tools/sptool
547 SPTOOL ?= ${SPTOOLPATH}/sptool${BIN_EXT}
548
549 # Variables for use with ROMLIB
550 ROMLIBPATH ?= lib/romlib
551
552 ################################################################################
553 # Include BL specific makefiles
554 ################################################################################
555 ifdef BL1_SOURCES
556 NEED_BL1 := yes
557 include bl1/bl1.mk
558 endif
559
560 ifdef BL2_SOURCES
561 NEED_BL2 := yes
562 include bl2/bl2.mk
563 endif
564
565 ifdef BL2U_SOURCES
566 NEED_BL2U := yes
567 include bl2u/bl2u.mk
568 endif
569
570 ifeq (${NEED_BL31},yes)
571 ifdef BL31_SOURCES
572 include bl31/bl31.mk
573 endif
574 endif
575
576 ifdef FDT_SOURCES
577 NEED_FDT := yes
578 endif
579
580 ################################################################################
581 # Build options checks
582 ################################################################################
583
584 $(eval $(call assert_boolean,COLD_BOOT_SINGLE_CPU))
585 $(eval $(call assert_boolean,CREATE_KEYS))
586 $(eval $(call assert_boolean,CTX_INCLUDE_AARCH32_REGS))
587 $(eval $(call assert_boolean,CTX_INCLUDE_FPREGS))
588 $(eval $(call assert_boolean,DEBUG))
589 $(eval $(call assert_boolean,DISABLE_PEDANTIC))
590 $(eval $(call assert_boolean,DYN_DISABLE_AUTH))
591 $(eval $(call assert_boolean,EL3_EXCEPTION_HANDLING))
592 $(eval $(call assert_boolean,ENABLE_AMU))
593 $(eval $(call assert_boolean,ENABLE_ASSERTIONS))
594 $(eval $(call assert_boolean,ENABLE_MPAM_FOR_LOWER_ELS))
595 $(eval $(call assert_boolean,ENABLE_PIE))
596 $(eval $(call assert_boolean,ENABLE_PMF))
597 $(eval $(call assert_boolean,ENABLE_PSCI_STAT))
598 $(eval $(call assert_boolean,ENABLE_RUNTIME_INSTRUMENTATION))
599 $(eval $(call assert_boolean,ENABLE_SPE_FOR_LOWER_ELS))
600 $(eval $(call assert_boolean,ENABLE_SPM))
601 $(eval $(call assert_boolean,ENABLE_SVE_FOR_NS))
602 $(eval $(call assert_boolean,ERROR_DEPRECATED))
603 $(eval $(call assert_boolean,FAULT_INJECTION_SUPPORT))
604 $(eval $(call assert_boolean,GENERATE_COT))
605 $(eval $(call assert_boolean,GICV2_G0_FOR_EL3))
606 $(eval $(call assert_boolean,HANDLE_EA_EL3_FIRST))
607 $(eval $(call assert_boolean,HW_ASSISTED_COHERENCY))
608 $(eval $(call assert_boolean,MULTI_CONSOLE_API))
609 $(eval $(call assert_boolean,NS_TIMER_SWITCH))
610 $(eval $(call assert_boolean,PL011_GENERIC_UART))
611 $(eval $(call assert_boolean,PROGRAMMABLE_RESET_ADDRESS))
612 $(eval $(call assert_boolean,PSCI_EXTENDED_STATE_ID))
613 $(eval $(call assert_boolean,RAS_EXTENSION))
614 $(eval $(call assert_boolean,RESET_TO_BL31))
615 $(eval $(call assert_boolean,SAVE_KEYS))
616 $(eval $(call assert_boolean,SEPARATE_CODE_AND_RODATA))
617 $(eval $(call assert_boolean,SPIN_ON_BL1_EXIT))
618 $(eval $(call assert_boolean,SPM_DEPRECATED))
619 $(eval $(call assert_boolean,TRUSTED_BOARD_BOOT))
620 $(eval $(call assert_boolean,USE_COHERENT_MEM))
621 $(eval $(call assert_boolean,USE_ROMLIB))
622 $(eval $(call assert_boolean,USE_TBBR_DEFS))
623 $(eval $(call assert_boolean,WARMBOOT_ENABLE_DCACHE_EARLY))
624 $(eval $(call assert_boolean,BL2_AT_EL3))
625 $(eval $(call assert_boolean,BL2_IN_XIP_MEM))
626
627 $(eval $(call assert_numeric,ARM_ARCH_MAJOR))
628 $(eval $(call assert_numeric,ARM_ARCH_MINOR))
629 $(eval $(call assert_numeric,SMCCC_MAJOR_VERSION))
630
631 ################################################################################
632 # Add definitions to the cpp preprocessor based on the current build options.
633 # This is done after including the platform specific makefile to allow the
634 # platform to overwrite the default options
635 ################################################################################
636
637 $(eval $(call add_define,ARM_ARCH_MAJOR))
638 $(eval $(call add_define,ARM_ARCH_MINOR))
639 $(eval $(call add_define,COLD_BOOT_SINGLE_CPU))
640 $(eval $(call add_define,CTX_INCLUDE_AARCH32_REGS))
641 $(eval $(call add_define,CTX_INCLUDE_FPREGS))
642 $(eval $(call add_define,EL3_EXCEPTION_HANDLING))
643 $(eval $(call add_define,ENABLE_AMU))
644 $(eval $(call add_define,ENABLE_ASSERTIONS))
645 $(eval $(call add_define,ENABLE_MPAM_FOR_LOWER_ELS))
646 $(eval $(call add_define,ENABLE_PIE))
647 $(eval $(call add_define,ENABLE_PMF))
648 $(eval $(call add_define,ENABLE_PSCI_STAT))
649 $(eval $(call add_define,ENABLE_RUNTIME_INSTRUMENTATION))
650 $(eval $(call add_define,ENABLE_SPE_FOR_LOWER_ELS))
651 $(eval $(call add_define,ENABLE_SPM))
652 $(eval $(call add_define,ENABLE_SVE_FOR_NS))
653 $(eval $(call add_define,ERROR_DEPRECATED))
654 $(eval $(call add_define,FAULT_INJECTION_SUPPORT))
655 $(eval $(call add_define,GICV2_G0_FOR_EL3))
656 $(eval $(call add_define,HANDLE_EA_EL3_FIRST))
657 $(eval $(call add_define,HW_ASSISTED_COHERENCY))
658 $(eval $(call add_define,LOG_LEVEL))
659 $(eval $(call add_define,MULTI_CONSOLE_API))
660 $(eval $(call add_define,NS_TIMER_SWITCH))
661 $(eval $(call add_define,PL011_GENERIC_UART))
662 $(eval $(call add_define,PLAT_${PLAT}))
663 $(eval $(call add_define,PROGRAMMABLE_RESET_ADDRESS))
664 $(eval $(call add_define,PSCI_EXTENDED_STATE_ID))
665 $(eval $(call add_define,RAS_EXTENSION))
666 $(eval $(call add_define,RESET_TO_BL31))
667 $(eval $(call add_define,SEPARATE_CODE_AND_RODATA))
668 $(eval $(call add_define,RECLAIM_INIT_CODE))
669 $(eval $(call add_define,SMCCC_MAJOR_VERSION))
670 $(eval $(call add_define,SPD_${SPD}))
671 $(eval $(call add_define,SPIN_ON_BL1_EXIT))
672 $(eval $(call add_define,SPM_DEPRECATED))
673 $(eval $(call add_define,TRUSTED_BOARD_BOOT))
674 $(eval $(call add_define,USE_COHERENT_MEM))
675 $(eval $(call add_define,USE_ROMLIB))
676 $(eval $(call add_define,USE_TBBR_DEFS))
677 $(eval $(call add_define,WARMBOOT_ENABLE_DCACHE_EARLY))
678 $(eval $(call add_define,BL2_AT_EL3))
679 $(eval $(call add_define,BL2_IN_XIP_MEM))
680
681 # Define the EL3_PAYLOAD_BASE flag only if it is provided.
682 ifdef EL3_PAYLOAD_BASE
683 $(eval $(call add_define,EL3_PAYLOAD_BASE))
684 else
685 # Define the PRELOADED_BL33_BASE flag only if it is provided and
686 # EL3_PAYLOAD_BASE is not defined, as it has priority.
687 ifdef PRELOADED_BL33_BASE
688 $(eval $(call add_define,PRELOADED_BL33_BASE))
689 endif
690 endif
691 # Define the AARCH32/AARCH64 flag based on the ARCH flag
692 ifeq (${ARCH},aarch32)
693 $(eval $(call add_define,AARCH32))
694 else
695 $(eval $(call add_define,AARCH64))
696 endif
697
698 # Define the DYN_DISABLE_AUTH flag only if set.
699 ifeq (${DYN_DISABLE_AUTH},1)
700 $(eval $(call add_define,DYN_DISABLE_AUTH))
701 endif
702
703 ################################################################################
704 # Build targets
705 ################################################################################
706
707 .PHONY: all msg_start clean realclean distclean cscope locate-checkpatch checkcodebase checkpatch fiptool sptool fip fwu_fip certtool dtbs
708 .SUFFIXES:
709
710 all: msg_start
711
712 msg_start:
713 @echo "Building ${PLAT}"
714
715 # Check if deprecated declarations and cpp warnings should be treated as error or not.
716 ifeq (${ERROR_DEPRECATED},0)
717 CPPFLAGS += -Wno-error=deprecated-declarations -Wno-error=cpp
718 endif
719
720 $(eval $(call MAKE_LIB_DIRS))
721 $(eval $(call MAKE_LIB,c))
722
723 # Expand build macros for the different images
724 ifeq (${NEED_BL1},yes)
725 $(eval $(call MAKE_BL,1))
726 endif
727
728 ifeq (${NEED_BL2},yes)
729 ifeq (${BL2_AT_EL3}, 0)
730 FIP_BL2_ARGS := tb-fw
731 endif
732
733 $(if ${BL2}, $(eval $(call TOOL_ADD_IMG,bl2,--${FIP_BL2_ARGS})),\
734 $(eval $(call MAKE_BL,2,${FIP_BL2_ARGS})))
735 endif
736
737 ifeq (${NEED_SCP_BL2},yes)
738 $(eval $(call TOOL_ADD_IMG,scp_bl2,--scp-fw))
739 endif
740
741 ifeq (${NEED_BL31},yes)
742 BL31_SOURCES += ${SPD_SOURCES}
743 $(if ${BL31}, $(eval $(call TOOL_ADD_IMG,bl31,--soc-fw)),\
744 $(eval $(call MAKE_BL,31,soc-fw)))
745 endif
746
747 # If a BL32 image is needed but neither BL32 nor BL32_SOURCES is defined, the
748 # build system will call TOOL_ADD_IMG to print a warning message and abort the
749 # process. Note that the dependency on BL32 applies to the FIP only.
750 ifeq (${NEED_BL32},yes)
751
752 BUILD_BL32 := $(if $(BL32),,$(if $(BL32_SOURCES),1))
753
754 $(if ${BUILD_BL32}, $(eval $(call MAKE_BL,32,tos-fw)),\
755 $(eval $(call TOOL_ADD_IMG,bl32,--tos-fw)))
756 endif
757
758 # Add the BL33 image if required by the platform
759 ifeq (${NEED_BL33},yes)
760 $(eval $(call TOOL_ADD_IMG,bl33,--nt-fw))
761 endif
762
763 ifeq (${NEED_BL2U},yes)
764 $(if ${BL2U}, $(eval $(call TOOL_ADD_IMG,bl2u,--ap-fwu-cfg,FWU_)),\
765 $(eval $(call MAKE_BL,2u,ap-fwu-cfg,FWU_)))
766 endif
767
768 # Expand build macros for the different images
769 ifeq (${NEED_FDT},yes)
770 $(eval $(call MAKE_DTBS,$(BUILD_PLAT)/fdts,$(FDT_SOURCES)))
771 endif
772
773 locate-checkpatch:
774 ifndef CHECKPATCH
775 $(error "Please set CHECKPATCH to point to the Linux checkpatch.pl file, eg: CHECKPATCH=../linux/scripts/checkpatch.pl")
776 else
777 ifeq (,$(wildcard ${CHECKPATCH}))
778 $(error "The file CHECKPATCH points to cannot be found, use eg: CHECKPATCH=../linux/scripts/checkpatch.pl")
779 endif
780 endif
781
782 clean:
783 @echo " CLEAN"
784 $(call SHELL_REMOVE_DIR,${BUILD_PLAT})
785 ${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean
786 ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} clean
787 ${Q}${MAKE} --no-print-directory -C ${ROMLIBPATH} clean
788
789 realclean distclean:
790 @echo " REALCLEAN"
791 $(call SHELL_REMOVE_DIR,${BUILD_BASE})
792 $(call SHELL_DELETE_ALL, ${CURDIR}/cscope.*)
793 ${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean
794 ${Q}${MAKE} --no-print-directory -C ${SPTOOLPATH} clean
795 ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} clean
796 ${Q}${MAKE} --no-print-directory -C ${ROMLIBPATH} clean
797
798 checkcodebase: locate-checkpatch
799 @echo " CHECKING STYLE"
800 @if test -d .git ; then \
801 git ls-files | grep -E -v 'libfdt|libc|docs|\.md' | \
802 while read GIT_FILE ; \
803 do ${CHECKPATCH} ${CHECKCODE_ARGS} -f $$GIT_FILE ; \
804 done ; \
805 else \
806 find . -type f -not -iwholename "*.git*" \
807 -not -iwholename "*build*" \
808 -not -iwholename "*libfdt*" \
809 -not -iwholename "*libc*" \
810 -not -iwholename "*docs*" \
811 -not -iwholename "*.md" \
812 -exec ${CHECKPATCH} ${CHECKCODE_ARGS} -f {} \; ; \
813 fi
814
815 checkpatch: locate-checkpatch
816 @echo " CHECKING STYLE"
817 ${Q}COMMON_COMMIT=$$(git merge-base HEAD ${BASE_COMMIT}); \
818 for commit in `git rev-list $$COMMON_COMMIT..HEAD`; do \
819 printf "\n[*] Checking style of '$$commit'\n\n"; \
820 git log --format=email "$$commit~..$$commit" \
821 -- ${CHECK_PATHS} | ${CHECKPATCH} - || true; \
822 git diff --format=email "$$commit~..$$commit" \
823 -- ${CHECK_PATHS} | ${CHECKPATCH} - || true; \
824 done
825
826 certtool: ${CRTTOOL}
827
828 .PHONY: ${CRTTOOL}
829 ${CRTTOOL}:
830 ${Q}${MAKE} PLAT=${PLAT} USE_TBBR_DEFS=${USE_TBBR_DEFS} --no-print-directory -C ${CRTTOOLPATH}
831 @${ECHO_BLANK_LINE}
832 @echo "Built $@ successfully"
833 @${ECHO_BLANK_LINE}
834
835 ifneq (${GENERATE_COT},0)
836 certificates: ${CRT_DEPS} ${CRTTOOL}
837 ${Q}${CRTTOOL} ${CRT_ARGS}
838 @${ECHO_BLANK_LINE}
839 @echo "Built $@ successfully"
840 @echo "Certificates can be found in ${BUILD_PLAT}"
841 @${ECHO_BLANK_LINE}
842 endif
843
844 ${BUILD_PLAT}/${FIP_NAME}: ${FIP_DEPS} ${FIPTOOL}
845 ${Q}${FIPTOOL} create ${FIP_ARGS} $@
846 ${Q}${FIPTOOL} info $@
847 @${ECHO_BLANK_LINE}
848 @echo "Built $@ successfully"
849 @${ECHO_BLANK_LINE}
850
851 ifneq (${GENERATE_COT},0)
852 fwu_certificates: ${FWU_CRT_DEPS} ${CRTTOOL}
853 ${Q}${CRTTOOL} ${FWU_CRT_ARGS}
854 @${ECHO_BLANK_LINE}
855 @echo "Built $@ successfully"
856 @echo "FWU certificates can be found in ${BUILD_PLAT}"
857 @${ECHO_BLANK_LINE}
858 endif
859
860 ${BUILD_PLAT}/${FWU_FIP_NAME}: ${FWU_FIP_DEPS} ${FIPTOOL}
861 ${Q}${FIPTOOL} create ${FWU_FIP_ARGS} $@
862 ${Q}${FIPTOOL} info $@
863 @${ECHO_BLANK_LINE}
864 @echo "Built $@ successfully"
865 @${ECHO_BLANK_LINE}
866
867 fiptool: ${FIPTOOL}
868 fip: ${BUILD_PLAT}/${FIP_NAME}
869 fwu_fip: ${BUILD_PLAT}/${FWU_FIP_NAME}
870
871 .PHONY: ${FIPTOOL}
872 ${FIPTOOL}:
873 ${Q}${MAKE} CPPFLAGS="-DVERSION='\"${VERSION_STRING}\"'" --no-print-directory -C ${FIPTOOLPATH}
874
875 sptool: ${SPTOOL}
876 .PHONY: ${SPTOOL}
877 ${SPTOOL}:
878 ${Q}${MAKE} CPPFLAGS="-DVERSION='\"${VERSION_STRING}\"'" --no-print-directory -C ${SPTOOLPATH}
879
880 .PHONY: libraries
881 romlib.bin: libraries
882 ${Q}${MAKE} PLAT_DIR=${PLAT_DIR} BUILD_PLAT=${BUILD_PLAT} INCLUDES='${INCLUDES}' DEFINES='${DEFINES}' --no-print-directory -C ${ROMLIBPATH} all
883
884 cscope:
885 @echo " CSCOPE"
886 ${Q}find ${CURDIR} -name "*.[chsS]" > cscope.files
887 ${Q}cscope -b -q -k
888
889 help:
890 @echo "usage: ${MAKE} PLAT=<${PLATFORM_LIST}> [OPTIONS] [TARGET]"
891 @echo ""
892 @echo "PLAT is used to specify which platform you wish to build."
893 @echo "If no platform is specified, PLAT defaults to: ${DEFAULT_PLAT}"
894 @echo ""
895 @echo "Please refer to the User Guide for a list of all supported options."
896 @echo "Note that the build system doesn't track dependencies for build "
897 @echo "options. Therefore, if any of the build options are changed "
898 @echo "from a previous build, a clean build must be performed."
899 @echo ""
900 @echo "Supported Targets:"
901 @echo " all Build all individual bootloader binaries"
902 @echo " bl1 Build the BL1 binary"
903 @echo " bl2 Build the BL2 binary"
904 @echo " bl2u Build the BL2U binary"
905 @echo " bl31 Build the BL31 binary"
906 @echo " bl32 Build the BL32 binary. If ARCH=aarch32, then "
907 @echo " this builds secure payload specified by AARCH32_SP"
908 @echo " certificates Build the certificates (requires 'GENERATE_COT=1')"
909 @echo " fip Build the Firmware Image Package (FIP)"
910 @echo " fwu_fip Build the FWU Firmware Image Package (FIP)"
911 @echo " checkcodebase Check the coding style of the entire source tree"
912 @echo " checkpatch Check the coding style on changes in the current"
913 @echo " branch against BASE_COMMIT (default origin/master)"
914 @echo " clean Clean the build for the selected platform"
915 @echo " cscope Generate cscope index"
916 @echo " distclean Remove all build artifacts for all platforms"
917 @echo " certtool Build the Certificate generation tool"
918 @echo " fiptool Build the Firmware Image Package (FIP) creation tool"
919 @echo " sptool Build the Secure Partition Package creation tool"
920 @echo " dtbs Build the Device Tree Blobs (if required for the platform)"
921 @echo ""
922 @echo "Note: most build targets require PLAT to be set to a specific platform."
923 @echo ""
924 @echo "example: build all targets for the FVP platform:"
925 @echo " CROSS_COMPILE=aarch64-none-elf- make PLAT=fvp all"