###############################################################################
# Tools paths
###############################################################################
EXTERNAL_SW_ROOT = C:/ti
CODEGEN_PATH_DSP = $(EXTERNAL_SW_ROOT)/ccsv5/tools/compiler/C6000
CODEGEN_PATH_ARM9 = $(EXTERNAL_SW_ROOT)/ccsv5/tools/compiler/TMS470

###############################################################################
# Choose which target compiler we want to use to build the unified loader with.
# Can only choose one, but should be able to load any dynamic object file that
# is configured to be supported (ARM, C6x, etc.)
# Preferred method is to define this from the "gmake" command via 
# "TARGET_CC=ARM" or "TARGET_CC=C60"
###############################################################################
TARGET_CC                 = C60
#TARGET_CC                 = ARM 

ifeq ($(TARGET_CC),C60)
CC=cl6x
else
CC=cl470
endif 

###############################################################################
# Set C++ compiler to be same as C compiler.  For gcc this must be changed  
# to g++
###############################################################################
C++ = $(CC)

###############################################################################
# Set host specific default options
###############################################################################
ifeq (cl6x, $(CC))
C_OPTS += -mv6740
C_OPTS += --abi=eabi --mem_model:data=far
LNK_OPTS += -z
LNK_OPTS += linker.cmd
LNK_OPTS += --dynamic=lib
LNK_OPTS += RIDL.out
#LNK_OPTS += -llibc.a
EXPORT_OPTS = 
CGTOOLS = $(CODEGEN_PATH_DSP)

else ifeq (cl470, $(CC))
C_OPTS = -mv5e
C_OPTS += --abi=eabi
LNK_OPTS += -z
LNK_OPTS += -llnk.cmd
LNK_OPTS += RIDL.out
#LNK_OPTS += -llibc.a
LNK_OPTS += --dynamic=lib
EXPORT_OPTS = 
CGTOOLS = $(CODEGEN_PATH_ARM9)

else
DEFAULT:
	@echo "Compiler '$(CC)' not supported"
	@exit 1
endif

###############################################################################
# Set path separator, etc based on the OS
###############################################################################
ifeq ($(OS),Windows_NT)
  PATH_SEPARATOR = ;
else 
  # else, assume it is linux
  PATH_SEPARATOR = :
endif

PATH += $(PATH_SEPARATOR)$(CGTOOLS)/bin
export PATH

###############################################################################
# Commands commonly used within the make files
###############################################################################
RM = rm
RMDIR = rm -rf
MKDIR = mkdir
ECHO = @echo
# MAKE = make
EGREP = egrep
CP = cp

###############################################################################
# Tools name
###############################################################################
TARG_TOOL_NAME = hello

###############################################################################
# List of generic modules and their files
###############################################################################
TARG_FILES = hello.c

###############################################################################
# Add any generic unit test files here
############################################################################### 
VPATH = $(CGTOOLS)/include $(CGTOOLS)/lib
HEADERS = $(filter %.h, $(TARG_FILES))
INCL = $(patsubst %,-I%,$(VPATH))
DEFINES = $(patsubst %,-D%_TARGET,$(TARGET_CC))

all: $(TARG_TOOL_NAME)

###############################################################################
# Normal make process                                                         
###############################################################################

$(TARG_TOOL_NAME) : $(TARG_FILES) $(HEADERS) linker.cmd
	$(ECHO) Build $@
	$(CC) $(C_OPTS) $(TARG_FILES) $(HEADERS) $(DEFINES) $(INCL) $(LNK_OPTS) -o $@.dll -m $@.map -e start
	ofd6x -v $@.dll > $@_ofd.txt

###############################################################################
# Cleanup								      
###############################################################################
clean:
	$(RM) *.obj
	$(RM) *.dll
