# Build Path
RTOS_SDK_PATH = /home/dji/TDA4/ti_souce_code/rtos_automotive_06_01_00_05/dji/psdk_rtos_auto_j7_06_01_00_15

TI_CGT_ARM_PATH ?= $(RTOS_SDK_PATH)/ti-cgt-arm_18.12.1.LTS
BIOS_PATH ?= $(RTOS_SDK_PATH)/bios_6_76_03_01
XDCTOOLS_PATH ?= $(RTOS_SDK_PATH)/xdctools_3_55_02_22_core
PDK_PATH ?= $(RTOS_SDK_PATH)/pdk
DEMO_APPS_PATH ?= /home/dji/Desktop/TDA4_doc/ipc/tda4_ipc_between_linux_sysbios/mcu_2_1_rtos/

MODULE := mcu2_1
TARGET_BUILD := debug
$(MODULE)_ODIR := $(DEMO_APPS_PATH)/obj
$(MODULE)_XDC_TARGET := "ti.targets.arm.elf.R5F"
$(MODULE)_XDC_PLATFORM := "ti.platforms.cortexR:J7ES_MAIN"
$(MODULE)_XDC_BLD_FILE := $(DEMO_APPS_PATH)/r5_common/config_r5f.bld
$(MODULE)_XDC_CFG_FILE := $(DEMO_APPS_PATH)/config/sysbios.cfg
$(MODULE)_XDC_IDIRS := $(BIOS_PATH)/packages;$(DEMO_APPS_PATH)/config;$(DEMO_APPS_PATH)/r5_common;$(BIOS_PATH)/packages/ti/posix/ccs

$(MODULE)_COPT := --endian=little --abi=eabi -mv=7R5 --float_support=vfpv3d16 --gen_func_subsections --preproc_with_compile
ifeq ($(TARGET_BUILD),debug)
$(MODULE)_COPT += -g -D=TARGET_BUILD=2 -D_DEBUG_=1
else ifeq ($(TARGET_BUILD),release)
$(MODULE)_COPT += -DNDEBUG
endif

$(MODULE)_DEFINES := -D=CPU_$(MODULE) -D=SYSBIOS -D=J721E -D=R5F="R5F" -D=TARGET_NUM_CORES=3 -D=TARGET_ARCH=32 -D=ARCH_32 -D=SOC_J721E -D=ARM -D=xdc_target_name__=ti/targets/arm/elf/R5F -D=xdc_target_types__=ti/targets/arm/elf/std.h
$(MODULE)_CFLAGS := $($(MODULE)_DEFINES) $($(MODULE)_COPT)
$(MODULE)_LDFLAGS := --warn_sections --reread_libs --zero_init=on --rom_model $($(MODULE)_ODIR)/configuro/linker.cmd $(DEMO_APPS_PATH)/build_script/lnk.cmd

$(MODULE)_CC_LIBRARY := --search_path=$(TI_CGT_ARM_PATH)/lib --library=libc.a \
	--search_path=$(PDK_PATH)/packages/ti/osal/lib/tirtos/j721e/r5f/$(TARGET_BUILD) \
	--search_path=$(PDK_PATH)/packages/ti/csl/lib/j721e/r5f/$(TARGET_BUILD) \
	--search_path=$(PDK_PATH)/packages/ti/board/lib/j721e_evm/r5f/$(TARGET_BUILD) \
	--search_path=$(PDK_PATH)/packages/ti/drv/uart/lib/j721e/r5f/$(TARGET_BUILD) \
	--search_path=$(PDK_PATH)/packages/ti/drv/i2c/lib/j721e/r5f/$(TARGET_BUILD) \
	--search_path=$(PDK_PATH)/packages/ti/drv/sciclient/lib/j721e/$(MODULE)/$(TARGET_BUILD) \
	--search_path=$(PDK_PATH)/packages/ti/drv/csirx/lib/j721e/$(MODULE)/$(TARGET_BUILD) \
	--search_path=$(PDK_PATH)/packages/ti/drv/fvid2/lib/j721e/r5f/$(TARGET_BUILD) \
	--search_path=$(PDK_PATH)/packages/ti/drv/udma/lib/j721e/$(MODULE)/$(TARGET_BUILD) \
	--search_path=$(PDK_PATH)/packages/ti/drv/ipc/lib/j721e/$(MODULE)/$(TARGET_BUILD) \
	--library=rtsv7R4_T_le_v3D16_eabi.lib --library=ti.board.aer5f --library=ti.drv.uart.aer5f \
	--library=ti.csl.aer5f --library=ti.osal.aer5f --library=sciclient.aer5f --library=ti.drv.i2c.aer5f \
	--library=fvid2.aer5f --library=udma.aer5f --library=udma_apputils.aer5f \
	--library=ipc.aer5f

$(MODULE)_SRC += $(shell find -name '*.c')

CC = $(TI_CGT_ARM_PATH)/bin/armcl
LNK = $(TI_CGT_ARM_PATH)/bin/armcl

default: demo_apps_mcu2_1.xer5f

.PRECIOUS: %/compiler.opt %/linker.cmd

%/compiler.opt: %/linker.cmd ;

%/linker.cmd: $($(MODULE)_XDC_CFG_FILE)
	-$(XDCTOOLS_PATH)/xs --xdcpath="$($(MODULE)_XDC_IDIRS)" xdc.tools.configuro -c $(TI_CGT_ARM_PATH) -o $($(MODULE)_ODIR)/configuro -t $($(MODULE)_XDC_TARGET) -p $($(MODULE)_XDC_PLATFORM) -b $($(MODULE)_XDC_BLD_FILE) $<

%.obj: $($(MODULE)_SRC) $($(MODULE)_ODIR)/configuro/compiler.opt
	-mkdir -p $($(MODULE)_ODIR)/build
	$(CC) $($(MODULE)_CFLAGS) \
	-I$(TI_CGT_ARM_PATH)/include \
	-I$(PDK_PATH)/packages \
	-I$(BIOS_PATH)/packages \
	-I$(BIOS_PATH)/packages/ti/posix/ccs \
	-I$(XDCTOOLS_PATH)/packages \
	-I$(DEMO_APPS_PATH)/src \
	--preproc_dependency=$($(MODULE)_ODIR)/build/main.dep \
	-fr=$($(MODULE)_ODIR)/build -fs=$($(MODULE)_ODIR)/build -ft=$($(MODULE)_ODIR)/build \
	-eo=.obj -fc=$($(MODULE)_SRC)

demo_apps_mcu2_1.xer5f: check_paths %.obj
	$(LNK) \
	-I$(TI_CGT_ARM_PATH)/include \
	-I$(DEMO_APPS_PATH)/include \
	-I$(PDK_PATH)/packages \
	-I$(BIOS_PATH)/packages \
	-I$(BIOS_PATH)/packages/ti/posix/ccs \
	-I$(XDCTOOLS_PATH)/packages \
	$($(MODULE)_CFLAGS) -z \
	$($(MODULE)_LDFLAGS) \
	$($(MODULE)_ODIR)/build/*.obj \
	$($(MODULE)_CC_LIBRARY) \
	--output_file=$($(MODULE)_ODIR)/build/$@ --map_file=$($(MODULE)_ODIR)/build/$@.map

help:
	#
	# Use below make targets to build SDK and/or different components with the SDK
	#
	# make                              # Build main.obj
	# make help                         # Print help message
	# make clean                        # Clean mcu2_1 apps
	# make demo_apps_mcu2_1.xer5f       # Build mcu2_1 apps
	#

check_paths:
	@if [ ! -d $(TI_CGT_ARM_PATH) ]; then echo 'ERROR: $(TI_CGT_ARM_PATH) not found !!!'; exit 1; fi
	@if [ ! -d $(BIOS_PATH) ]; then echo 'ERROR: $(BIOS_PATH) not found !!!'; exit 1; fi
	@if [ ! -d $(XDCTOOLS_PATH) ]; then echo 'ERROR: $(XDCTOOLS_PATH) not found !!!'; exit 1; fi
	@if [ ! -d $(PDK_PATH) ]; then echo 'ERROR: $(PDK_PATH) not found !!!'; exit 1; fi
	@if [ ! -d $(DEMO_APPS_PATH) ]; then echo 'ERROR: $(DEMO_APPS_PATH) not found !!!'; exit 1; fi
	@echo "# SDK paths OK !!!"

clean:
	-rm -rf $(DEMO_APPS_PATH)/obj $(DEMO_APPS_PATH)/lib
