Makefile 24.5 KB
Newer Older
1
#
2
# Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# Neither the name of ARM nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific
# prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#

31
32
33
#
# Trusted Firmware Version
#
Juan Castillo's avatar
Juan Castillo committed
34
VERSION_MAJOR			:= 1
35
VERSION_MINOR			:= 3
36

37
38
39
# Default goal is build all images
.DEFAULT_GOAL			:= all

40
41
42
43
44
# Avoid any implicit propagation of command line variable definitions to
# sub-Makefiles, like CFLAGS that we reserved for the firmware images'
# usage. Other command line options like "-s" are still propagated as usual.
MAKEOVERRIDES =

45
46
MAKE_HELPERS_DIRECTORY := make_helpers/
include ${MAKE_HELPERS_DIRECTORY}build_macros.mk
47
include ${MAKE_HELPERS_DIRECTORY}build_env.mk
Juan Castillo's avatar
Juan Castillo committed
48
49

################################################################################
50
# Default values for build configurations, and their dependencies
Juan Castillo's avatar
Juan Castillo committed
51
################################################################################
Jeenu Viswambharan's avatar
Jeenu Viswambharan committed
52

53
54
include ${MAKE_HELPERS_DIRECTORY}defaults.mk

55
# Assertions enabled for DEBUG builds by default
Juan Castillo's avatar
Juan Castillo committed
56
ASM_ASSERTION			:= ${DEBUG}
57
ENABLE_ASSERTIONS		:= ${DEBUG}
58
59
ENABLE_PMF			:= ${ENABLE_RUNTIME_INSTRUMENTATION}
PLAT				:= ${DEFAULT_PLAT}
Juan Castillo's avatar
Juan Castillo committed
60
61
62
63

################################################################################
# Checkpatch script options
################################################################################
64

65
CHECKCODE_ARGS		:=	--no-patch
66
67
# Do not check the coding style on imported library files or documentation files
INC_LIB_DIRS_TO_CHECK	:=	$(sort $(filter-out			\
68
					include/lib/libfdt		\
69
70
71
72
73
74
					include/lib/stdlib,		\
					$(wildcard include/lib/*)))
INC_DIRS_TO_CHECK	:=	$(sort $(filter-out			\
					include/lib,			\
					$(wildcard include/*)))
LIB_DIRS_TO_CHECK	:=	$(sort $(filter-out			\
75
					lib/libfdt%			\
76
77
78
79
80
81
82
83
84
85
86
87
					lib/stdlib,			\
					$(wildcard lib/*)))
ROOT_DIRS_TO_CHECK	:=	$(sort $(filter-out			\
					lib				\
					include				\
					docs				\
					%.md,				\
					$(wildcard *)))
CHECK_PATHS		:=	${ROOT_DIRS_TO_CHECK}			\
				${INC_DIRS_TO_CHECK}			\
				${INC_LIB_DIRS_TO_CHECK}		\
				${LIB_DIRS_TO_CHECK}
88

Juan Castillo's avatar
Juan Castillo committed
89
90
91
92
93
94

################################################################################
# Process build options
################################################################################

# Verbose flag
Jeenu Viswambharan's avatar
Jeenu Viswambharan committed
95
ifeq (${V},0)
96
        Q:=@
Juan Castillo's avatar
Juan Castillo committed
97
        CHECKCODE_ARGS	+=	--no-summary --terse
98
else
99
        Q:=
100
endif
101
102
export Q

Juan Castillo's avatar
Juan Castillo committed
103
104
# Process Debug flag
$(eval $(call add_define,DEBUG))
105
ifneq (${DEBUG}, 0)
Juan Castillo's avatar
Juan Castillo committed
106
        BUILD_TYPE	:=	debug
107
        TF_CFLAGS	+= 	-g
Juan Castillo's avatar
Juan Castillo committed
108
109
110
        ASFLAGS		+= 	-g -Wa,--gdwarf-2
        # Use LOG_LEVEL_INFO by default for debug builds
        LOG_LEVEL	:=	40
111
else
Juan Castillo's avatar
Juan Castillo committed
112
113
114
115
        BUILD_TYPE	:=	release
        $(eval $(call add_define,NDEBUG))
        # Use LOG_LEVEL_NOTICE by default for release builds
        LOG_LEVEL	:=	20
116
117
endif

118
119
# Default build string (git branch and commit)
ifeq (${BUILD_STRING},)
120
        BUILD_STRING	:=	$(shell git describe --always --dirty --tags 2> /dev/null)
121
122
123
endif
VERSION_STRING		:=	v${VERSION_MAJOR}.${VERSION_MINOR}(${BUILD_TYPE}):${BUILD_STRING}

Juan Castillo's avatar
Juan Castillo committed
124
125
126
127
# The cert_create tool cannot generate certificates individually, so we use the
# target 'certificates' to create them all
ifneq (${GENERATE_COT},0)
        FIP_DEPS += certificates
128
        FWU_FIP_DEPS += fwu_certificates
Juan Castillo's avatar
Juan Castillo committed
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
endif


################################################################################
# Toolchain
################################################################################

CC			:=	${CROSS_COMPILE}gcc
CPP			:=	${CROSS_COMPILE}cpp
AS			:=	${CROSS_COMPILE}gcc
AR			:=	${CROSS_COMPILE}ar
LD			:=	${CROSS_COMPILE}ld
OC			:=	${CROSS_COMPILE}objcopy
OD			:=	${CROSS_COMPILE}objdump
NM			:=	${CROSS_COMPILE}nm
PP			:=	${CROSS_COMPILE}gcc -E

146
147
148
149
150
151
ASFLAGS_aarch64		=	-mgeneral-regs-only
TF_CFLAGS_aarch64	=	-mgeneral-regs-only -mstrict-align

ASFLAGS_aarch32		=	-march=armv8-a
TF_CFLAGS_aarch32	=	-march=armv8-a

152
153
154
155
156
157
CPPFLAGS		=	${DEFINES} ${INCLUDES} -nostdinc		\
				-Wmissing-include-dirs -Werror
ASFLAGS			+=	$(CPPFLAGS) $(ASFLAGS_$(ARCH))			\
				-D__ASSEMBLY__ -ffreestanding 			\
				-Wa,--fatal-warnings
TF_CFLAGS		+=	$(CPPFLAGS) $(TF_CFLAGS_$(ARCH))		\
Douglas Raillard's avatar
Douglas Raillard committed
158
				-ffreestanding -fno-builtin -Wall -std=c99 -Os	\
159
				-ffunction-sections -fdata-sections
Juan Castillo's avatar
Juan Castillo committed
160
161
162
163
164
165
166
167

LDFLAGS			+=	--fatal-warnings -O1
LDFLAGS			+=	--gc-sections


################################################################################
# Common sources and include directories
################################################################################
168
include lib/stdlib/stdlib.mk
Juan Castillo's avatar
Juan Castillo committed
169
170

BL_COMMON_SOURCES	+=	common/bl_common.c			\
171
				common/tf_printf.c			\
172
173
174
				common/${ARCH}/debug.S			\
				lib/${ARCH}/cache_helpers.S		\
				lib/${ARCH}/misc_helpers.S		\
175
				plat/common/${ARCH}/plat_common.c	\
176
				plat/common/${ARCH}/platform_helpers.S	\
177
				${STDLIB_SRCS}
178

179
180
181
INCLUDES		+=	-Iinclude/bl1				\
				-Iinclude/bl31				\
				-Iinclude/common			\
182
				-Iinclude/common/${ARCH}		\
183
184
185
186
187
188
				-Iinclude/drivers			\
				-Iinclude/drivers/arm			\
				-Iinclude/drivers/auth			\
				-Iinclude/drivers/io			\
				-Iinclude/drivers/ti/uart		\
				-Iinclude/lib				\
189
				-Iinclude/lib/${ARCH}			\
190
				-Iinclude/lib/cpus			\
191
				-Iinclude/lib/cpus/${ARCH}		\
192
				-Iinclude/lib/el3_runtime		\
193
				-Iinclude/lib/el3_runtime/${ARCH}	\
dp-arm's avatar
dp-arm committed
194
				-Iinclude/lib/pmf			\
195
				-Iinclude/lib/psci			\
196
				-Iinclude/lib/xlat_tables		\
197
198
199
				-Iinclude/plat/common			\
				-Iinclude/services			\
				${PLAT_INCLUDES}			\
Juan Castillo's avatar
Juan Castillo committed
200
201
202
203
204
205
206
				${SPD_INCLUDES}


################################################################################
# Generic definitions
################################################################################

207
208
include ${MAKE_HELPERS_DIRECTORY}plat_helpers.mk

209
210
211
BUILD_BASE		:=	./build
BUILD_PLAT		:=	${BUILD_BASE}/${PLAT}/${BUILD_TYPE}

212
SPDS			:=	$(sort $(filter-out none, $(patsubst services/spd/%,%,$(wildcard services/spd/*))))
213

Juan Castillo's avatar
Juan Castillo committed
214
215
216
217
218
219
220
221
222
# Platforms providing their own TBB makefile may override this value
INCLUDE_TBBR_MK		:=	1


################################################################################
# Include SPD Makefile if one has been specified
################################################################################

ifneq (${SPD},none)
223
224
225
ifeq (${ARCH},aarch32)
	$(error "Error: SPD is incompatible with AArch32.")
endif
226
227
228
229
ifdef EL3_PAYLOAD_BASE
        $(warning "SPD and EL3_PAYLOAD_BASE are incompatible build options.")
        $(warning "The SPD and its BL32 companion will be present but ignored.")
endif
Juan Castillo's avatar
Juan Castillo committed
230
        # We expect to locate an spd.mk under the specified SPD directory
231
        SPD_MAKE	:=	$(wildcard services/spd/${SPD}/${SPD}.mk)
Juan Castillo's avatar
Juan Castillo committed
232
233
234
235
236
237
238

        ifeq (${SPD_MAKE},)
                $(error Error: No services/spd/${SPD}/${SPD}.mk located)
        endif
        $(info Including ${SPD_MAKE})
        include ${SPD_MAKE}

239
240
241
242
243
244
245
246
247
        # If there's BL32 companion for the chosen SPD, we expect that the SPD's
        # Makefile would set NEED_BL32 to "yes". In this case, the build system
        # supports two mutually exclusive options:
        # * BL32 is built from source: then BL32_SOURCES must contain the list
        #   of source files to build BL32
        # * BL32 is a prebuilt binary: then BL32 must point to the image file
        #   that will be included in the FIP
        # If both BL32_SOURCES and BL32 are defined, the binary takes precedence
        # over the sources.
Juan Castillo's avatar
Juan Castillo committed
248
endif
249

250
251
252
253
254
255
################################################################################
# Include libraries' Makefile that are used in all BL
################################################################################

include lib/stack_protector/stack_protector.mk

Juan Castillo's avatar
Juan Castillo committed
256
257
258
259
260

################################################################################
# Include the platform specific Makefile after the SPD Makefile (the platform
# makefile may use all previous definitions in this file)
################################################################################
261

262
include ${PLAT_MAKEFILE_FULL}
263

264
265
# Platform compatibility is not supported in AArch32
ifneq (${ARCH},aarch32)
266
267
268
269
270
271
272
273
274
# If the platform has not defined ENABLE_PLAT_COMPAT, then enable it by default
ifndef ENABLE_PLAT_COMPAT
ENABLE_PLAT_COMPAT := 1
endif

# Include the platform compatibility helpers for PSCI
ifneq (${ENABLE_PLAT_COMPAT}, 0)
include plat/compat/plat_compat.mk
endif
275
endif
276

277
278
279
# Include the CPU specific operations makefile, which provides default
# values for all CPU errata workarounds and CPU specific optimisations.
# This can be overridden by the platform.
280
include lib/cpus/cpu-ops.mk
281

Juan Castillo's avatar
Juan Castillo committed
282

283
284
285
286
287
################################################################################
# Check incompatible options
################################################################################

ifdef EL3_PAYLOAD_BASE
288
289
290
        ifdef PRELOADED_BL33_BASE
                $(warning "PRELOADED_BL33_BASE and EL3_PAYLOAD_BASE are \
                incompatible build options. EL3_PAYLOAD_BASE has priority.")
291
292
293
294
295
296
297
298
        endif
endif

ifeq (${NEED_BL33},yes)
        ifdef EL3_PAYLOAD_BASE
                $(warning "BL33 image is not needed when option \
                BL33_PAYLOAD_BASE is used and won't be added to the FIP file.")
        endif
299
300
301
302
        ifdef PRELOADED_BL33_BASE
                $(warning "BL33 image is not needed when option \
                PRELOADED_BL33_BASE is used and won't be added to the FIP \
                file.")
303
304
305
        endif
endif

306
ifeq (${ARCH},aarch32)
307
    # For AArch32, LOAD_IMAGE_V2 must be enabled.
308
309
310
    ifeq (${LOAD_IMAGE_V2}, 0)
        $(error "For AArch32, LOAD_IMAGE_V2 must be enabled.")
    endif
311
312
313
314
    # TRUSTED_BOARD_BOOT is currently not supported for AArch32.
    ifeq (${TRUSTED_BOARD_BOOT},1)
        $(error "TRUSTED_BOARD_BOOT is currently not supported for AArch32")
    endif
315
316
endif

317
318
319
320
321
# When building for systems with hardware-assisted coherency, there's no need to
# use USE_COHERENT_MEM. Require that USE_COHERENT_MEM must be set to 0 too.
ifeq ($(HW_ASSISTED_COHERENCY)-$(USE_COHERENT_MEM),1-1)
$(error USE_COHERENT_MEM cannot be enabled with HW_ASSISTED_COHERENCY)
endif
322

Juan Castillo's avatar
Juan Castillo committed
323
324
325
326
327
328
################################################################################
# Process platform overrideable behaviour
################################################################################

# Check if -pedantic option should be used
ifeq (${DISABLE_PEDANTIC},0)
329
        TF_CFLAGS	+= 	-pedantic
330
331
endif

332
# Using the ARM Trusted Firmware BL2 implies that a BL33 image also needs to be
Juan Castillo's avatar
Juan Castillo committed
333
334
# supplied for the FIP and Certificate generation tools. This flag can be
# overridden by the platform.
335
ifdef BL2_SOURCES
336
337
338
339
340
        ifdef EL3_PAYLOAD_BASE
                # If booting an EL3 payload there is no need for a BL33 image
                # in the FIP file.
                NEED_BL33		:=	no
        else
341
                ifdef PRELOADED_BL33_BASE
342
343
344
345
346
347
348
                        # If booting a BL33 preloaded image there is no need of
                        # another one in the FIP file.
                        NEED_BL33		:=	no
                else
                        NEED_BL33		?=	yes
                endif
        endif
349
350
endif

351
352
353
354
355
# If SCP_BL2 is given, we always want FIP to include it.
ifdef SCP_BL2
        NEED_SCP_BL2		:=	yes
endif

Juan Castillo's avatar
Juan Castillo committed
356
357
358
359
360
# Process TBB related flags
ifneq (${GENERATE_COT},0)
        # Common cert_create options
        ifneq (${CREATE_KEYS},0)
                $(eval CRT_ARGS += -n)
361
                $(eval FWU_CRT_ARGS += -n)
Juan Castillo's avatar
Juan Castillo committed
362
363
                ifneq (${SAVE_KEYS},0)
                        $(eval CRT_ARGS += -k)
364
                        $(eval FWU_CRT_ARGS += -k)
Juan Castillo's avatar
Juan Castillo committed
365
366
367
368
369
370
                endif
        endif
        # Include TBBR makefile (unless the platform indicates otherwise)
        ifeq (${INCLUDE_TBBR_MK},1)
                include make_helpers/tbbr/tbbr_tools.mk
        endif
371
endif
372

373
374
375
376
ifneq (${FIP_ALIGN},0)
FIP_ARGS += --align ${FIP_ALIGN}
endif

Juan Castillo's avatar
Juan Castillo committed
377
################################################################################
dp-arm's avatar
dp-arm committed
378
# Auxiliary tools (fiptool, cert_create, etc)
Juan Castillo's avatar
Juan Castillo committed
379
################################################################################
380

Juan Castillo's avatar
Juan Castillo committed
381
382
# Variables for use with Certificate Generation Tool
CRTTOOLPATH		?=	tools/cert_create
383
CRTTOOL			?=	${CRTTOOLPATH}/cert_create${BIN_EXT}
384

Juan Castillo's avatar
Juan Castillo committed
385
# Variables for use with Firmware Image Package
dp-arm's avatar
dp-arm committed
386
387
FIPTOOLPATH		?=	tools/fiptool
FIPTOOL			?=	${FIPTOOLPATH}/fiptool${BIN_EXT}
Jeenu Viswambharan's avatar
Jeenu Viswambharan committed
388

389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
################################################################################
# Include BL specific makefiles
################################################################################
ifdef BL1_SOURCES
NEED_BL1 := yes
include bl1/bl1.mk
endif

ifdef BL2_SOURCES
NEED_BL2 := yes
include bl2/bl2.mk
endif

# For AArch32, BL31 is not applicable, and BL2U is not supported at present.
ifneq (${ARCH},aarch32)
ifdef BL2U_SOURCES
NEED_BL2U := yes
include bl2u/bl2u.mk
endif

ifdef BL31_SOURCES
# When booting an EL3 payload, there is no need to compile the BL31 image nor
# put it in the FIP.
ifndef EL3_PAYLOAD_BASE
NEED_BL31 := yes
include bl31/bl31.mk
endif
endif
endif

ifeq (${ARCH},aarch32)
NEED_BL32 := yes

################################################################################
# Build `AARCH32_SP` as BL32 image for AArch32
################################################################################
ifneq (${AARCH32_SP},none)
# We expect to locate an sp.mk under the specified AARCH32_SP directory
AARCH32_SP_MAKE	:=	$(wildcard bl32/${AARCH32_SP}/${AARCH32_SP}.mk)

ifeq (${AARCH32_SP_MAKE},)
  $(error Error: No bl32/${AARCH32_SP}/${AARCH32_SP}.mk located)
endif

$(info Including ${AARCH32_SP_MAKE})
include ${AARCH32_SP_MAKE}
endif

endif
438

Juan Castillo's avatar
Juan Castillo committed
439
440
441
################################################################################
# Build options checks
################################################################################
442

Juan Castillo's avatar
Juan Castillo committed
443
$(eval $(call assert_boolean,ASM_ASSERTION))
444
$(eval $(call assert_boolean,COLD_BOOT_SINGLE_CPU))
445
446
447
448
449
$(eval $(call assert_boolean,CREATE_KEYS))
$(eval $(call assert_boolean,CTX_INCLUDE_AARCH32_REGS))
$(eval $(call assert_boolean,CTX_INCLUDE_FPREGS))
$(eval $(call assert_boolean,DEBUG))
$(eval $(call assert_boolean,DISABLE_PEDANTIC))
450
$(eval $(call assert_boolean,ENABLE_ASSERTIONS))
451
$(eval $(call assert_boolean,ENABLE_PLAT_COMPAT))
452
$(eval $(call assert_boolean,ENABLE_PMF))
453
$(eval $(call assert_boolean,ENABLE_PSCI_STAT))
dp-arm's avatar
dp-arm committed
454
$(eval $(call assert_boolean,ENABLE_RUNTIME_INSTRUMENTATION))
455
456
$(eval $(call assert_boolean,ERROR_DEPRECATED))
$(eval $(call assert_boolean,GENERATE_COT))
457
$(eval $(call assert_boolean,HW_ASSISTED_COHERENCY))
458
459
460
461
462
463
464
465
466
467
468
$(eval $(call assert_boolean,LOAD_IMAGE_V2))
$(eval $(call assert_boolean,NS_TIMER_SWITCH))
$(eval $(call assert_boolean,PL011_GENERIC_UART))
$(eval $(call assert_boolean,PROGRAMMABLE_RESET_ADDRESS))
$(eval $(call assert_boolean,PSCI_EXTENDED_STATE_ID))
$(eval $(call assert_boolean,RESET_TO_BL31))
$(eval $(call assert_boolean,SAVE_KEYS))
$(eval $(call assert_boolean,SEPARATE_CODE_AND_RODATA))
$(eval $(call assert_boolean,SPIN_ON_BL1_EXIT))
$(eval $(call assert_boolean,TRUSTED_BOARD_BOOT))
$(eval $(call assert_boolean,USE_COHERENT_MEM))
469

470
471
472
$(eval $(call assert_numeric,ARM_ARCH_MAJOR))
$(eval $(call assert_numeric,ARM_ARCH_MINOR))

Juan Castillo's avatar
Juan Castillo committed
473
474
475
476
477
################################################################################
# Add definitions to the cpp preprocessor based on the current build options.
# This is done after including the platform specific makefile to allow the
# platform to overwrite the default options
################################################################################
478

Juan Castillo's avatar
Juan Castillo committed
479
$(eval $(call add_define,ARM_CCI_PRODUCT_ID))
480
481
$(eval $(call add_define,ARM_ARCH_MAJOR))
$(eval $(call add_define,ARM_ARCH_MINOR))
482
$(eval $(call add_define,ARM_GIC_ARCH))
483
$(eval $(call add_define,ASM_ASSERTION))
484
$(eval $(call add_define,COLD_BOOT_SINGLE_CPU))
485
486
$(eval $(call add_define,CTX_INCLUDE_AARCH32_REGS))
$(eval $(call add_define,CTX_INCLUDE_FPREGS))
487
$(eval $(call add_define,ENABLE_ASSERTIONS))
488
$(eval $(call add_define,ENABLE_PLAT_COMPAT))
489
$(eval $(call add_define,ENABLE_PMF))
490
$(eval $(call add_define,ENABLE_PSCI_STAT))
dp-arm's avatar
dp-arm committed
491
$(eval $(call add_define,ENABLE_RUNTIME_INSTRUMENTATION))
492
$(eval $(call add_define,ERROR_DEPRECATED))
493
$(eval $(call add_define,HW_ASSISTED_COHERENCY))
494
495
496
497
498
499
500
501
502
503
504
505
506
507
$(eval $(call add_define,LOAD_IMAGE_V2))
$(eval $(call add_define,LOG_LEVEL))
$(eval $(call add_define,NS_TIMER_SWITCH))
$(eval $(call add_define,PL011_GENERIC_UART))
$(eval $(call add_define,PLAT_${PLAT}))
$(eval $(call add_define,PROGRAMMABLE_RESET_ADDRESS))
$(eval $(call add_define,PSCI_EXTENDED_STATE_ID))
$(eval $(call add_define,RESET_TO_BL31))
$(eval $(call add_define,SEPARATE_CODE_AND_RODATA))
$(eval $(call add_define,SPD_${SPD}))
$(eval $(call add_define,SPIN_ON_BL1_EXIT))
$(eval $(call add_define,TRUSTED_BOARD_BOOT))
$(eval $(call add_define,USE_COHERENT_MEM))

508
509
# Define the EL3_PAYLOAD_BASE flag only if it is provided.
ifdef EL3_PAYLOAD_BASE
510
511
        $(eval $(call add_define,EL3_PAYLOAD_BASE))
else
512
513
514
515
        # Define the PRELOADED_BL33_BASE flag only if it is provided and
        # EL3_PAYLOAD_BASE is not defined, as it has priority.
        ifdef PRELOADED_BL33_BASE
                $(eval $(call add_define,PRELOADED_BL33_BASE))
516
        endif
517
endif
518
519
520
521
522
523
# Define the AARCH32/AARCH64 flag based on the ARCH flag
ifeq (${ARCH},aarch32)
        $(eval $(call add_define,AARCH32))
else
        $(eval $(call add_define,AARCH64))
endif
524

Juan Castillo's avatar
Juan Castillo committed
525
526
527
################################################################################
# Build targets
################################################################################
528

529
.PHONY:	all msg_start clean realclean distclean cscope locate-checkpatch checkcodebase checkpatch fiptool fip fwu_fip certtool
Juan Castillo's avatar
Juan Castillo committed
530
.SUFFIXES:
531

Juan Castillo's avatar
Juan Castillo committed
532
all: msg_start
533

Juan Castillo's avatar
Juan Castillo committed
534
535
msg_start:
	@echo "Building ${PLAT}"
536

537
538
# Check if deprecated declarations should be treated as error or not.
ifeq (${ERROR_DEPRECATED},0)
539
    TF_CFLAGS		+= 	-Wno-error=deprecated-declarations
540
541
endif

Juan Castillo's avatar
Juan Castillo committed
542
543
544
545
# Expand build macros for the different images
ifeq (${NEED_BL1},yes)
$(eval $(call MAKE_BL,1))
endif
546

Juan Castillo's avatar
Juan Castillo committed
547
ifeq (${NEED_BL2},yes)
548
549
$(if ${BL2}, $(eval $(call MAKE_TOOL_ARGS,2,${BL2},tb-fw)),\
	$(eval $(call MAKE_BL,2,tb-fw)))
Juan Castillo's avatar
Juan Castillo committed
550
endif
551

552
553
554
555
ifeq (${NEED_SCP_BL2},yes)
$(eval $(call FIP_ADD_IMG,SCP_BL2,--scp-fw))
endif

Juan Castillo's avatar
Juan Castillo committed
556
557
ifeq (${NEED_BL31},yes)
BL31_SOURCES += ${SPD_SOURCES}
558
559
$(if ${BL31}, $(eval $(call MAKE_TOOL_ARGS,31,${BL31},soc-fw)),\
	$(eval $(call MAKE_BL,31,soc-fw)))
Juan Castillo's avatar
Juan Castillo committed
560
endif
561

562
563
564
# If a BL32 image is needed but neither BL32 nor BL32_SOURCES is defined, the
# build system will call FIP_ADD_IMG to print a warning message and abort the
# process. Note that the dependency on BL32 applies to the FIP only.
Juan Castillo's avatar
Juan Castillo committed
565
ifeq (${NEED_BL32},yes)
566
567
568
$(if ${BL32}, $(eval $(call MAKE_TOOL_ARGS,32,${BL32},tos-fw)),\
	$(if ${BL32_SOURCES}, $(eval $(call MAKE_BL,32,tos-fw)),\
		$(eval $(call FIP_ADD_IMG,BL32,--tos-fw))))
569
570
endif

Juan Castillo's avatar
Juan Castillo committed
571
572
# Add the BL33 image if required by the platform
ifeq (${NEED_BL33},yes)
573
$(eval $(call FIP_ADD_IMG,BL33,--nt-fw))
574
575
endif

576
577
578
ifeq (${NEED_BL2U},yes)
BL2U_PATH	:= $(if ${BL2U},${BL2U},$(call IMG_BIN,2u))
$(if ${BL2U}, ,$(eval $(call MAKE_BL,2u)))
579
$(eval $(call FWU_FIP_ADD_PAYLOAD,${BL2U_PATH},--ap-fwu-cfg))
580
581
endif

582
583
584
585
586
587
588
589
590
locate-checkpatch:
ifndef CHECKPATCH
	$(error "Please set CHECKPATCH to point to the Linux checkpatch.pl file, eg: CHECKPATCH=../linux/script/checkpatch.pl")
else
ifeq (,$(wildcard ${CHECKPATCH}))
	$(error "The file CHECKPATCH points to cannot be found, use eg: CHECKPATCH=../linux/script/checkpatch.pl")
endif
endif

591
clean:
Juan Castillo's avatar
Juan Castillo committed
592
	@echo "  CLEAN"
593
	$(call SHELL_REMOVE_DIR,${BUILD_PLAT})
Juan Castillo's avatar
Juan Castillo committed
594
595
	${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean
	${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} clean
596

597
realclean distclean:
Juan Castillo's avatar
Juan Castillo committed
598
	@echo "  REALCLEAN"
599
600
	$(call SHELL_REMOVE_DIR,${BUILD_BASE})
	$(call SHELL_DELETE_ALL, ${CURDIR}/cscope.*)
Juan Castillo's avatar
Juan Castillo committed
601
602
	${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean
	${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} clean
603

604
checkcodebase:		locate-checkpatch
Juan Castillo's avatar
Juan Castillo committed
605
	@echo "  CHECKING STYLE"
606
	@if test -d .git ; then						\
607
		git ls-files | grep -E -v 'libfdt|stdlib|docs|\.md' |	\
608
609
610
611
612
613
614
615
616
617
618
619
		while read GIT_FILE ;					\
		do ${CHECKPATCH} ${CHECKCODE_ARGS} -f $$GIT_FILE ;	\
		done ;							\
	else								\
		 find . -type f -not -iwholename "*.git*"		\
		 -not -iwholename "*build*"				\
		 -not -iwholename "*libfdt*"				\
		 -not -iwholename "*stdlib*"				\
		 -not -iwholename "*docs*"				\
		 -not -iwholename "*.md"				\
		 -exec ${CHECKPATCH} ${CHECKCODE_ARGS} -f {} \; ;	\
	fi
620
621

checkpatch:		locate-checkpatch
Juan Castillo's avatar
Juan Castillo committed
622
	@echo "  CHECKING STYLE"
623
	${Q}git format-patch --stdout ${BASE_COMMIT}..HEAD -- ${CHECK_PATHS} | ${CHECKPATCH} - || true
Juan Castillo's avatar
Juan Castillo committed
624
625

certtool: ${CRTTOOL}
626

627
628
.PHONY: ${CRTTOOL}
${CRTTOOL}:
Juan Castillo's avatar
Juan Castillo committed
629
	${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH}
630
	@${ECHO_BLANK_LINE}
Juan Castillo's avatar
Juan Castillo committed
631
	@echo "Built $@ successfully"
632
	@${ECHO_BLANK_LINE}
633

634
ifneq (${GENERATE_COT},0)
Juan Castillo's avatar
Juan Castillo committed
635
636
certificates: ${CRT_DEPS} ${CRTTOOL}
	${Q}${CRTTOOL} ${CRT_ARGS}
637
	@${ECHO_BLANK_LINE}
Juan Castillo's avatar
Juan Castillo committed
638
639
	@echo "Built $@ successfully"
	@echo "Certificates can be found in ${BUILD_PLAT}"
640
	@${ECHO_BLANK_LINE}
641
642
endif

Juan Castillo's avatar
Juan Castillo committed
643
${BUILD_PLAT}/${FIP_NAME}: ${FIP_DEPS} ${FIPTOOL}
dp-arm's avatar
dp-arm committed
644
645
	${Q}${FIPTOOL} create ${FIP_ARGS} $@
	${Q}${FIPTOOL} info $@
646
	@${ECHO_BLANK_LINE}
Juan Castillo's avatar
Juan Castillo committed
647
	@echo "Built $@ successfully"
648
	@${ECHO_BLANK_LINE}
649

650
651
652
653
654
655
656
657
658
659
ifneq (${GENERATE_COT},0)
fwu_certificates: ${FWU_CRT_DEPS} ${CRTTOOL}
	${Q}${CRTTOOL} ${FWU_CRT_ARGS}
	@echo
	@echo "Built $@ successfully"
	@echo "FWU certificates can be found in ${BUILD_PLAT}"
	@echo
endif

${BUILD_PLAT}/${FWU_FIP_NAME}: ${FWU_FIP_DEPS} ${FIPTOOL}
dp-arm's avatar
dp-arm committed
660
661
	${Q}${FIPTOOL} create ${FWU_FIP_ARGS} $@
	${Q}${FIPTOOL} info $@
662
663
664
665
	@echo
	@echo "Built $@ successfully"
	@echo

Juan Castillo's avatar
Juan Castillo committed
666
667
fiptool: ${FIPTOOL}
fip: ${BUILD_PLAT}/${FIP_NAME}
668
fwu_fip: ${BUILD_PLAT}/${FWU_FIP_NAME}
669

Juan Castillo's avatar
Juan Castillo committed
670
671
.PHONY: ${FIPTOOL}
${FIPTOOL}:
dp-arm's avatar
dp-arm committed
672
	${Q}${MAKE} CPPFLAGS="-DVERSION='\"${VERSION_STRING}\"'" --no-print-directory -C ${FIPTOOLPATH}
673

674
675
676
677
678
cscope:
	@echo "  CSCOPE"
	${Q}find ${CURDIR} -name "*.[chsS]" > cscope.files
	${Q}cscope -b -q -k

679
help:
680
	@echo "usage: ${MAKE} PLAT=<${PLATFORM_LIST}> [OPTIONS] [TARGET]"
681
682
	@echo ""
	@echo "PLAT is used to specify which platform you wish to build."
683
	@echo "If no platform is specified, PLAT defaults to: ${DEFAULT_PLAT}"
684
	@echo ""
685
686
687
688
689
	@echo "Please refer to the User Guide for a list of all supported options."
	@echo "Note that the build system doesn't track dependencies for build "
	@echo "options. Therefore, if any of the build options are changed "
	@echo "from a previous build, a clean build must be performed."
	@echo ""
690
	@echo "Supported Targets:"
691
	@echo "  all            Build all individual bootloader binaries"
692
	@echo "  bl1            Build the BL1 binary"
693
	@echo "  bl2            Build the BL2 binary"
694
	@echo "  bl2u           Build the BL2U binary"
695
	@echo "  bl31           Build the BL31 binary"
696
697
	@echo "  bl32           Build the BL32 binary. If ARCH=aarch32, then "
	@echo "                 this builds secure payload specified by AARCH32_SP"
Juan Castillo's avatar
Juan Castillo committed
698
	@echo "  certificates   Build the certificates (requires 'GENERATE_COT=1')"
699
	@echo "  fip            Build the Firmware Image Package (FIP)"
700
	@echo "  fwu_fip        Build the FWU Firmware Image Package (FIP)"
701
702
703
704
	@echo "  checkcodebase  Check the coding style of the entire source tree"
	@echo "  checkpatch     Check the coding style on changes in the current"
	@echo "                 branch against BASE_COMMIT (default origin/master)"
	@echo "  clean          Clean the build for the selected platform"
705
	@echo "  cscope         Generate cscope index"
706
	@echo "  distclean      Remove all build artifacts for all platforms"
707
	@echo "  certtool       Build the Certificate generation tool"
708
	@echo "  fiptool        Build the Firmware Image Package (FIP) creation tool"
709
	@echo ""
710
	@echo "Note: most build targets require PLAT to be set to a specific platform."
711
712
713
	@echo ""
	@echo "example: build all targets for the FVP platform:"
	@echo "  CROSS_COMPILE=aarch64-none-elf- make PLAT=fvp all"