TARGET = spiboot_pcieinit.out
BOARD = evmC6678

BIN_PATH = ../bin
SRC_PATH = ../../src
TARGET_PATH = $(BIN_PATH)/$(TARGET)

CGT_PATH = $(C6X_GEN_INSTALL_PATH)
CL6X = $(CGT_PATH)/bin/cl6x

LINKER_CMD = ../linker.cmd
LIBS = -l"ti.platform.evm6678l.ae66" -l"ti.csl.ae66" -l"ti.drv.pcie.ae66" -l"libc.a"

CSRCS = $(wildcard $(SRC_PATH)/*.c)
OBJS = $(patsubst $(SRC_PATH)/%.c, %.obj, $(CSRCS))

# Exports needed for csl, pcie driver and platform
export BOARD
export LIMIT_SOCS="c6678"
export LIMIT_BOARDS="$(BOARD)"

CSL_ROOT = $(PDK_INSTALL_PATH)/ti/csl
DRIVER_ROOT =  $(PDK_INSTALL_PATH)
PLATFORM_ROOT = $(PDK_INSTALL_PATH)/ti/platform/evmc6678l/platform_lib


all: $(TARGET_PATH)

csl:
	$(MAKE) -C $(CSL_ROOT) all

csl_clean:
	$(MAKE) -C $(CSL_ROOT) clean

pcie:
	$(MAKE) -C $(DRIVER_ROOT) pcie

pcie_clean:
	$(MAKE) -C $(DRIVER_ROOT) pcie_clean

platform:
	$(MAKE) -C $(PLATFORM_ROOT) all

platform_clean:
	$(MAKE) -C $(PLATFORM_ROOT) clean

%.obj: $(SRC_PATH)/%.c
	@echo 'Building file: $<'
	@echo 'Invoking: C6000 Compiler'
	$(CL6X) -mv6600 --abi=eabi -g --define=SOC_C6678 --define=_TMX320C6X --display_error_number --diag_warning=225 \
	-i$(CGT_PATH)/include -i$(PDK_INSTALL_PATH)/ti/platform -i$(PDK_INSTALL_PATH) \
	--preproc_with_compile $<
	@echo 'Finished building: $<'
	@echo

$(TARGET_PATH): $(OBJS) $(LINKER_CMD) csl pcie platform
	@echo 'Building target: $@'
	@echo 'Invoking: C6000 Linker'
	@mkdir -p $(BIN_PATH)
	$(CL6X) -mv6600 --abi=eabi -g --define=SOC_C6678 --define=_TMX320C6X --display_error_number --diag_warning=225 \
		-z -m$(@:.out=.map) \
		-i$(CGT_PATH)/lib -i$(CGT_PATH)/include -i$(PDK_INSTALL_PATH)/ti/platform/evmc6678l/platform_lib/lib/release -i$(PDK_INSTALL_PATH)/ti/csl/lib/c6678/c66/release  -i$(PDK_INSTALL_PATH)/ti/drv/pcie/lib/c6678/c66/release \
		--reread_libs --warn_sections --rom_model -o $@ $(OBJS) $(LINKER_CMD) $(LIBS)
	@echo 'Finished building target: $@'
	@echo

clean:
	@echo 'Cleaning build'
	@rm -f $(TARGET_PATH) $(OBJS) $(TARGET_PATH:.out=.map)
	@echo

cleanall: clean csl_clean pcie_clean platform_clean

.PHONY: platformcsl csl_clean pcie pcie_clean platform_clean
