ifeq ($(OS),Windows_NT)
	SHELL=C:/Windows/System32/cmd.exe
endif
include Rules.make

MCAL_EXAMPLES = $(mcal_PATH)/examples

SOCFAMILY_LIST_DEFAULT = am263

mcal_LIB_LIST_CLEAN = $(addsuffix _clean, $(mcal_LIB_LIST))
mcal_EXAMPLE_LIST_CLEAN = $(addsuffix _clean, $(mcal_EXAMPLE_LIST))
mcal_test_EXAMPLE_LIST_CLEAN = $(addsuffix _clean, $(mcal_test_EXAMPLE_LIST))
mcal_PKG_LIST_ALL_CLEAN = $(addsuffix _clean, $(mcal_PKG_LIST_ALL))

.PHONY : mcal_libs mcal_libs_clean unit_test unit_test_clean examples examples_clean all testall clean gen_memstats $(mcal_PKG_LIST_ALL)

version:
	$(ECHO) ------------------------------------------------------
	$(ECHO) \# AM263 MCAL 08.06.02
	$(ECHO) ------------------------------------------------------

mcal_libs:  $(mcal_LIB_LIST)

mcal_libs_clean: $(mcal_LIB_LIST_CLEAN)

unit_test:	$(mcal_test_EXAMPLE_LIST)
unit_test_clean: $(mcal_test_EXAMPLE_LIST_CLEAN)

examples: $(mcal_EXAMPLE_LIST)

examples_clean: $(mcal_EXAMPLE_LIST_CLEAN)

all: version mcal_libs examples

testall:  version mcal_libs unit_test 
clean: mcal_libs_clean unit_test_clean examples_clean 

allclean:
	$(RM) -rf $(DEST_ROOT)

help:
	$(ECHO) ------------------------------------------------------
	$(ECHO) \# MCAL make help
	$(ECHO) ------------------------------------------------------
	$(ECHO) gmake -s [OPTIONAL MAKE VARIABLES]
	$(ECHO)
	$(ECHO) "Supported targets:"
	$(ECHO) "------------------"
	$(ECHO) "all         : Builds all libraries and examples"
	$(ECHO) "clean       : Cleans all libraries and examples"
	$(ECHO) "allclean    : Removes the binary directory using rm -rf"
	$(ECHO) "examples    : Builds all examples"
	$(ECHO) "mcal_libs   : Builds all libraries"
	$(ECHO) "<Module>    : Builds a module: $(mcal_LIB_LIST)"
	$(ECHO) "<Module_App>: Builds a app: $(mcal_EXAMPLE_LIST)"
	$(ECHO) ""
	$(ECHO) "Optional make variables:"
	$(ECHO) "------------------------"
	$(ECHO) "PLATFORM=[AM263]"
	$(ECHO) "    Default: AM263"
	$(ECHO) "CORE=[r4 / r5f]"
	$(ECHO) "    Default: r5f"
	$(ECHO) "PROFILE=[debug / release]"
	$(ECHO) "    Default: release"
	$(ECHO) "OS=[Windows_NT / linux]"
	$(ECHO) "    Default: Windows_NT"
	$(ECHO) "COMPILER_SELECT=[CLANG / DIAB / TI_COMPILER]"
	$(ECHO) "    Default: CLANG" 
	$(ECHO) "JENKINS_TEST_AUTOMATION=[TRUE / FALSE]"
	$(ECHO) "    Default: FALSE" 
	
platforms:
	$(MAKE) all PLATFORM=AM263

platformsclean:
	$(MAKE) clean PLATFORM=AM263
	

profiles:
	$(MAKE) all PROFILE_$(CORE)=debug
	$(MAKE) all PROFILE_$(CORE)=release

profilesclean:
	$(MAKE) clean PROFILE_$(CORE)=debug
	$(MAKE) clean PROFILE_$(CORE)=release

allall:
	$(MAKE) platforms PROFILE_$(CORE)=debug
	$(MAKE) platforms PROFILE_$(CORE)=release


#=================================================================
# MCALs libs and tests
$(mcal_PKG_LIST_ALL):
	$(if $(filter $(SOCFAMILY), $(subst emptyreplacement,,$($@_SOCLIST))),$(MAKE) -C $($@_PATH),$(ECHO) Nothing to be done for $(SOCFAMILY) $@)

$(mcal_PKG_LIST_ALL_CLEAN):
	$(MAKE) -C $($(subst _clean,,$@)_PATH) clean

# Below is used only for checking c++ build errors during development, not to be used for any other purpose
cplusplus_build:
	$(MAKE) all PROFILE=debug CPLUSPLUS_BUILD=yes

gen_memstats: mcal_libs
	cmd /c ..\mcal_misc\docs\memStats\mcal_run_all.sh $(COMPILER) $(PLATFORM) $(CORE) $(PROFILE)

# Nothing beyond this point
