################################################################################
# Project makefile.
################################################################################

# 'Stellar SDK' project values
PROJECTNAME := SR6P3_AI_Demo_MultiCore_EVBC4000P_A
SDKID := StellarSDK-5.1.0
STELLAR_SDK_RELATIVE_PATH := ../../SDKS/$(SDKID)
TEST_ROOT_DIR := $(STELLAR_SDK_RELATIVE_PATH)
PROJECT_COMMON_DIR := $(STELLAR_SDK_RELATIVE_PATH)/example/Config

################################################################################
# Define device (sr6p7g7/sr6p6/sr6p7/sr6g7/sr6p3)
# Define board :
# sr6p7g7 ==> (sr6x7_evbc8000p_c/sr6x7_evbc4000p_a/sr6x7_evbc8000s_a)
# sr6p6   ==> (sr6p6_evbc8000p_b)
# sr6g7   ==> (sr6g7_evbc6000p_a/sr6g7_evbc6000p_b)
# sr6p7   ==> (sr6p7_evbc8000p_a)
# sr6p3   ==> (sr6px_evbc4000p_a)
# sr6g6 ==> (sr6g6_evbc4000p_a/sr6g6_evbc6000p_a)
# WARNING : your board should match with your device
################################################################################

CONFIG_DEVICE   := sr6p3
CONFIG_BOARD    := sr6px_evbc4000p_a
USER_STACK_SIZE := 4k

ifeq ($(TOOLCHAIN), HIGHTEC)
CONFIG_WARNING_LEVEL := \
	-Wall \
	-Wextra
endif

include $(PROJECT_COMMON_DIR)/mk/config.mk

ifeq ($(wildcard $(STELLAR_SDK_BUILD_SYSTEM_DIR)/StellarSDK.mk),)
$(error $(STELLAR_SDK_BUILD_SYSTEM_DIR)/StellarSDK.mk does not exist)
$(error Install the $(SDKID) or Correct STELLAR_SDK_RELATIVE_PATH)
endif

################################################################################
# Modules to build
################################################################################

BUILD_PLATFORM_BOARD           := 1
BUILD_PLATFORM_CLOCK           := 1
BUILD_PLATFORM_CORE            := 1
BUILD_PLATFORM_IRQ             := 1
BUILD_PLATFORM_MCU             := 1

BUILD_DRIVERS_SIUL2            := 1
BUILD_OS_OSAL                  := 1

ifeq ($(CONFIG_TARGET_CORE), $(filter $(CONFIG_TARGET_CORE), dme dsph))
BUILD_BOOT_M4                  := 1
else
BUILD_BOOT_R52                 := 1

BUILD_DRIVERS_AGT              := 1
BUILD_DRIVERS_GST              := 1
BUILD_DRIVERS_ME               := 1
endif

################################################################################
# Add project files
################################################################################

# Application base name
# Depending on target core will be prepend by clusterX_coreX_ or dme_/dsph_
APP_BASE_NAME := $(PROJECTNAME)

# C sources
C_SRCS += \
	src/$(TARGET_CORE_DIR)/main.c
	
# C includes
################################################################################
# PLEASE UPDATE IT FOR GENERATED CODE
# DO NOT FORGET TO CLEAN THE PROJECT 
# FOR THE DEPENDENCIES FILES
################################################################################
C_INCS += \
 	src-gen/ \
 	src-gen/$(CONFIG_DEVICE)

ifeq ($(strip $(CONFIG_TARGET_CLUSTER) $(CONFIG_TARGET_CORE)),cluster0 core0)

# Linking DME and DSPH code.
# It can be linked to any cluster/core. It depends on application needs.
# In this example DME and DSPH code/data are linked to Cluster0/Core0

DME_CODE := build/$(CONFIG_DEVICE)/$(CONFIG_BOARD)/dme/$(TARGET_TYPE)/$(TARGET_BUILD)/dme_$(APP_BASE_NAME).code.elf
DME_DATA := build/$(CONFIG_DEVICE)/$(CONFIG_BOARD)/dme/$(TARGET_TYPE)/$(TARGET_BUILD)/dme_$(APP_BASE_NAME).data.elf
DSPH_CODE := build/$(CONFIG_DEVICE)/$(CONFIG_BOARD)/dsph/$(TARGET_TYPE)/$(TARGET_BUILD)/dsph_$(APP_BASE_NAME).code.elf
DSPH_DATA := build/$(CONFIG_DEVICE)/$(CONFIG_BOARD)/dsph/$(TARGET_TYPE)/$(TARGET_BUILD)/dsph_$(APP_BASE_NAME).data.elf

endif # cluster0 & core0

# Images to be linked together (collected) as single ELF file
CL0C0_BINARY_FW := $(TARGET_BUILD_BOARD_DIR)/cluster0/core0/$(TARGET_TYPE)/$(TARGET_BUILD)/cluster0_core0_$(APP_BASE_NAME).bin
CL0C1_BINARY_FW := $(TARGET_BUILD_BOARD_DIR)/cluster0/core1/$(TARGET_TYPE)/$(TARGET_BUILD)/cluster0_core1_$(APP_BASE_NAME).bin
CL1C0_BINARY_FW := $(TARGET_BUILD_BOARD_DIR)/cluster1/core0/$(TARGET_TYPE)/$(TARGET_BUILD)/cluster1_core0_$(APP_BASE_NAME).bin

################################################################################
# Include 'Stellar AI' project makefile
################################################################################
include ./stellar_ai.mk

################################################################################
# Include 'Stellar SDK' top level makefile
################################################################################
include $(STELLAR_SDK_BUILD_SYSTEM_DIR)/StellarSDK.mk

################################################################################
# Define 'Stellar SDK' compiling target
################################################################################


all:
	$(AT)$(MAKE) $(MAKE_SILENT) CONFIG_TARGET_CORE=dme default-all
	$(AT)$(MAKE) $(MAKE_SILENT) CONFIG_TARGET_CORE=dsph  default-all
	$(AT)$(MAKE) $(MAKE_SILENT) CONFIG_TARGET_CLUSTER=cluster1 CONFIG_TARGET_CORE=core0 default-all
	$(AT)$(MAKE) $(MAKE_SILENT) CONFIG_TARGET_CLUSTER=cluster0 CONFIG_TARGET_CORE=core1 default-all
	$(AT)$(MAKE) $(MAKE_SILENT) CONFIG_TARGET_CLUSTER=cluster0 CONFIG_TARGET_CORE=core0 default-all
	$(AT)$(MAKE) $(MAKE_SILENT) CONFIG_HYPER=1 collect
