aboutsummaryrefslogtreecommitdiff
path: root/el3_payload/Makefile
blob: f6e809f2c681804a773de19d6a9a1988e9db5e61 (plain)
1
2
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#
# Copyright (c) 2018, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#

CROSS_COMPILE	:=	aarch64-linux-gnu-
CC		:=	${CROSS_COMPILE}gcc
AS		:=	${CROSS_COMPILE}as
LD		:=	${CROSS_COMPILE}ld
OC		:=	${CROSS_COMPILE}objcopy
OD		:=	${CROSS_COMPILE}objdump

PLAT		?=	fvp

ASFLAGS		:=	-nostdinc -ffreestanding -Wa,--fatal-warnings -Werror
ASFLAGS		+=	-Iplat/${PLAT}/ -I.

PLAT_BUILD_DIR	:=	build/${PLAT}
SOURCES		:=	entrypoint.S spin.S uart.S plat/${PLAT}/platform.S
OBJS		:=	$(patsubst %,$(PLAT_BUILD_DIR)/%,$(notdir $(SOURCES:.S=.o)))

PROGRAM		:=	el3_payload
LINKER_SCRIPT	:=	${PLAT_BUILD_DIR}/${PROGRAM}.ld
ELF		:=	${PLAT_BUILD_DIR}/${PROGRAM}.elf
BIN		:=	${PLAT_BUILD_DIR}/${PROGRAM}.bin
DUMP		:=	${PLAT_BUILD_DIR}/${PROGRAM}.dump

include plat/${PLAT}/platform.mk

all: ${BIN}

${PLAT_BUILD_DIR}:
	mkdir -p $@

${PLAT_BUILD_DIR}/%.o: %.S ${PLAT_BUILD_DIR}
	@echo "  CC      $<"
	${CC} ${ASFLAGS} -c $< -o $@

# Specific rule for this '.o' file to avoid worrying about
# plat/${PLAT}/platform.S being in a sub-directory...
# TODO: Fix this workaround.
${PLAT_BUILD_DIR}/platform.o: plat/${PLAT}/platform.S ${PLAT_BUILD_DIR}
	@echo "  CC      $<"
	${CC} ${ASFLAGS} -c $< -o $@

${PLAT_BUILD_DIR}/%.ld: %.ld.S ${PLAT_BUILD_DIR}
	@echo "  PP      $<"
	${CC} -DDRAM_BASE=${DRAM_BASE} -DDRAM_SIZE=${DRAM_SIZE} -E -P -o $@ $<

${ELF}: ${LINKER_SCRIPT} ${OBJS}
	@echo "  LD      $<"
	${LD} ${LDFLAGS} ${OBJS} --script ${LINKER_SCRIPT} -o $@

${BIN}: ${ELF}
	@echo "  BIN     $@"
	${OC} -O binary $< $@

${DUMP}: $(ELF)
	@echo "  OD      $$@"
	${OD} -dx $< > $@

dump: ${DUMP}

clean:
	rm -rf ${PLAT_BUILD_DIR}

distclean: clean
	rm -rf build/

run: run_${PLAT}

run_juno: ${ELF} scripts/juno/run_ds5_script.sh scripts/juno/load_el3_payload.ds
	scripts/juno/run_ds5_script.sh scripts/juno/load_el3_payload.ds

run_fvp: scripts/fvp/run_fvp.sh
	scripts/fvp/run_fvp.sh

help:
	@echo "EL3 test payload"
	@echo
	@echo "To build:"
	@echo "make [PLAT=fvp|juno] [TARGETS]"
	@echo ""
	@echo "The default platform is fvp."
	@echo
	@echo "TARGETS:"
	@echo "  all		Build the payload  [default target]"
	@echo "  dump		Generate a dump file of the program"
	@echo "  run		Run the payload on the given platform."
	@echo "         	/!\ For Juno, requires a connection to a Juno board via DSTREAM"