blob: 188731c7e956e03d8f707d2d219d04a51745828c [file] [log] [blame]
#
# Copyright (c) 2018-2019, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
# Default number of threads per CPU on FVP
FVP_MAX_PE_PER_CPU := 1
# Check the PE per core count
ifneq ($(FVP_MAX_PE_PER_CPU),$(filter $(FVP_MAX_PE_PER_CPU),1 2))
$(error "Incorrect FVP_MAX_PE_PER_CPU specified for FVP port")
endif
# Convenience function for adding build definitions
# $(eval $(call add_define,BAR_DEFINES,FOO)) will have:
# -DFOO if $(FOO) is empty; -DFOO=$(FOO) otherwise
# inside the BAR_DEFINES variable.
define add_define
$(1) += -D$(2)$(if $(value $(2)),=$(value $(2)),)
endef
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
# Pass FVP_MAX_PE_PER_CPU to the build system
$(eval $(call add_define,ASFLAGS,FVP_MAX_PE_PER_CPU))
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_armds_script.sh scripts/juno/load_el3_payload.ds
scripts/juno/run_armds_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"