################################################################################ # Following variables defines how the NS_USER (Non-Secure User - Client # Application), NS_KERNEL (Non-Secure Kernel), S_KERNEL (Secure Kernel) and # S_USER (Secure User - TA) are compiled ################################################################################ COMPILE_NS_USER ?= 64 COMPILE_NS_KERNEL ?= 64 COMPILE_S_USER ?= 64 COMPILE_S_KERNEL ?= 64 ################################################################################ # Includes ################################################################################ include common.mk include toolchain.mk ifeq ($(DEBUG),1) SCP_BUILD ?= debug TFA_BUILD ?= debug EDK2_BUILD ?= DEBUG else SCP_BUILD ?= release TFA_BUILD ?= release EDK2_BUILD ?= RELEASE endif ################################################################################ # Paths to git projects and various binaries ################################################################################ BINARIES_PATH ?= $(ROOT)/out/bin SCP_PATH ?= $(ROOT)/SCP-firmware SCP_OUT ?= $(SCP_PATH)/build/product/synquacer SCP_ROM ?= $(SCP_OUT)/scp_romfw/$(SCP_BUILD)/bin/scp_romfw.bin SCP_RAM ?= $(SCP_OUT)/scp_ramfw/$(SCP_BUILD)/bin/scp_ramfw.bin SCP_ROMRAM ?= $(SCP_OUT)/scp_romramfw.bin TFA_PATH ?= $(ROOT)/trusted-firmware-a TFA_OUT ?= $(TFA_PATH)/build/synquacer/$(TFA_BUILD) TFA_BL31 ?= $(TFA_OUT)/bl31.bin TFA_BL32 ?= $(TFA_OUT)/bl32.bin TFA_FIP ?= $(TFA_OUT)/fip_all_arm_tf.bin FIPTOOL ?= $(TFA_PATH)/tools/fiptool/fiptool EDK2_PATH ?= $(ROOT)/edk2 EDK2_PLATFORMS_PATH ?= $(ROOT)/edk2-platforms EDK2_NON_OSI_PATH ?= $(ROOT)/edk2-non-osi EDK2_PKGS_PATH := "$(EDK2_PATH):$(EDK2_PLATFORMS_PATH):$(EDK2_NON_OSI_PATH)" EDK2_FIP ?= $(EDK2_NON_OSI_PATH)/Platform/Socionext/DeveloperBox/fip_all_arm_tf.bin EDK2_TOOLCHAIN ?= GCC5 EDK2_ARCH ?= AARCH64 ################################################################################ # Targets ################################################################################ .PHONY: all all: edk2 optee-os scp tfa .PHONY: clean clean: edk2-clean optee-os-clean scp-clean tfa-clean ################################################################################ # Toolchains ################################################################################ AARCH32_NONE_PATH ?= $(TOOLCHAIN_ROOT)/aarch32-none AARCH32_NONE_CROSS_COMPILE ?= $(AARCH32_NONE_PATH)/bin/arm-none-eabi- AARCH32_NONE_GCC_VERSION ?= gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux SRC_AARCH32_NONE_GCC ?= https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/RC2.1/$(AARCH32_NONE_GCC_VERSION).tar.bz2 toolchains: aarch32-none .PHONY: aarch32-none aarch32-none: $(call dltc,$(AARCH32_NONE_PATH),$(SRC_AARCH32_NONE_GCC),$(AARCH32_NONE_GCC_VERSION)) ################################################################################ # SCP ################################################################################ SCP_FLAGS ?= \ CC=$(AARCH32_NONE_CROSS_COMPILE)gcc \ PRODUCT=synquacer \ MODE=$(SCP_BUILD) .PHONY: scp scp: aarch32-none $(MAKE) -C $(SCP_PATH) $(SCP_FLAGS) all tr "\000" "\377" < /dev/zero | dd of=$(SCP_ROMRAM) bs=1 count=196608 dd of=$(SCP_ROMRAM) if=$(SCP_ROM) bs=1 conv=notrunc seek=0 dd of=$(SCP_ROMRAM) if=$(SCP_RAM) bs=1 seek=65536 ln -sf $(SCP_ROMRAM) $(BINARIES_PATH) .PHONY: scp-clean scp-clean: rm -f $(SCP_ROMRAM) $(MAKE) -C $(SCP_PATH) $(SCP_FLAGS) clean ################################################################################ # Trusted Firmware A ################################################################################ TFA_EXPORTS ?= \ CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" TFA_FLAGS ?= \ BL32=$(TFA_BL32) \ PRELOADED_BL33_BASE=0x08200000 \ DEBUG=$(DEBUG) \ PLAT=synquacer \ SPD=opteed \ SQ_USE_SCMI_DRIVER=1 .PHONY: tfa tfa: $(TFA_FIP) .PHONY: tfa-clean tfa-clean: $(TFA_EXPORTS) $(MAKE) -C $(TFA_PATH) $(TFA_FLAGS) clean $(TFA_FIP): $(TFA_BL32) $(TFA_EXPORTS) $(MAKE) -C $(TFA_PATH) $(TFA_FLAGS) all fiptool $(FIPTOOL) create \ --tb-fw $(TFA_BL31) \ --soc-fw $(TFA_BL31) \ --scp-fw $(TFA_BL31) \ --tos-fw $< \ $@ $(TFA_BL32): optee-os mkdir -p $(dir $@) $(AARCH64_CROSS_COMPILE)objcopy \ -O binary $(OPTEE_OS_PATH)/out/arm/core/tee.elf $@ ################################################################################ # EDK2 / Tianocore ################################################################################ define edk2-env export WORKSPACE=$(EDK2_PLATFORMS_PATH) endef define edk2-call $(EDK2_TOOLCHAIN)_$(EDK2_ARCH)_PREFIX=$(AARCH64_CROSS_COMPILE) \ build -n `getconf _NPROCESSORS_ONLN` \ -a $(EDK2_ARCH) -t $(EDK2_TOOLCHAIN) -b $(EDK2_BUILD) \ -p Platform/Socionext/DeveloperBox/DeveloperBox.dsc endef .PHONY: edk2 edk2: $(EDK2_FIP) $(call edk2-env) && \ export PACKAGES_PATH=$(EDK2_PKGS_PATH) && \ source $(EDK2_PATH)/edksetup.sh && \ $(MAKE) -j1 -C $(EDK2_PATH)/BaseTools && \ $(call edk2-call) all .PHONY: edk2-clean edk2-clean: edk2-clean-common cd $(EDK2_NON_OSI_PATH) && \ git checkout $(EDK2_FIP) $(EDK2_FIP): $(TFA_FIP) cp $< $@ ################################################################################ # OP-TEE ################################################################################ OPTEE_OS_COMMON_FLAGS += PLATFORM=synquacer OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=synquacer .PHONY: optee-os optee-os: optee-os-common .PHONY: optee-os-clean optee-os-clean: optee-os-clean-common