Makefile 24.4 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
55
56
ifdef ASM_ASSERTION
        $(warning ASM_ASSERTION is removed, use ENABLE_ASSERTIONS instead.)
endif

57
58
include ${MAKE_HELPERS_DIRECTORY}defaults.mk

59
60
# Assertions enabled for DEBUG builds by default
ENABLE_ASSERTIONS		:= ${DEBUG}
61
62
ENABLE_PMF			:= ${ENABLE_RUNTIME_INSTRUMENTATION}
PLAT				:= ${DEFAULT_PLAT}
Juan Castillo's avatar
Juan Castillo committed
63
64
65
66

################################################################################
# Checkpatch script options
################################################################################
67

68
CHECKCODE_ARGS		:=	--no-patch
69
70
# Do not check the coding style on imported library files or documentation files
INC_LIB_DIRS_TO_CHECK	:=	$(sort $(filter-out			\
71
					include/lib/libfdt		\
72
73
74
75
76
77
					include/lib/stdlib,		\
					$(wildcard include/lib/*)))
INC_DIRS_TO_CHECK	:=	$(sort $(filter-out			\
					include/lib,			\
					$(wildcard include/*)))
LIB_DIRS_TO_CHECK	:=	$(sort $(filter-out			\
78
					lib/libfdt%			\
79
80
81
82
83
84
85
86
87
88
89
90
					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}
91

Juan Castillo's avatar
Juan Castillo committed
92
93
94
95
96
97

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

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

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

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

Juan Castillo's avatar
Juan Castillo committed
127
128
129
130
# 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
131
        FWU_FIP_DEPS += fwu_certificates
Juan Castillo's avatar
Juan Castillo committed
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
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

149
150
151
152
153
154
ASFLAGS_aarch64		=	-mgeneral-regs-only
TF_CFLAGS_aarch64	=	-mgeneral-regs-only -mstrict-align

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

155
156
157
158
159
160
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
161
				-ffreestanding -fno-builtin -Wall -std=c99 -Os	\
162
				-ffunction-sections -fdata-sections
Juan Castillo's avatar
Juan Castillo committed
163
164
165
166
167
168
169
170

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


################################################################################
# Common sources and include directories
################################################################################
171
include lib/stdlib/stdlib.mk
Juan Castillo's avatar
Juan Castillo committed
172
173

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

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


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

210
211
include ${MAKE_HELPERS_DIRECTORY}plat_helpers.mk

212
213
214
BUILD_BASE		:=	./build
BUILD_PLAT		:=	${BUILD_BASE}/${PLAT}/${BUILD_TYPE}

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

Juan Castillo's avatar
Juan Castillo committed
217
218
219
220
221
222
223
224
225
# 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)
226
227
228
ifeq (${ARCH},aarch32)
	$(error "Error: SPD is incompatible with AArch32.")
endif
229
230
231
232
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
233
        # We expect to locate an spd.mk under the specified SPD directory
234
        SPD_MAKE	:=	$(wildcard services/spd/${SPD}/${SPD}.mk)
Juan Castillo's avatar
Juan Castillo committed
235
236
237
238
239
240
241

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

242
243
244
245
246
247
248
249
250
        # 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
251
endif
252

253
254
255
256
257
258
################################################################################
# Include libraries' Makefile that are used in all BL
################################################################################

include lib/stack_protector/stack_protector.mk

Juan Castillo's avatar
Juan Castillo committed
259
260
261
262
263

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

265
include ${PLAT_MAKEFILE_FULL}
266

267
268
# Platform compatibility is not supported in AArch32
ifneq (${ARCH},aarch32)
269
270
271
272
273
274
275
276
277
# 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
278
endif
279

280
281
282
# 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.
283
include lib/cpus/cpu-ops.mk
284

Juan Castillo's avatar
Juan Castillo committed
285

286
287
288
289
290
################################################################################
# Check incompatible options
################################################################################

ifdef EL3_PAYLOAD_BASE
291
292
293
        ifdef PRELOADED_BL33_BASE
                $(warning "PRELOADED_BL33_BASE and EL3_PAYLOAD_BASE are \
                incompatible build options. EL3_PAYLOAD_BASE has priority.")
294
295
296
297
298
299
300
301
        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
302
303
304
305
        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.")
306
307
308
        endif
endif

309
ifeq (${ARCH},aarch32)
310
    # For AArch32, LOAD_IMAGE_V2 must be enabled.
311
312
313
    ifeq (${LOAD_IMAGE_V2}, 0)
        $(error "For AArch32, LOAD_IMAGE_V2 must be enabled.")
    endif
314
315
316
317
    # 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
318
319
endif

320
321
322
323
324
# 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
325

Juan Castillo's avatar
Juan Castillo committed
326
327
328
329
330
331
################################################################################
# Process platform overrideable behaviour
################################################################################

# Check if -pedantic option should be used
ifeq (${DISABLE_PEDANTIC},0)
332
        TF_CFLAGS	+= 	-pedantic
333
334
endif

335
# Using the ARM Trusted Firmware BL2 implies that a BL33 image also needs to be
Juan Castillo's avatar
Juan Castillo committed
336
337
# supplied for the FIP and Certificate generation tools. This flag can be
# overridden by the platform.
338
ifdef BL2_SOURCES
339
340
341
342
343
        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
344
                ifdef PRELOADED_BL33_BASE
345
346
347
348
349
350
351
                        # 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
352
353
endif

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

376
377
378
379
ifneq (${FIP_ALIGN},0)
FIP_ARGS += --align ${FIP_ALIGN}
endif

Juan Castillo's avatar
Juan Castillo committed
380
################################################################################
dp-arm's avatar
dp-arm committed
381
# Auxiliary tools (fiptool, cert_create, etc)
Juan Castillo's avatar
Juan Castillo committed
382
################################################################################
383

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

Juan Castillo's avatar
Juan Castillo committed
388
# Variables for use with Firmware Image Package
dp-arm's avatar
dp-arm committed
389
390
FIPTOOLPATH		?=	tools/fiptool
FIPTOOL			?=	${FIPTOOLPATH}/fiptool${BIN_EXT}
Jeenu Viswambharan's avatar
Jeenu Viswambharan committed
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
438
439
440
################################################################################
# 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
441

Juan Castillo's avatar
Juan Castillo committed
442
443
444
################################################################################
# Build options checks
################################################################################
445

446
$(eval $(call assert_boolean,COLD_BOOT_SINGLE_CPU))
447
448
449
450
451
$(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))
452
$(eval $(call assert_boolean,ENABLE_ASSERTIONS))
453
$(eval $(call assert_boolean,ENABLE_PLAT_COMPAT))
454
$(eval $(call assert_boolean,ENABLE_PMF))
455
$(eval $(call assert_boolean,ENABLE_PSCI_STAT))
dp-arm's avatar
dp-arm committed
456
$(eval $(call assert_boolean,ENABLE_RUNTIME_INSTRUMENTATION))
457
458
$(eval $(call assert_boolean,ERROR_DEPRECATED))
$(eval $(call assert_boolean,GENERATE_COT))
459
$(eval $(call assert_boolean,HW_ASSISTED_COHERENCY))
460
461
462
463
464
465
466
467
468
469
470
$(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))
471

472
473
474
$(eval $(call assert_numeric,ARM_ARCH_MAJOR))
$(eval $(call assert_numeric,ARM_ARCH_MINOR))

Juan Castillo's avatar
Juan Castillo committed
475
476
477
478
479
################################################################################
# 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
################################################################################
480

Juan Castillo's avatar
Juan Castillo committed
481
$(eval $(call add_define,ARM_CCI_PRODUCT_ID))
482
483
$(eval $(call add_define,ARM_ARCH_MAJOR))
$(eval $(call add_define,ARM_ARCH_MINOR))
484
$(eval $(call add_define,ARM_GIC_ARCH))
485
$(eval $(call add_define,COLD_BOOT_SINGLE_CPU))
486
487
$(eval $(call add_define,CTX_INCLUDE_AARCH32_REGS))
$(eval $(call add_define,CTX_INCLUDE_FPREGS))
488
$(eval $(call add_define,ENABLE_ASSERTIONS))
489
$(eval $(call add_define,ENABLE_PLAT_COMPAT))
490
$(eval $(call add_define,ENABLE_PMF))
491
$(eval $(call add_define,ENABLE_PSCI_STAT))
dp-arm's avatar
dp-arm committed
492
$(eval $(call add_define,ENABLE_RUNTIME_INSTRUMENTATION))
493
$(eval $(call add_define,ERROR_DEPRECATED))
494
$(eval $(call add_define,HW_ASSISTED_COHERENCY))
495
496
497
498
499
500
501
502
503
504
505
506
507
508
$(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))

509
510
# Define the EL3_PAYLOAD_BASE flag only if it is provided.
ifdef EL3_PAYLOAD_BASE
511
512
        $(eval $(call add_define,EL3_PAYLOAD_BASE))
else
513
514
515
516
        # 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))
517
        endif
518
endif
519
520
521
522
523
524
# 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
525

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

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

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

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

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

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

Juan Castillo's avatar
Juan Castillo committed
548
ifeq (${NEED_BL2},yes)
549
550
$(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
551
endif
552

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

Juan Castillo's avatar
Juan Castillo committed
557
558
ifeq (${NEED_BL31},yes)
BL31_SOURCES += ${SPD_SOURCES}
559
560
$(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
561
endif
562

563
564
565
# 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
566
ifeq (${NEED_BL32},yes)
567
568
569
$(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))))
570
571
endif

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

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

583
584
585
586
587
588
589
590
591
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

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

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

605
checkcodebase:		locate-checkpatch
Juan Castillo's avatar
Juan Castillo committed
606
	@echo "  CHECKING STYLE"
607
	@if test -d .git ; then						\
608
		git ls-files | grep -E -v 'libfdt|stdlib|docs|\.md' |	\
609
610
611
612
613
614
615
616
617
618
619
620
		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
621
622

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

certtool: ${CRTTOOL}
627

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

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

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

651
652
653
654
655
656
657
658
659
660
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
661
662
	${Q}${FIPTOOL} create ${FWU_FIP_ARGS} $@
	${Q}${FIPTOOL} info $@
663
664
665
666
	@echo
	@echo "Built $@ successfully"
	@echo

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

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

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

680
help:
681
	@echo "usage: ${MAKE} PLAT=<${PLATFORM_LIST}> [OPTIONS] [TARGET]"
682
683
	@echo ""
	@echo "PLAT is used to specify which platform you wish to build."
684
	@echo "If no platform is specified, PLAT defaults to: ${DEFAULT_PLAT}"
685
	@echo ""
686
687
688
689
690
	@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 ""
691
	@echo "Supported Targets:"
692
	@echo "  all            Build all individual bootloader binaries"
693
	@echo "  bl1            Build the BL1 binary"
694
	@echo "  bl2            Build the BL2 binary"
695
	@echo "  bl2u           Build the BL2U binary"
696
	@echo "  bl31           Build the BL31 binary"
697
698
	@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
699
	@echo "  certificates   Build the certificates (requires 'GENERATE_COT=1')"
700
	@echo "  fip            Build the Firmware Image Package (FIP)"
701
	@echo "  fwu_fip        Build the FWU Firmware Image Package (FIP)"
702
703
704
705
	@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"
706
	@echo "  cscope         Generate cscope index"
707
	@echo "  distclean      Remove all build artifacts for all platforms"
708
	@echo "  certtool       Build the Certificate generation tool"
709
	@echo "  fiptool        Build the Firmware Image Package (FIP) creation tool"
710
	@echo ""
711
	@echo "Note: most build targets require PLAT to be set to a specific platform."
712
713
714
	@echo ""
	@echo "example: build all targets for the FVP platform:"
	@echo "  CROSS_COMPILE=aarch64-none-elf- make PLAT=fvp all"