735 lines
22 KiB
Makefile
735 lines
22 KiB
Makefile
#/*******************************************************************************
|
|
# * DISCLAIMER
|
|
# * This software is supplied by Renesas Electronics Corporation and is only
|
|
# * intended for use with Renesas products. No other uses are authorized. This
|
|
# * software is owned by Renesas Electronics Corporation and is protected under
|
|
# * all applicable laws, including copyright laws.
|
|
# * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
|
|
# * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
|
|
# * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
|
|
# * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
|
|
# * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
|
|
# * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
|
|
# * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
|
|
# * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
|
|
# * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
# * Renesas reserves the right, without notice, to make changes to this software
|
|
# * and to discontinue the availability of this software. By using this software,
|
|
# * you agree to the additional terms and conditions found by accessing the
|
|
# * following link:
|
|
# * http://www.renesas.com/disclaimer
|
|
# * Copyright 2022-2025 Renesas Electronics Corporation All rights reserved.
|
|
# *******************************************************************************/
|
|
#
|
|
# *******************************************************************************
|
|
# * DESCRIPTION : makefile for Loader
|
|
# ******************************************************************************
|
|
|
|
define add_define
|
|
DEFINES += -D$(1)$(if $(value $(1)),=$(value $(1)),)
|
|
endef
|
|
|
|
INCLUDE_DIR = -Iinclude \
|
|
-Iip/ddr
|
|
|
|
OUTDIR := build
|
|
|
|
# LSI setting common define
|
|
RCAR_S4 := 0
|
|
RCAR_V4H := 1
|
|
RCAR_V4M := 2
|
|
$(eval $(call add_define,RCAR_S4))
|
|
$(eval $(call add_define,RCAR_V4H))
|
|
$(eval $(call add_define,RCAR_V4M))
|
|
ifneq ("$(FORCE_115200)", "")
|
|
$(eval $(call add_define,FORCE_115200))
|
|
endif
|
|
|
|
#/* Select LSI("S4" or "V4H" or "V4M" )********************************
|
|
ifeq ("$(LSI)", "")
|
|
LSI = S4
|
|
endif
|
|
|
|
ifeq (${LSI},S4)
|
|
RCAR_LSI:=${RCAR_S4}
|
|
DIR_NAME_SA9 = s4
|
|
OBJ_FILE += loader/loader_main_s4.o \
|
|
cnf_tbl/cnf_tbl_s4.o \
|
|
ip/qos/qos.o \
|
|
ip/rtvram/rtvram.o \
|
|
ip/ddr/s4/lpddr4x/ecc_enable_s4.o
|
|
INCLUDE_DIR += -Imcu
|
|
include ip/ddr/ddr.mk
|
|
else ifeq (${LSI},V4H)
|
|
RCAR_LSI:=${RCAR_V4H}
|
|
DIR_NAME_SA9 = v4h
|
|
OBJ_FILE += loader/loader_main_v4h.o \
|
|
ip/fcpr/fcpr.o \
|
|
cnf_tbl/cnf_tbl_v4h.o \
|
|
common/crc32.o \
|
|
image_load/android_ab.o \
|
|
ip/ddr/v4h/lpddr5/ecc_enable_v4h.o \
|
|
ip/ddr/v4h/lpddr5/ecm_enable_v4h.o
|
|
else ifeq (${LSI},V4M)
|
|
RCAR_LSI:=${RCAR_V4M}
|
|
DIR_NAME_SA9 = v4m
|
|
OBJ_FILE += loader/loader_main_v4m.o \
|
|
ip/fcpr/fcpr.o \
|
|
cnf_tbl/cnf_tbl_v4m.o \
|
|
ip/sysc/sysc.o \
|
|
ip/avs/avs.o \
|
|
ip/i2c/i2c.o \
|
|
ip/ddr/v4m/lpddr5/ecc_enable_v4m.o \
|
|
ip/ddr/v4m/lpddr5/ecm_enable_v4m.o
|
|
else
|
|
$(error "Error: ${LSI} is not supported.")
|
|
endif
|
|
$(eval $(call add_define,RCAR_LSI))
|
|
|
|
# timing measurement
|
|
ifeq ("$(MEASURE_TIME)", "")
|
|
MEASURE_TIME = 0
|
|
else
|
|
$(eval $(call add_define,MEASURE_TIME))
|
|
# Set log level to Error, so we dont waste time with unnecessary prints
|
|
LOG_LEVEL := 1
|
|
OBJ_FILE += common/scmt_checkpoint.o \
|
|
common/timer/scmt.o
|
|
endif
|
|
ifeq ("$(MEASURE_TIME_NOPRINT)", "")
|
|
MEASURE_TIME_NOPRINT = 0
|
|
else
|
|
$(eval $(call add_define,MEASURE_TIME_NOPRINT))
|
|
endif
|
|
|
|
###################################################
|
|
|
|
#output file name
|
|
FILE_NAME = icumx_loader
|
|
FILE_NAME_SA0 = bootparam_sa0
|
|
FILE_NAME_SA9 = cert_header_sa9
|
|
FILE_NAME_TFMV_TBL = tfmv_ver_tbl
|
|
FILE_NAME_NTFMV_TBL = ntfmv_ver_tbl
|
|
|
|
OUTPUT_FILE = $(FILE_NAME).elf
|
|
OUTPUT_FILE_SA0 = $(FILE_NAME_SA0).elf
|
|
OUTPUT_FILE_SA9 = $(FILE_NAME_SA9).elf
|
|
OUTPUT_FILE_TFMV_TBL = $(FILE_NAME_TFMV_TBL).elf
|
|
OUTPUT_FILE_NTFMV_TBL = $(FILE_NAME_NTFMV_TBL).elf
|
|
|
|
#object file name
|
|
OBJ_FILE += cpu_on/cpu_on.o \
|
|
common/log/log.o \
|
|
common/log/scif.o \
|
|
common/timer/micro_wait.o \
|
|
image_load/image_load.o \
|
|
intc/intc.o \
|
|
intc/vecttbl.o \
|
|
intc/vect_set.o \
|
|
ip/ip_control.o \
|
|
ip/cpg/cpg.o \
|
|
ip/emmc/emmc_boot.o \
|
|
ip/wdt/wdt.o \
|
|
loader/loader.o \
|
|
loader/loader_main_common.o \
|
|
protect/ram_protection.o \
|
|
protect/region_id.o \
|
|
protect/stack_protect.o \
|
|
remap/remap.o \
|
|
rom_api/rom_api.o
|
|
|
|
OBJ_FILE_SA0 = tools/dummy_create/sa0.o
|
|
OBJ_FILE_SA9 = tools/dummy_create/$(DIR_NAME_SA9)/sa9.o
|
|
OBJ_FILE_TFMV_TBL = tools/sw_min_ver_tbl/tfmv_ver_tbl.o
|
|
OBJ_FILE_NTFMV_TBL = tools/sw_min_ver_tbl/ntfmv_ver_tbl.o
|
|
|
|
#linker script name
|
|
ifeq (${LSI},V4M)
|
|
MEMORY_DEF = loader/icumx_loader_v4m.ld
|
|
else
|
|
MEMORY_DEF = loader/icumx_loader.ld
|
|
endif
|
|
|
|
MEMORY_DEF_SA0 = tools/dummy_create/sa0.ld
|
|
MEMORY_DEF_SA9 = tools/dummy_create/$(DIR_NAME_SA9)/sa9.ld
|
|
MEMORY_DEF_TFMV_TBL = tools/sw_min_ver_tbl/tfmv_ver_tbl.ld
|
|
MEMORY_DEF_NTFMV_TBL = tools/sw_min_ver_tbl/ntfmv_ver_tbl.ld
|
|
|
|
###################################################
|
|
|
|
# Debug build
|
|
DEBUG:=0
|
|
|
|
# Process DEBUG flag
|
|
$(eval $(call assert_boolean,DEBUG))
|
|
$(eval $(call add_define,DEBUG))
|
|
ifeq (${DEBUG},0)
|
|
$(eval $(call add_define,NDEBUG))
|
|
CFLAGS += -Onone
|
|
else
|
|
ASFLAGS += -G -dwarf2
|
|
CFLAGS += -G -dwarf2 -Odebug
|
|
endif
|
|
|
|
# booting performance check
|
|
ifneq ("$(WDT_RESET)", "")
|
|
$(eval $(call add_define,WDT_RESET))
|
|
endif
|
|
|
|
# Process STRICT_AB_BOOTING flag
|
|
ifneq ("$(STRICT_AB_BOOTING)", "")
|
|
$(eval $(call add_define,STRICT_AB_BOOTING))
|
|
endif
|
|
|
|
# booting performance check
|
|
ifeq ("$(BOOT_TIME_CHECK)", "")
|
|
BOOT_TIME_CHECK = 0
|
|
endif
|
|
$(eval $(call add_define,BOOT_TIME_CHECK))
|
|
OBJ_FILE += ip/gpio/gpio.o
|
|
|
|
# MISRA Option
|
|
#------ MISRA ------
|
|
ifndef MISRA
|
|
MISRA := MANDATORY
|
|
endif
|
|
ifeq ("$(MISRA)", "DISABLE")
|
|
MISRA_OPTION = DISABLE
|
|
else ifeq ("$(MISRA)", "FULL")
|
|
MISRA_OPTION = FULL
|
|
else ifeq ("$(MISRA)", "MANDATORY")
|
|
MISRA_OPTION = MANDATORY
|
|
else ifeq ("$(MISRA)", "REQUIRED")
|
|
MISRA_OPTION = REQUIRED
|
|
endif
|
|
CFLAGS_MISRA_FULL = \
|
|
--misra_adv=warn \
|
|
--misra_req=warn \
|
|
--misra_mand=warn \
|
|
--no_misra_runtime \
|
|
--misra_2012=all,-R1.1 # MISRA 2012 Rule 1.1 not allowed with non-strict -c99 or later
|
|
CFLAGS_MISRA_REQUIRED = \
|
|
--misra_adv=silent \
|
|
--misra_req=warn \
|
|
--misra_mand=warn \
|
|
--no_misra_runtime \
|
|
--misra_2012=all,-R1.1 # MISRA 2012 Rule 1.1 not allowed with non-strict -c99 or later
|
|
CFLAGS_MISRA_MANDATORY = \
|
|
--misra_adv=silent \
|
|
--misra_req=silent \
|
|
--misra_mand=warn \
|
|
--no_misra_runtime \
|
|
--misra_2012=all,-R1.1,-R3.1 # MISRA 2012 Rule 1.1 not allowed with non-strict -c99 or later
|
|
# MISRA 2012 Rule 3.1 is confirmed with static analysis
|
|
ifeq ("$(MISRA_OPTION)", "FULL")
|
|
CFLAGS += $(CFLAGS_MISRA_FULL)
|
|
else ifeq ("$(MISRA)", "REQUIRED")
|
|
CFLAGS += $(CFLAGS_MISRA_REQUIRED)
|
|
else ifeq ("$(MISRA)", "MANDATORY")
|
|
CFLAGS += $(CFLAGS_MISRA_MANDATORY)
|
|
endif
|
|
|
|
# Process LOG_LEVEL
|
|
ifndef LOG_LEVEL
|
|
LOG_LEVEL := 2
|
|
endif
|
|
$(eval $(call add_define,LOG_LEVEL))
|
|
ifeq (${LOG_LEVEL},0)
|
|
LDFLAGS += -nostdlib
|
|
endif
|
|
|
|
# Process SET_FCPR_PARAM flag
|
|
# 0:Disable, 1:Enable (Support V4H / V4M Linux OS)
|
|
ifeq ($(filter ${LSI},V4H V4M),${LSI})
|
|
ifndef SET_FCPR_PARAM
|
|
SET_FCPR_PARAM := 0
|
|
$(eval $(call add_define,SET_FCPR_PARAM))
|
|
else
|
|
ifeq (${SET_FCPR_PARAM},0)
|
|
$(eval $(call add_define,SET_FCPR_PARAM))
|
|
else ifeq (${SET_FCPR_PARAM},1)
|
|
$(eval $(call add_define,SET_FCPR_PARAM))
|
|
else
|
|
$(error "Error:SET_FCPR_PARAM=${SET_FCPR_PARAM} is not supported.")
|
|
endif
|
|
endif
|
|
else
|
|
SET_FCPR_PARAM := 0
|
|
$(eval $(call add_define,SET_FCPR_PARAM))
|
|
endif
|
|
|
|
# Process BOOT_MCU flag (S4 only)
|
|
# 0:None, 1:G4MH, 2:Reserved, 3:G4MH+ICUMH
|
|
ifeq (${LSI},S4)
|
|
ifndef BOOT_MCU
|
|
BOOT_MCU :=3
|
|
$(eval $(call add_define,BOOT_MCU))
|
|
else
|
|
ifeq (${BOOT_MCU},0)
|
|
$(eval $(call add_define,BOOT_MCU))
|
|
else ifeq (${BOOT_MCU},1)
|
|
$(eval $(call add_define,BOOT_MCU))
|
|
else ifeq (${BOOT_MCU},2)
|
|
$(eval $(call add_define,BOOT_MCU))
|
|
else ifeq (${BOOT_MCU},3)
|
|
$(eval $(call add_define,BOOT_MCU))
|
|
else
|
|
$(error "Error:BOOT_MCU=${BOOT_MCU} is not supported.")
|
|
endif
|
|
endif
|
|
else
|
|
BOOT_MCU :=0
|
|
$(eval $(call add_define,BOOT_MCU))
|
|
endif
|
|
|
|
ifneq (${BOOT_MCU},0)
|
|
OBJ_FILE += mcu/cpu_on_for_mcu.o \
|
|
mcu/sdmac.o \
|
|
mcu/loader_main_mcu.o \
|
|
mcu/image_load_for_mcu.o \
|
|
mcu/codesram_ecc.o
|
|
endif
|
|
|
|
# Process RTVRAM_EXTEND flag
|
|
ifeq (${LSI},S4)
|
|
ifndef RTVRAM_EXTEND
|
|
RTVRAM_EXTEND := 1
|
|
$(eval $(call add_define,RTVRAM_EXTEND))
|
|
else
|
|
ifeq (${RTVRAM_EXTEND},0)
|
|
$(eval $(call add_define,RTVRAM_EXTEND))
|
|
else ifeq (${RTVRAM_EXTEND},1)
|
|
$(eval $(call add_define,RTVRAM_EXTEND))
|
|
else
|
|
$(error "Error:RTVRAM_EXTEND=${RTVRAM_EXTEND} is not supported.")
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# Process QSPI_DDR_MODE flag
|
|
# 0:SDR, 1:DDR
|
|
ifndef QSPI_DDR_MODE
|
|
QSPI_DDR_MODE := 0
|
|
$(eval $(call add_define,QSPI_DDR_MODE))
|
|
else
|
|
ifeq (${QSPI_DDR_MODE},0)
|
|
$(eval $(call add_define,QSPI_DDR_MODE))
|
|
else ifeq (${QSPI_DDR_MODE},1)
|
|
$(eval $(call add_define,QSPI_DDR_MODE))
|
|
else
|
|
$(error "Error:QSPI_DDR_MODE=${QSPI_DDR_MODE} is not supported.")
|
|
endif
|
|
endif
|
|
|
|
# RCAR_QSPI_DDR_DUMMY_CYCLE
|
|
ifndef RCAR_QSPI_DDR_DUMMY_CYCLE
|
|
RCAR_QSPI_DDR_DUMMY_CYCLE := 9
|
|
endif
|
|
$(eval $(call add_define,RCAR_QSPI_DDR_DUMMY_CYCLE))
|
|
|
|
# Process RCAR_SA9_TYPE flag
|
|
# 0:Flash, 1:eMMC
|
|
ifeq (${LSI},S4)
|
|
ifndef RCAR_SA9_TYPE
|
|
RCAR_SA9_TYPE := 0
|
|
$(eval $(call add_define,RCAR_SA9_TYPE))
|
|
else
|
|
ifeq (${RCAR_SA9_TYPE},0)
|
|
$(eval $(call add_define,RCAR_SA9_TYPE))
|
|
else ifeq (${RCAR_SA9_TYPE},1)
|
|
$(eval $(call add_define,RCAR_SA9_TYPE))
|
|
else
|
|
$(error "Error:RCAR_SA9_TYPE=${RCAR_SA9_TYPE} is not supported.")
|
|
endif
|
|
endif
|
|
else ifeq ($(filter ${LSI},V4H V4M),${LSI})
|
|
RCAR_SA9_TYPE := 0
|
|
$(eval $(call add_define,RCAR_SA9_TYPE))
|
|
endif
|
|
|
|
|
|
ifeq (${RCAR_SA9_TYPE},1)
|
|
OBJ_FILE += image_load/image_load_emmc.o \
|
|
ip/emmc/emmc_cmd.o \
|
|
ip/emmc/emmc_init.o \
|
|
ip/emmc/emmc_interrupt.o \
|
|
ip/emmc/emmc_mount.o \
|
|
ip/emmc/emmc_multiboot.o \
|
|
ip/emmc/emmc_read.o \
|
|
ip/emmc/emmc_utility.o
|
|
else ifeq (${RCAR_SA9_TYPE},0)
|
|
OBJ_FILE += image_load/image_load_flash.o \
|
|
ip/dma/dma.o \
|
|
ip/rpc/rpc.o \
|
|
ip/rpc/qspi_xdr_mode.o \
|
|
ip/rpc/dma2.o \
|
|
ip/rpc/rpcqspidrv.o \
|
|
ip/rpc/spiflash2drv.o \
|
|
ip/mfis/mfis.o
|
|
endif
|
|
|
|
# Process CA_LOAD_TYPE flag
|
|
# 0:CA Loader 1:BL31 (or Secure Monitor)
|
|
ifeq (${LSI},S4)
|
|
ifndef CA_LOAD_TYPE
|
|
CA_LOAD_TYPE := 0
|
|
$(eval $(call add_define,CA_LOAD_TYPE))
|
|
else
|
|
ifeq (${CA_LOAD_TYPE},0)
|
|
$(eval $(call add_define,CA_LOAD_TYPE))
|
|
else ifeq (${CA_LOAD_TYPE},1)
|
|
$(eval $(call add_define,CA_LOAD_TYPE))
|
|
else
|
|
$(error "Error:CA_LOAD_TYPE=${CA_LOAD_TYPE} is not supported.")
|
|
endif
|
|
endif
|
|
else ifeq ($(filter ${LSI},V4H V4M),${LSI})
|
|
CA_LOAD_TYPE := 0
|
|
$(eval $(call add_define,CA_LOAD_TYPE))
|
|
endif
|
|
|
|
ifeq (${RCAR_SA9_TYPE},1)
|
|
ifeq (${CA_LOAD_TYPE},0)
|
|
$(error "Error:RCAR_SA9_TYPE=1 and CA_LOAD_TYPE=0 is not supported.")
|
|
endif
|
|
endif
|
|
|
|
# Process MCU_SECURE_BOOT flag (S4 only)
|
|
ifndef MCU_SECURE_BOOT
|
|
MCU_SECURE_BOOT := 0
|
|
$(eval $(call add_define,MCU_SECURE_BOOT))
|
|
else
|
|
ifeq (${MCU_SECURE_BOOT},0)
|
|
$(eval $(call add_define,MCU_SECURE_BOOT))
|
|
else ifeq (${MCU_SECURE_BOOT},1)
|
|
ifeq (${BOOT_MCU},0)
|
|
$(error "Error:MCU_SECURE_BOOT=${MCU_SECURE_BOOT} and BOOT_MCU=${BOOT_MCU} is not supported.")
|
|
else
|
|
$(eval $(call add_define,MCU_SECURE_BOOT))
|
|
endif
|
|
else
|
|
$(error "Error:MCU_SECURE_BOOT=${MCU_SECURE_BOOT} is not supported.")
|
|
endif
|
|
endif
|
|
|
|
# Process SW_VERSION_CHECK flag
|
|
# 0:Disable 1:Enable
|
|
ifndef SW_VERSION_CHECK
|
|
SW_VERSION_CHECK := 0
|
|
$(eval $(call add_define,SW_VERSION_CHECK))
|
|
else
|
|
ifeq (${SW_VERSION_CHECK},0)
|
|
$(eval $(call add_define,SW_VERSION_CHECK))
|
|
else ifeq (${SW_VERSION_CHECK},1)
|
|
$(eval $(call add_define,SW_VERSION_CHECK))
|
|
else
|
|
$(error "Error:SW_VERSION_CHECK=${SW_VERSION_CHECK} is not supported.")
|
|
endif
|
|
endif
|
|
|
|
# Process access protection flag
|
|
# 0:Disable 1:Enable
|
|
ifndef ACC_PROT_ENABLE
|
|
ACC_PROT_ENABLE := 0
|
|
$(eval $(call add_define,ACC_PROT_ENABLE))
|
|
else
|
|
ifeq (${ACC_PROT_ENABLE},0)
|
|
$(eval $(call add_define,ACC_PROT_ENABLE))
|
|
else ifeq (${ACC_PROT_ENABLE},1)
|
|
$(eval $(call add_define,ACC_PROT_ENABLE))
|
|
else
|
|
$(error "Error:ACC_PROT_ENABLE=${ACC_PROT_ENABLE} is not supported.")
|
|
endif
|
|
endif
|
|
|
|
ifeq (${MCU_SECURE_BOOT},1)
|
|
include mcu_secureboot/mcu_secureboot.mk
|
|
endif
|
|
|
|
# Process ADD_HOTPLUG_MAGIC flag
|
|
ifndef ADD_HOTPLUG_MAGIC
|
|
ADD_HOTPLUG_MAGIC := 0
|
|
$(eval $(call add_define,ADD_HOTPLUG_MAGIC))
|
|
else
|
|
ifeq (${ADD_HOTPLUG_MAGIC},0)
|
|
$(eval $(call add_define,ADD_HOTPLUG_MAGIC))
|
|
else ifeq (${ADD_HOTPLUG_MAGIC},1)
|
|
$(eval $(call add_define,ADD_HOTPLUG_MAGIC))
|
|
else
|
|
$(error "Error:ADD_HOTPLUG_MAGIC=${ADD_HOTPLUG_MAGIC} is not supported.")
|
|
endif
|
|
endif
|
|
|
|
# Process STACK_PROTECT flag
|
|
ifndef STACK_PROTECT
|
|
STACK_PROTECT := 0
|
|
$(eval $(call add_define,STACK_PROTECT))
|
|
else
|
|
ifeq (${STACK_PROTECT},0)
|
|
$(eval $(call add_define,STACK_PROTECT))
|
|
else ifeq (${STACK_PROTECT},1)
|
|
$(eval $(call add_define,STACK_PROTECT))
|
|
CFLAGS += -stack_protector
|
|
else
|
|
$(error "Error:STACK_PROTECT=${STACK_PROTECT} is not supported.")
|
|
endif
|
|
endif
|
|
|
|
# Process RTOS_LOAD_NUM flag
|
|
# 1:RTOS#0 only 3:RTOS#0,#1,#2
|
|
ifndef RTOS_LOAD_NUM
|
|
RTOS_LOAD_NUM := 1
|
|
$(eval $(call add_define,RTOS_LOAD_NUM))
|
|
else
|
|
ifeq (${RTOS_LOAD_NUM},1)
|
|
$(eval $(call add_define,RTOS_LOAD_NUM))
|
|
else ifeq (${RTOS_LOAD_NUM},3)
|
|
$(eval $(call add_define,RTOS_LOAD_NUM))
|
|
else
|
|
$(error "Error:RTOS_LOAD_NUM=${RTOS_LOAD_NUM} is not supported.")
|
|
endif
|
|
endif
|
|
|
|
# Process OPTEE_LOAD_ENABLE flag
|
|
ifeq ($(filter ${LSI},V4H V4M),${LSI})
|
|
ifndef OPTEE_LOAD_ENABLE
|
|
OPTEE_LOAD_ENABLE := 1
|
|
$(eval $(call add_define,OPTEE_LOAD_ENABLE))
|
|
else
|
|
ifeq (${OPTEE_LOAD_ENABLE},0)
|
|
$(eval $(call add_define,OPTEE_LOAD_ENABLE))
|
|
else ifeq (${OPTEE_LOAD_ENABLE},1)
|
|
$(eval $(call add_define,OPTEE_LOAD_ENABLE))
|
|
else
|
|
$(error "Error:OPTEE_LOAD_ENABLE=${OPTEE_LOAD_ENABLE} is not supported.")
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# Process BL2_LOAD_ENABLE flag
|
|
ifeq (${LSI},V4H)
|
|
ifndef BL2_LOAD_ENABLE
|
|
BL2_LOAD_ENABLE := 1
|
|
$(eval $(call add_define,BL2_LOAD_ENABLE))
|
|
else
|
|
ifeq (${BL2_LOAD_ENABLE},0)
|
|
$(eval $(call add_define,BL2_LOAD_ENABLE))
|
|
else ifeq (${BL2_LOAD_ENABLE},1)
|
|
$(eval $(call add_define,BL2_LOAD_ENABLE))
|
|
else
|
|
$(error "Error:BL2_LOAD_ENABLE=${BL2_LOAD_ENABLE} is not supported.")
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# Process QNX_OS_LOAD_ENABLE flag
|
|
ifeq (${LSI},V4H)
|
|
ifndef QNX_OS_LOAD_ENABLE
|
|
QNX_OS_LOAD_ENABLE := 1
|
|
$(eval $(call add_define,QNX_OS_LOAD_ENABLE))
|
|
else
|
|
ifeq (${QNX_OS_LOAD_ENABLE},0)
|
|
$(eval $(call add_define,QNX_OS_LOAD_ENABLE))
|
|
else ifeq (${QNX_OS_LOAD_ENABLE},1)
|
|
$(eval $(call add_define,QNX_OS_LOAD_ENABLE))
|
|
else
|
|
$(error "Error:QNX_OS_LOAD_ENABLE=${QNX_OS_LOAD_ENABLE} is not supported.")
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
###################################################
|
|
# pass SecureMonitor parametor
|
|
###################################################
|
|
# Process SET_CA_PARAM flag
|
|
ifeq (${LSI},S4)
|
|
ifndef SET_CA_PARAM
|
|
SET_CA_PARAM := 1
|
|
$(eval $(call add_define,SET_CA_PARAM))
|
|
else
|
|
ifeq (${SET_CA_PARAM},0)
|
|
$(eval $(call add_define,SET_CA_PARAM))
|
|
else ifeq (${SET_CA_PARAM},1)
|
|
$(eval $(call add_define,SET_CA_PARAM))
|
|
else
|
|
$(error "Error:SET_CA_PARAM=${SET_CA_PARAM} is not supported.")
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# Process ECM_ENABLE
|
|
ifndef ECM_ENABLE
|
|
ECM_ENABLE:= 0
|
|
$(eval $(call add_define,ECM_ENABLE))
|
|
else
|
|
ifeq (${ECM_ENABLE},0)
|
|
$(eval $(call add_define,ECM_ENABLE))
|
|
else ifeq (${ECM_ENABLE},1)
|
|
$(eval $(call add_define,ECM_ENABLE))
|
|
else
|
|
$(error "Error: ECM_ENABLE=${ECM_ENABLE} is not supported.")
|
|
endif
|
|
endif
|
|
|
|
# Process ECM_ERROR_ENABLE flag
|
|
ifndef ECM_ERROR_ENABLE
|
|
ECM_ERROR_ENABLE := 1
|
|
$(eval $(call add_define,ECM_ERROR_ENABLE))
|
|
else
|
|
ifeq (${ECM_ERROR_ENABLE},0)
|
|
$(eval $(call add_define,ECM_ERROR_ENABLE))
|
|
else ifeq (${ECM_ERROR_ENABLE},1)
|
|
$(eval $(call add_define,ECM_ERROR_ENABLE))
|
|
else
|
|
$(error "Error:ECM_ERROR_ENABLE=${ECM_ERROR_ENABLE} is not supported.")
|
|
endif
|
|
endif
|
|
|
|
|
|
# Process SAN_ENABLE
|
|
ifndef SAN_ENABLE
|
|
SAN_ENABLE:= 0
|
|
$(eval $(call add_define,SAN_ENABLE))
|
|
else
|
|
ifeq (${SAN_ENABLE},0)
|
|
$(eval $(call add_define,SAN_ENABLE))
|
|
else ifeq (${SAN_ENABLE},1)
|
|
$(eval $(call add_define,SAN_ENABLE))
|
|
OBJ_FILE += \
|
|
ip/san/v4h.o \
|
|
ip/wdt/rwdt.o \
|
|
ip/i2c/i2c5.o
|
|
else
|
|
$(error "Error: SAN_ENABLE=${SAN_ENABLE} is not supported.")
|
|
endif
|
|
endif
|
|
|
|
# Process DBSC HUNGUP WA
|
|
ifndef WA_OTLINT5579
|
|
WA_OTLINT5579:= 1
|
|
endif
|
|
$(eval $(call add_define,WA_OTLINT5579))
|
|
|
|
###################################################
|
|
|
|
OUTDIR_REL := $(OUTDIR)/release
|
|
OUTDIR_OBJ := $(OUTDIR)/obj
|
|
|
|
OBJ_FILE := $(OBJ_FILE:%.o=$(OUTDIR_OBJ)/%.o)
|
|
OBJ_FILE_SA0 := $(OBJ_FILE_SA0:%.o=$(OUTDIR_OBJ)/%.o)
|
|
OBJ_FILE_SA9 := $(OBJ_FILE_SA9:%.o=$(OUTDIR_OBJ)/%.o)
|
|
OBJ_FILE_TFMV_TBL := $(OBJ_FILE_TFMV_TBL:%.o=$(OUTDIR_OBJ)/%.o)
|
|
OBJ_FILE_NTFMV_TBL := $(OBJ_FILE_NTFMV_TBL:%.o=$(OUTDIR_OBJ)/%.o)
|
|
|
|
CC = cxrh850
|
|
AS = cxrh850
|
|
LD = cxrh850
|
|
OC = gsrec
|
|
OD = gdump
|
|
|
|
ASFLAGS += -asm="-preprocess_assembly_files" \
|
|
-asm="-nostartfiles" \
|
|
-D__ASSEMBLY \
|
|
$(INCLUDE_DIR) $(DEFINES)
|
|
|
|
CFLAGS += -nostartfiles \
|
|
-c99 \
|
|
$(INCLUDE_DIR) $(DEFINES) \
|
|
--ghstd=last \
|
|
-Wundef \
|
|
--diag_error=193 \
|
|
--prototype_errors
|
|
# --ghstd=last : Enable Green Hills Standard Mode
|
|
# -Wundef : Output warning if there are any undefined symbols
|
|
# --diag_error=193 : Error if zero is applied to undefined symbol
|
|
# --prototype_errors : Error if there are no any prototype declaration
|
|
|
|
ifeq (${LOG_LEVEL},0)
|
|
# There are no any additional options
|
|
else
|
|
CFLAGS += --diag_suppress=1932 # There is warning that format string parameter in sprintf is not constant
|
|
endif
|
|
|
|
LDFLAGS += -nostartfiles -Mu
|
|
|
|
BUILD_MESSAGE_TIMESTAMP ?= __TIME__", "__DATE__
|
|
|
|
###################################################
|
|
.SUFFIXES : .s .c .o
|
|
|
|
###################################################
|
|
# command
|
|
|
|
.PHONY: all
|
|
all: $(OUTPUT_FILE) $(OUTPUT_FILE_SA0) $(OUTPUT_FILE_SA9) $(OUTPUT_FILE_TFMV_TBL) $(OUTPUT_FILE_NTFMV_TBL)
|
|
|
|
###################################################
|
|
# Linker
|
|
###################################################
|
|
$(OUTPUT_FILE) : $(MEMORY_DEF) $(OBJ_FILE)
|
|
@echo const char build_message[] = "Built : "$(BUILD_MESSAGE_TIMESTAMP); > $(OUTDIR_OBJ)/build_message.c
|
|
$(V)$(CC) $(CFLAGS) -o $(OUTDIR_OBJ)/build_message.o -c $(OUTDIR_OBJ)/build_message.c
|
|
|
|
$(V)$(LD) $(OBJ_FILE) $(OUTDIR_OBJ)/build_message.o \
|
|
-T $(MEMORY_DEF) \
|
|
-o $(OUTDIR_REL)/$(OUTPUT_FILE) \
|
|
$(LDFLAGS) \
|
|
-map=$(OUTDIR_REL)/$(FILE_NAME).map
|
|
|
|
$(V)$(OC) -S3 -bytes 16 -noS5 $(OUTDIR_REL)/$(OUTPUT_FILE) > $(OUTDIR_REL)/$(FILE_NAME).srec
|
|
$(V)$(OD) -full -ysec $(OUTDIR_REL)/$(OUTPUT_FILE) > $(OUTDIR_REL)/$(FILE_NAME).dump
|
|
$(V)gmemfile $(OUTDIR_REL)/$(OUTPUT_FILE) -o $(OUTDIR_REL)/$(OUTPUT_FILE:%.elf=%.bin)
|
|
|
|
$(OUTPUT_FILE_SA0) : $(MEMORY_DEF_SA0) $(OBJ_FILE_SA0)
|
|
$(V)$(LD) $(OBJ_FILE_SA0) \
|
|
-T $(MEMORY_DEF_SA0) \
|
|
-o $(OUTDIR_REL)/$(OUTPUT_FILE_SA0) \
|
|
-map=$(OUTDIR_REL)/$(FILE_NAME_SA0).map \
|
|
-nostdlib
|
|
|
|
$(V)$(OC) -S3 -bytes 16 -noS5 $(OUTDIR_REL)/$(OUTPUT_FILE_SA0) > $(OUTDIR_REL)/$(FILE_NAME_SA0).srec
|
|
$(V)gmemfile $(OUTDIR_REL)/$(OUTPUT_FILE_SA0) -o $(OUTDIR_REL)/$(OUTPUT_FILE_SA0:%.elf=%.bin)
|
|
|
|
$(OUTPUT_FILE_SA9) : $(MEMORY_DEF_SA9) $(OBJ_FILE_SA9)
|
|
$(V)$(LD) $(OBJ_FILE_SA9) \
|
|
-T $(MEMORY_DEF_SA9) \
|
|
-o $(OUTDIR_REL)/$(OUTPUT_FILE_SA9) \
|
|
-map=$(OUTDIR_REL)/$(FILE_NAME_SA9).map \
|
|
-nostdlib
|
|
|
|
$(V)$(OC) -S3 -bytes 16 -noS5 $(OUTDIR_REL)/$(OUTPUT_FILE_SA9) > $(OUTDIR_REL)/$(FILE_NAME_SA9).srec
|
|
$(V)gmemfile $(OUTDIR_REL)/$(OUTPUT_FILE_SA9) -o $(OUTDIR_REL)/$(OUTPUT_FILE_SA9:%.elf=%.bin)
|
|
|
|
$(OUTPUT_FILE_TFMV_TBL) : $(MEMORY_DEF_TFMV_TBL) $(OBJ_FILE_TFMV_TBL)
|
|
$(V)$(LD) $(OBJ_FILE_TFMV_TBL) \
|
|
-T $(MEMORY_DEF_TFMV_TBL) \
|
|
-o $(OUTDIR_REL)/$(OUTPUT_FILE_TFMV_TBL) \
|
|
-map=$(OUTDIR_REL)/$(FILE_NAME_TFMV_TBL).map \
|
|
-nostdlib
|
|
|
|
$(V)gmemfile $(OUTDIR_REL)/$(OUTPUT_FILE_TFMV_TBL) -o $(OUTDIR_REL)/$(OUTPUT_FILE_TFMV_TBL:%.elf=%.bin)
|
|
|
|
$(OUTPUT_FILE_NTFMV_TBL) : $(MEMORY_DEF_NTFMV_TBL) $(OBJ_FILE_NTFMV_TBL)
|
|
$(V)$(LD) $(OBJ_FILE_NTFMV_TBL) \
|
|
-T $(MEMORY_DEF_NTFMV_TBL) \
|
|
-o $(OUTDIR_REL)/$(OUTPUT_FILE_NTFMV_TBL) \
|
|
-map=$(OUTDIR_REL)/$(FILE_NAME_NTFMV_TBL).map \
|
|
-nostdlib
|
|
|
|
$(V)gmemfile $(OUTDIR_REL)/$(OUTPUT_FILE_NTFMV_TBL) -o $(OUTDIR_REL)/$(OUTPUT_FILE_NTFMV_TBL:%.elf=%.bin)
|
|
|
|
###################################################
|
|
# Compile
|
|
###################################################
|
|
|
|
$(OUTDIR_OBJ)/%.o:%.c
|
|
$(V)$(CC) $(CFLAGS) -o $@ -c $<
|
|
|
|
$(OUTDIR_OBJ)/%.o:%.S
|
|
$(V)$(AS) $(ASFLAGS) -o $@ -c $<
|
|
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
@rm -rf $(OUTDIR)
|