blob: f6e809f2c681804a773de19d6a9a1988e9db5e61 [file] [log] [blame]
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02001#
2# Copyright (c) 2018, Arm Limited. All rights reserved.
3#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6
7CROSS_COMPILE := aarch64-linux-gnu-
8CC := ${CROSS_COMPILE}gcc
9AS := ${CROSS_COMPILE}as
10LD := ${CROSS_COMPILE}ld
11OC := ${CROSS_COMPILE}objcopy
12OD := ${CROSS_COMPILE}objdump
13
14PLAT ?= fvp
15
16ASFLAGS := -nostdinc -ffreestanding -Wa,--fatal-warnings -Werror
17ASFLAGS += -Iplat/${PLAT}/ -I.
18
19PLAT_BUILD_DIR := build/${PLAT}
20SOURCES := entrypoint.S spin.S uart.S plat/${PLAT}/platform.S
21OBJS := $(patsubst %,$(PLAT_BUILD_DIR)/%,$(notdir $(SOURCES:.S=.o)))
22
23PROGRAM := el3_payload
24LINKER_SCRIPT := ${PLAT_BUILD_DIR}/${PROGRAM}.ld
25ELF := ${PLAT_BUILD_DIR}/${PROGRAM}.elf
26BIN := ${PLAT_BUILD_DIR}/${PROGRAM}.bin
27DUMP := ${PLAT_BUILD_DIR}/${PROGRAM}.dump
28
29include plat/${PLAT}/platform.mk
30
31all: ${BIN}
32
33${PLAT_BUILD_DIR}:
34 mkdir -p $@
35
36${PLAT_BUILD_DIR}/%.o: %.S ${PLAT_BUILD_DIR}
37 @echo " CC $<"
38 ${CC} ${ASFLAGS} -c $< -o $@
39
40# Specific rule for this '.o' file to avoid worrying about
41# plat/${PLAT}/platform.S being in a sub-directory...
42# TODO: Fix this workaround.
43${PLAT_BUILD_DIR}/platform.o: plat/${PLAT}/platform.S ${PLAT_BUILD_DIR}
44 @echo " CC $<"
45 ${CC} ${ASFLAGS} -c $< -o $@
46
47${PLAT_BUILD_DIR}/%.ld: %.ld.S ${PLAT_BUILD_DIR}
48 @echo " PP $<"
49 ${CC} -DDRAM_BASE=${DRAM_BASE} -DDRAM_SIZE=${DRAM_SIZE} -E -P -o $@ $<
50
51${ELF}: ${LINKER_SCRIPT} ${OBJS}
52 @echo " LD $<"
53 ${LD} ${LDFLAGS} ${OBJS} --script ${LINKER_SCRIPT} -o $@
54
55${BIN}: ${ELF}
56 @echo " BIN $@"
57 ${OC} -O binary $< $@
58
59${DUMP}: $(ELF)
60 @echo " OD $$@"
61 ${OD} -dx $< > $@
62
63dump: ${DUMP}
64
65clean:
66 rm -rf ${PLAT_BUILD_DIR}
67
68distclean: clean
69 rm -rf build/
70
71run: run_${PLAT}
72
73run_juno: ${ELF} scripts/juno/run_ds5_script.sh scripts/juno/load_el3_payload.ds
74 scripts/juno/run_ds5_script.sh scripts/juno/load_el3_payload.ds
75
76run_fvp: scripts/fvp/run_fvp.sh
77 scripts/fvp/run_fvp.sh
78
79help:
80 @echo "EL3 test payload"
81 @echo
82 @echo "To build:"
83 @echo "make [PLAT=fvp|juno] [TARGETS]"
84 @echo ""
85 @echo "The default platform is fvp."
86 @echo
87 @echo "TARGETS:"
88 @echo " all Build the payload [default target]"
89 @echo " dump Generate a dump file of the program"
90 @echo " run Run the payload on the given platform."
91 @echo " /!\ For Juno, requires a connection to a Juno board via DSTREAM"