# # 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"