Sanitise includes across codebase
[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/lib/cpus/${ARCH} \
275 -Iinclude/lib/el3_runtime/${ARCH} \
276 ${PLAT_INCLUDES} \
277 ${SPD_INCLUDES}
278
279 ifeq (${ERROR_DEPRECATED},0)
280 INCLUDES += -Iinclude/bl1 \
281 -Iinclude/bl2 \
282 -Iinclude/bl2u \
283 -Iinclude/bl31 \
284 -Iinclude/drivers \
285 -Iinclude/drivers/arm \
286 -Iinclude/drivers/auth \
287 -Iinclude/drivers/io \
288 -Iinclude/drivers/ti/uart \
289 -Iinclude/lib \
290 -Iinclude/lib/cpus \
291 -Iinclude/lib/el3_runtime \
292 -Iinclude/lib/extensions \
293 -Iinclude/lib/pmf \
294 -Iinclude/lib/psci \
295 -Iinclude/lib/xlat_tables \
296 -Iinclude/plat/common \
297 -Iinclude/services \
298 -Iinclude/tools_share
299 endif
300
301 include common/backtrace/backtrace.mk
302
303 ################################################################################
304 # Generic definitions
305 ################################################################################
306
307 include ${MAKE_HELPERS_DIRECTORY}plat_helpers.mk
308
309 BUILD_BASE := ./build
310 BUILD_PLAT := ${BUILD_BASE}/${PLAT}/${BUILD_TYPE}
311
312 SPDS := $(sort $(filter-out none, $(patsubst services/spd/%,%,$(wildcard services/spd/*))))
313
314 # Platforms providing their own TBB makefile may override this value
315 INCLUDE_TBBR_MK := 1
316
317
318 ################################################################################
319 # Include SPD Makefile if one has been specified
320 ################################################################################
321
322 ifneq (${SPD},none)
323 ifeq (${ARCH},aarch32)
324 $(error "Error: SPD is incompatible with AArch32.")
325 endif
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.")
329 endif
330 # We expect to locate an spd.mk under the specified SPD directory
331 SPD_MAKE := $(wildcard services/spd/${SPD}/${SPD}.mk)
332
333 ifeq (${SPD_MAKE},)
334 $(error Error: No services/spd/${SPD}/${SPD}.mk located)
335 endif
336 $(info Including ${SPD_MAKE})
337 include ${SPD_MAKE}
338
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
347 # over the sources.
348 endif
349
350 ################################################################################
351 # Include the platform specific Makefile after the SPD Makefile (the platform
352 # makefile may use all previous definitions in this file)
353 ################################################################################
354
355 include ${PLAT_MAKEFILE_FULL}
356
357 $(eval $(call MAKE_PREREQ_DIR,${BUILD_PLAT}))
358
359 ifeq (${ARM_ARCH_MAJOR},7)
360 include make_helpers/armv7-a-cpus.mk
361 endif
362
363 ifeq ($(ENABLE_PIE),1)
364 TF_CFLAGS += -fpie
365 TF_LDFLAGS += -pie
366 else
367 PIE_FOUND := $(findstring --enable-default-pie,${GCC_V_OUTPUT})
368 ifneq ($(PIE_FOUND),)
369 TF_CFLAGS += -fno-PIE
370 endif
371 endif
372
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
377
378 ifeq (${ARCH},aarch32)
379 NEED_BL32 := yes
380
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)
387
388 ifeq (${AARCH32_SP_MAKE},)
389 $(error Error: No bl32/${AARCH32_SP}/${AARCH32_SP}.mk located)
390 endif
391
392 $(info Including ${AARCH32_SP_MAKE})
393 include ${AARCH32_SP_MAKE}
394 endif
395
396 endif
397
398 ################################################################################
399 # Check incompatible options
400 ################################################################################
401
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.")
406 endif
407 ifneq (${GENERATE_COT},0)
408 $(error "GENERATE_COT and EL3_PAYLOAD_BASE are incompatible build options.")
409 endif
410 ifneq (${TRUSTED_BOARD_BOOT},0)
411 $(error "TRUSTED_BOARD_BOOT and EL3_PAYLOAD_BASE are incompatible build options.")
412 endif
413 endif
414
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.")
419 endif
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 \
423 file.")
424 endif
425 endif
426
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)
431 endif
432
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")
436 endif
437
438 # SMC Calling Convention checks
439 ifneq (${SMCCC_MAJOR_VERSION},1)
440 ifneq (${SPD},none)
441 $(error "SMC Calling Convention 1.X must be used with SPDs")
442 endif
443 ifeq (${ARCH},aarch32)
444 $(error "Only SMCCC 1.X is supported in AArch32 mode.")
445 endif
446 endif
447
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)
452 endif
453 endif
454
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)
459 endif
460 endif
461
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.")
466 endif
467 endif
468
469 ################################################################################
470 # Process platform overrideable behaviour
471 ################################################################################
472
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.
476 ifdef BL2_SOURCES
477 ifdef EL3_PAYLOAD_BASE
478 # If booting an EL3 payload there is no need for a BL33 image
479 # in the FIP file.
480 NEED_BL33 := no
481 else
482 ifdef PRELOADED_BL33_BASE
483 # If booting a BL33 preloaded image there is no need of
484 # another one in the FIP file.
485 NEED_BL33 := no
486 else
487 NEED_BL33 ?= yes
488 endif
489 endif
490 endif
491
492 # If SCP_BL2 is given, we always want FIP to include it.
493 ifdef SCP_BL2
494 NEED_SCP_BL2 := yes
495 endif
496
497 # For AArch32, BL31 is not currently supported.
498 ifneq (${ARCH},aarch32)
499 ifdef BL31_SOURCES
500 # When booting an EL3 payload, there is no need to compile the BL31 image nor
501 # put it in the FIP.
502 ifndef EL3_PAYLOAD_BASE
503 NEED_BL31 := yes
504 endif
505 endif
506 endif
507
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)
517 endif
518 endif
519 # Include TBBR makefile (unless the platform indicates otherwise)
520 ifeq (${INCLUDE_TBBR_MK},1)
521 include make_helpers/tbbr/tbbr_tools.mk
522 endif
523 endif
524
525 ifneq (${FIP_ALIGN},0)
526 FIP_ARGS += --align ${FIP_ALIGN}
527 endif
528
529 ################################################################################
530 # Include libraries' Makefile that are used in all BL
531 ################################################################################
532
533 include lib/stack_protector/stack_protector.mk
534
535 ################################################################################
536 # Auxiliary tools (fiptool, cert_create, etc)
537 ################################################################################
538
539 # Variables for use with Certificate Generation Tool
540 CRTTOOLPATH ?= tools/cert_create
541 CRTTOOL ?= ${CRTTOOLPATH}/cert_create${BIN_EXT}
542
543 # Variables for use with Firmware Image Package
544 FIPTOOLPATH ?= tools/fiptool
545 FIPTOOL ?= ${FIPTOOLPATH}/fiptool${BIN_EXT}
546
547 # Variables for use with sptool
548 SPTOOLPATH ?= tools/sptool
549 SPTOOL ?= ${SPTOOLPATH}/sptool${BIN_EXT}
550
551 # Variables for use with ROMLIB
552 ROMLIBPATH ?= lib/romlib
553
554 ################################################################################
555 # Include BL specific makefiles
556 ################################################################################
557 ifdef BL1_SOURCES
558 NEED_BL1 := yes
559 include bl1/bl1.mk
560 endif
561
562 ifdef BL2_SOURCES
563 NEED_BL2 := yes
564 include bl2/bl2.mk
565 endif
566
567 ifdef BL2U_SOURCES
568 NEED_BL2U := yes
569 include bl2u/bl2u.mk
570 endif
571
572 ifeq (${NEED_BL31},yes)
573 ifdef BL31_SOURCES
574 include bl31/bl31.mk
575 endif
576 endif
577
578 ifdef FDT_SOURCES
579 NEED_FDT := yes
580 endif
581
582 ################################################################################
583 # Build options checks
584 ################################################################################
585
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))
628
629 $(eval $(call assert_numeric,ARM_ARCH_MAJOR))
630 $(eval $(call assert_numeric,ARM_ARCH_MINOR))
631 $(eval $(call assert_numeric,SMCCC_MAJOR_VERSION))
632
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 ################################################################################
638
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))
682
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))
686 else
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))
691 endif
692 endif
693 # Define the AARCH32/AARCH64 flag based on the ARCH flag
694 ifeq (${ARCH},aarch32)
695 $(eval $(call add_define,AARCH32))
696 else
697 $(eval $(call add_define,AARCH64))
698 endif
699
700 # Define the DYN_DISABLE_AUTH flag only if set.
701 ifeq (${DYN_DISABLE_AUTH},1)
702 $(eval $(call add_define,DYN_DISABLE_AUTH))
703 endif
704
705 ################################################################################
706 # Build targets
707 ################################################################################
708
709 .PHONY: all msg_start clean realclean distclean cscope locate-checkpatch checkcodebase checkpatch fiptool sptool fip fwu_fip certtool dtbs
710 .SUFFIXES:
711
712 all: msg_start
713
714 msg_start:
715 @echo "Building ${PLAT}"
716
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
720 endif
721
722 $(eval $(call MAKE_LIB_DIRS))
723 $(eval $(call MAKE_LIB,c))
724
725 # Expand build macros for the different images
726 ifeq (${NEED_BL1},yes)
727 $(eval $(call MAKE_BL,1))
728 endif
729
730 ifeq (${NEED_BL2},yes)
731 ifeq (${BL2_AT_EL3}, 0)
732 FIP_BL2_ARGS := tb-fw
733 endif
734
735 $(if ${BL2}, $(eval $(call TOOL_ADD_IMG,bl2,--${FIP_BL2_ARGS})),\
736 $(eval $(call MAKE_BL,2,${FIP_BL2_ARGS})))
737 endif
738
739 ifeq (${NEED_SCP_BL2},yes)
740 $(eval $(call TOOL_ADD_IMG,scp_bl2,--scp-fw))
741 endif
742
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)))
747 endif
748
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)
753
754 BUILD_BL32 := $(if $(BL32),,$(if $(BL32_SOURCES),1))
755
756 $(if ${BUILD_BL32}, $(eval $(call MAKE_BL,32,tos-fw)),\
757 $(eval $(call TOOL_ADD_IMG,bl32,--tos-fw)))
758 endif
759
760 # Add the BL33 image if required by the platform
761 ifeq (${NEED_BL33},yes)
762 $(eval $(call TOOL_ADD_IMG,bl33,--nt-fw))
763 endif
764
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_)))
768 endif
769
770 # Expand build macros for the different images
771 ifeq (${NEED_FDT},yes)
772 $(eval $(call MAKE_DTBS,$(BUILD_PLAT)/fdts,$(FDT_SOURCES)))
773 endif
774
775 locate-checkpatch:
776 ifndef CHECKPATCH
777 $(error "Please set CHECKPATCH to point to the Linux checkpatch.pl file, eg: CHECKPATCH=../linux/scripts/checkpatch.pl")
778 else
779 ifeq (,$(wildcard ${CHECKPATCH}))
780 $(error "The file CHECKPATCH points to cannot be found, use eg: CHECKPATCH=../linux/scripts/checkpatch.pl")
781 endif
782 endif
783
784 clean:
785 @echo " CLEAN"
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
790
791 realclean distclean:
792 @echo " REALCLEAN"
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
799
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 ; \
806 done ; \
807 else \
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 {} \; ; \
815 fi
816
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; \
826 done
827
828 certtool: ${CRTTOOL}
829
830 .PHONY: ${CRTTOOL}
831 ${CRTTOOL}:
832 ${Q}${MAKE} PLAT=${PLAT} USE_TBBR_DEFS=${USE_TBBR_DEFS} --no-print-directory -C ${CRTTOOLPATH}
833 @${ECHO_BLANK_LINE}
834 @echo "Built $@ successfully"
835 @${ECHO_BLANK_LINE}
836
837 ifneq (${GENERATE_COT},0)
838 certificates: ${CRT_DEPS} ${CRTTOOL}
839 ${Q}${CRTTOOL} ${CRT_ARGS}
840 @${ECHO_BLANK_LINE}
841 @echo "Built $@ successfully"
842 @echo "Certificates can be found in ${BUILD_PLAT}"
843 @${ECHO_BLANK_LINE}
844 endif
845
846 ${BUILD_PLAT}/${FIP_NAME}: ${FIP_DEPS} ${FIPTOOL}
847 ${Q}${FIPTOOL} create ${FIP_ARGS} $@
848 ${Q}${FIPTOOL} info $@
849 @${ECHO_BLANK_LINE}
850 @echo "Built $@ successfully"
851 @${ECHO_BLANK_LINE}
852
853 ifneq (${GENERATE_COT},0)
854 fwu_certificates: ${FWU_CRT_DEPS} ${CRTTOOL}
855 ${Q}${CRTTOOL} ${FWU_CRT_ARGS}
856 @${ECHO_BLANK_LINE}
857 @echo "Built $@ successfully"
858 @echo "FWU certificates can be found in ${BUILD_PLAT}"
859 @${ECHO_BLANK_LINE}
860 endif
861
862 ${BUILD_PLAT}/${FWU_FIP_NAME}: ${FWU_FIP_DEPS} ${FIPTOOL}
863 ${Q}${FIPTOOL} create ${FWU_FIP_ARGS} $@
864 ${Q}${FIPTOOL} info $@
865 @${ECHO_BLANK_LINE}
866 @echo "Built $@ successfully"
867 @${ECHO_BLANK_LINE}
868
869 fiptool: ${FIPTOOL}
870 fip: ${BUILD_PLAT}/${FIP_NAME}
871 fwu_fip: ${BUILD_PLAT}/${FWU_FIP_NAME}
872
873 .PHONY: ${FIPTOOL}
874 ${FIPTOOL}:
875 ${Q}${MAKE} CPPFLAGS="-DVERSION='\"${VERSION_STRING}\"'" --no-print-directory -C ${FIPTOOLPATH}
876
877 sptool: ${SPTOOL}
878 .PHONY: ${SPTOOL}
879 ${SPTOOL}:
880 ${Q}${MAKE} CPPFLAGS="-DVERSION='\"${VERSION_STRING}\"'" --no-print-directory -C ${SPTOOLPATH}
881
882 .PHONY: libraries
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
885
886 cscope:
887 @echo " CSCOPE"
888 ${Q}find ${CURDIR} -name "*.[chsS]" > cscope.files
889 ${Q}cscope -b -q -k
890
891 help:
892 @echo "usage: ${MAKE} PLAT=<${PLATFORM_LIST}> [OPTIONS] [TARGET]"
893 @echo ""
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}"
896 @echo ""
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."
901 @echo ""
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)"
923 @echo ""
924 @echo "Note: most build targets require PLAT to be set to a specific platform."
925 @echo ""
926 @echo "example: build all targets for the FVP platform:"
927 @echo " CROSS_COMPILE=aarch64-none-elf- make PLAT=fvp all"