blob: 188731c7e956e03d8f707d2d219d04a51745828c [file] [log] [blame]
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02001#
Alexei Fedorov0f305472019-10-29 14:06:54 +00002# Copyright (c) 2018-2019, Arm Limited. All rights reserved.
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02003#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6
Alexei Fedorov0f305472019-10-29 14:06:54 +00007# Default number of threads per CPU on FVP
8FVP_MAX_PE_PER_CPU := 1
9
10# Check the PE per core count
11ifneq ($(FVP_MAX_PE_PER_CPU),$(filter $(FVP_MAX_PE_PER_CPU),1 2))
12$(error "Incorrect FVP_MAX_PE_PER_CPU specified for FVP port")
13endif
14
15# Convenience function for adding build definitions
16# $(eval $(call add_define,BAR_DEFINES,FOO)) will have:
17# -DFOO if $(FOO) is empty; -DFOO=$(FOO) otherwise
18# inside the BAR_DEFINES variable.
19define add_define
20$(1) += -D$(2)$(if $(value $(2)),=$(value $(2)),)
21endef
22
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020023CC := ${CROSS_COMPILE}gcc
24AS := ${CROSS_COMPILE}as
25LD := ${CROSS_COMPILE}ld
26OC := ${CROSS_COMPILE}objcopy
27OD := ${CROSS_COMPILE}objdump
28
29PLAT ?= fvp
30
31ASFLAGS := -nostdinc -ffreestanding -Wa,--fatal-warnings -Werror
32ASFLAGS += -Iplat/${PLAT}/ -I.
33
34PLAT_BUILD_DIR := build/${PLAT}
35SOURCES := entrypoint.S spin.S uart.S plat/${PLAT}/platform.S
36OBJS := $(patsubst %,$(PLAT_BUILD_DIR)/%,$(notdir $(SOURCES:.S=.o)))
37
38PROGRAM := el3_payload
39LINKER_SCRIPT := ${PLAT_BUILD_DIR}/${PROGRAM}.ld
40ELF := ${PLAT_BUILD_DIR}/${PROGRAM}.elf
41BIN := ${PLAT_BUILD_DIR}/${PROGRAM}.bin
42DUMP := ${PLAT_BUILD_DIR}/${PROGRAM}.dump
43
44include plat/${PLAT}/platform.mk
45
Alexei Fedorov0f305472019-10-29 14:06:54 +000046# Pass FVP_MAX_PE_PER_CPU to the build system
47$(eval $(call add_define,ASFLAGS,FVP_MAX_PE_PER_CPU))
48
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020049all: ${BIN}
50
51${PLAT_BUILD_DIR}:
52 mkdir -p $@
53
54${PLAT_BUILD_DIR}/%.o: %.S ${PLAT_BUILD_DIR}
55 @echo " CC $<"
56 ${CC} ${ASFLAGS} -c $< -o $@
57
58# Specific rule for this '.o' file to avoid worrying about
59# plat/${PLAT}/platform.S being in a sub-directory...
60# TODO: Fix this workaround.
61${PLAT_BUILD_DIR}/platform.o: plat/${PLAT}/platform.S ${PLAT_BUILD_DIR}
62 @echo " CC $<"
63 ${CC} ${ASFLAGS} -c $< -o $@
64
65${PLAT_BUILD_DIR}/%.ld: %.ld.S ${PLAT_BUILD_DIR}
66 @echo " PP $<"
67 ${CC} -DDRAM_BASE=${DRAM_BASE} -DDRAM_SIZE=${DRAM_SIZE} -E -P -o $@ $<
68
69${ELF}: ${LINKER_SCRIPT} ${OBJS}
70 @echo " LD $<"
71 ${LD} ${LDFLAGS} ${OBJS} --script ${LINKER_SCRIPT} -o $@
72
73${BIN}: ${ELF}
74 @echo " BIN $@"
75 ${OC} -O binary $< $@
76
77${DUMP}: $(ELF)
78 @echo " OD $$@"
79 ${OD} -dx $< > $@
80
81dump: ${DUMP}
82
83clean:
84 rm -rf ${PLAT_BUILD_DIR}
85
86distclean: clean
87 rm -rf build/
88
89run: run_${PLAT}
90
Sandrine Bailleux47ab4f42019-05-10 13:23:41 +020091run_juno: ${ELF} scripts/juno/run_armds_script.sh scripts/juno/load_el3_payload.ds
92 scripts/juno/run_armds_script.sh scripts/juno/load_el3_payload.ds
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020093
94run_fvp: scripts/fvp/run_fvp.sh
95 scripts/fvp/run_fvp.sh
96
97help:
98 @echo "EL3 test payload"
99 @echo
100 @echo "To build:"
101 @echo "make [PLAT=fvp|juno] [TARGETS]"
102 @echo ""
103 @echo "The default platform is fvp."
104 @echo
105 @echo "TARGETS:"
106 @echo " all Build the payload [default target]"
107 @echo " dump Generate a dump file of the program"
108 @echo " run Run the payload on the given platform."
109 @echo " /!\ For Juno, requires a connection to a Juno board via DSTREAM"