Added makerules
authorSundaram Raju <sundaram@ti.com>
Tue, 11 Jan 2011 14:02:22 +0000 (19:32 +0530)
committerSundaram Raju <sundaram@ti.com>
Tue, 11 Jan 2011 14:55:48 +0000 (20:25 +0530)
Signed-off-by: Sundaram Raju <sundaram@ti.com>
makerules/build_config.mk [new file with mode: 0644]
makerules/common.mk [new file with mode: 0644]
makerules/docs/makerules_spec.doc [new file with mode: 0644]
makerules/env.mk [new file with mode: 0644]
makerules/platform.mk [new file with mode: 0644]
makerules/rules_a8.mk [new file with mode: 0644]
makerules/rules_c64p.mk [new file with mode: 0644]
makerules/rules_c674.mk [new file with mode: 0644]
makerules/rules_m3.mk [new file with mode: 0644]

diff --git a/makerules/build_config.mk b/makerules/build_config.mk
new file mode 100644 (file)
index 0000000..573659f
--- /dev/null
@@ -0,0 +1,76 @@
+# Filename: build_config.mk
+#
+# Build configuration make file - This file contains all the options that are
+#                                 frequently changed
+#
+# This file changes when:
+#     1. format needs to change (eg: COFF/ELF)
+#     2. Endian-ness needs to change (little/big)
+#     3. global compiler and linker options need to change (one entry for each
+#                                                           core)
+#     4. Profile needs to change (debug/whole_program_debug)
+#     5. Build option changes (xdc/make/full)
+#
+
+# Global options
+
+# Build - Allowed values = full | xdc | make
+#         This "builds" packages based on the setting:
+#                 full - build both XDC and make (all the packages/components)
+#                 xdc  - build and configure only XDC packages
+#                 make - build only make based components and link everything
+# NOTE: BUILD need not be defined at all, which case it behaves like it is set
+#       to "full". This is to ensure backward compatibility.
+BUILD = full
+
+# Endianness : Allowed values = little | big
+ENDIAN = little
+
+# Format : Allowed values = COFF | ELF
+FORMAT = COFF
+
+# Platform: ti816x-evm (Netra) | ti814x-evm (Centaurus)
+PLATFORM = ti816x-evm
+
+# CORE
+CORE= c6xdsp
+
+# Platform memory: available external memory
+PLATFORM_MEM = 1024M
+
+#
+# Platform specific
+#
+CFLAGS_GLOBAL_ti816x-evm = -DTI_816X_BUILD -DPLATFORM_EVM_SI
+
+#
+# Core specific options - Cores of ti816x (Netra) and ti814x (Centaurus)
+#
+
+# m3video - Ducati - Core 0 (Cortex-M3)
+
+# Profile: Allowed values = debug | whole_program_debug 
+PROFILE_m3video = whole_program_debug
+CFLAGS_GLOBAL_m3video =  -g -ms --gcc -D___DSPBIOS___ -D___DUCATI_FW___ -DSYSLINK_USE_TILER -DMULTICHANNEL_OPT=1 
+LNKFLAGS_GLOBAL_m3video = -x --zero_init=off --retain=_Ipc_ResetVector 
+
+# m3vpss - Ducati - Core 1 (Cortex-M3)
+
+# Profile: Allowed values = debug | whole_program_debug 
+PROFILE_m3vpss = whole_program_debug
+CFLAGS_GLOBAL_m3vpss =  -g -ms --gcc -D___DSPBIOS___ -D___DUCATI_FW___ -DSYSLINK_USE_TILER -DMULTICHANNEL_OPT=1 
+LNKFLAGS_GLOBAL_m3vpss = -x --zero_init=off --retain=_Ipc_ResetVector 
+
+# a8host - Cortex-A8
+
+# Profile: Allowed values = debug 
+PROFILE_a8host = debug
+CFLAGS_GLOBAL_a8host = -c -x c -Wunused -Wall -g
+LNKFLAGS_GLOBAL_a8host = 
+
+# c6xdsp - DSP core
+# Profile: Allowed values = debug | whole_program_debug | release
+PROFILE_c6xdsp = debug
+CFLAGS_GLOBAL_c6xdsp =  -g 
+
+# Nothing beyond this point
diff --git a/makerules/common.mk b/makerules/common.mk
new file mode 100644 (file)
index 0000000..ff68a86
--- /dev/null
@@ -0,0 +1,209 @@
+# Filename: common.mk
+#
+# Common make file - This file has common rules and definitions that are common
+#                    across platforms/cores/ISAs/SoCs
+#
+# This file needs to change when:
+#     1. common rule/define has to be added or modified
+#
+
+#
+# Include make paths and options for all supported targets/platforms
+#
+
+include $(ROOTDIR)/makerules/build_config.mk
+include $(ROOTDIR)/makerules/env.mk
+include $(ROOTDIR)/makerules/platform.mk
+
+#.DEFAULT_GOAL := all
+
+.PHONY : all clean gendirs m3video m3vpss c6xdsp a8host
+
+all : $(CORE)
+
+# Define directories that are going to be created as a part of build process
+ifdef MODULE_NAME
+  ifeq ($($(MODULE_NAME)_PLATFORM_DEPENDENCY),yes)
+    ifeq ($($(MODULE_NAME)_CORE_DEPENDENCY),yes)
+      DEPENDENCY_SUB_PATH = $(PLATFORM)/$(CORE)
+    else
+      DEPENDENCY_SUB_PATH = $(PLATFORM)/$(ISA)
+    endif
+  else
+    ifeq ($($(MODULE_NAME)_CORE_DEPENDENCY),yes)
+      DEPENDENCY_SUB_PATH = $(CORE)
+    else
+      DEPENDENCY_SUB_PATH = $(ISA)
+    endif
+  endif
+endif
+
+ifeq ($(DEST_ROOT),)
+ ifdef MODULE_NAME
+  OBJDIR = obj/$(DEPENDENCY_SUB_PATH)/$(PROFILE_$(CORE))
+  LIBDIR = lib/$(DEPENDENCY_SUB_PATH)/$(PROFILE_$(CORE))
+ else
+  OBJDIR = obj/$(PLATFORM)/$(CORE)/$(PROFILE_$(CORE))
+  BINDIR = bin/$(PLATFORM)
+ endif
+else
+  ifdef MODULE_NAME
+    OBJDIR = $(DEST_ROOT)/$($(MODULE_NAME)_RELPATH)/obj/$(DEPENDENCY_SUB_PATH)/$(PROFILE_$(CORE))
+    LIBDIR = $(DEST_ROOT)/$($(MODULE_NAME)_RELPATH)/lib/$(DEPENDENCY_SUB_PATH)/$(PROFILE_$(CORE))
+  else
+    OBJDIR = $(DEST_ROOT)/$(APP_NAME)/obj/$(PLATFORM)/$(CORE)/$(PROFILE_$(CORE))
+    BINDIR = $(DEST_ROOT)/$(APP_NAME)/bin/$(PLATFORM)
+  endif
+endif
+
+CONFIGURO_DIRNAME = $(APP_NAME)_configuro
+ifeq ($(XDC_CFG_DIR),)
+ CONFIGURO_DIR = $(OBJDIR)/$(CONFIGURO_DIRNAME)
+ XDC_CFG_FILE_NAME = $(XDC_CFG_FILE_$(CORE))
+else
+ CONFIGURO_DIR = $(XDC_CFG_DIR)/configuro/$(PLATFORM)/$(CORE)/$(PROFILE_$(CORE))/$(CONFIGURO_DIRNAME)
+# XDC_CFG_FILE_NAME = $(XDC_CFG_DIR)/$(XDC_CFG_FILE_$(CORE))
+ XDC_CFG_FILE_NAME = $(XDC_CFG_FILE_$(CORE))
+endif
+
+DEPDIR = $(OBJDIR)/.deps
+DEPFILE = $(DEPDIR)/$(*F)
+
+# Create directories
+$(OBJDIR) :
+       $(MKDIR) -p $(OBJDIR)
+
+$(DEPDIR) :
+       $(MKDIR) -p $(DEPDIR)
+
+$(LIBDIR) :
+       $(MKDIR) -p $(LIBDIR)
+$(BINDIR) :
+       $(MKDIR) -p $(BINDIR)
+
+$(CONFIGURO_DIR) :
+       $(MKDIR) -p $(OBJDIR)
+       $(MKDIR) -p $(DEPDIR)
+       $(MKDIR) -p $(CONFIGURO_DIR)
+
+#
+# Common variables
+#
+
+# Assemble list of source file names
+SRCS = $(SRCS_COMMON) $(SRCS_$(CORE)) $(SRCS_$(SOC)) $(SRCS_$(PLATFORM))
+
+# Define search paths
+VPATH = $(SRCDIR)
+
+# Following 'if...' block is for an application.
+ifndef MODULE_NAME
+  # Derive list of all packages from each of the components needed by the app
+  PKG_LIST = $(foreach COMP,$(COMP_LIST_$(CORE)),$($(COMP)_PKG_LIST))
+
+  # For each of the packages (or modules), get a list of source files that are
+  # marked to be compiled in app stage of the build (or in the context in the app)
+  SRCS_APPSTG_FILES = $(foreach PKG, $(PKG_LIST), $($(PKG)_APP_STAGE_FILES))
+  # The app has to compile package cfg source files in its context. The name 
+  # of the file assumed is <MOD>_cfg.c under the top-level directory - i.e. 
+  # specified by <MOD>_PATH variable
+  #SRCS_CFG = $(addsuffix _cfg.c,$(PKG_LIST))
+  SRCS += $(SRCS_APPSTG_FILES)
+  PKG_PATHS = $(foreach PKG,$(PKG_LIST),$($(PKG)_PATH))
+  VPATH += $(PKG_PATHS)
+endif
+
+# Change the extension from C to $(OBJEXT) and also add path 
+OBJ_PATHS = $(patsubst %.c, $(OBJDIR)/%.$(OBJEXT), $(SRCS))
+
+# Assemble include paths here
+INCLUDE_EXTERNAL = $(foreach INCL,$(INCLUDE_EXERNAL_INTERFACES),$($(INCL)_INCLUDE))
+INCLUDE_ALL = $(CODEGEN_INCLUDE) $(INCDIR) $(INCLUDE_EXTERNAL)
+
+# Add prefix "-I" to each of the include paths in INCLUDE_ALL
+INCLUDES = $(addprefix -I,$(INCLUDE_ALL))
+
+# Create rule to "make" all packages
+.PHONY : $(PKG_LIST)
+$(PKG_LIST) : 
+       $(ECHO) \# Making $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$@...
+       $(MAKE) -C $($@_PATH)
+# Get libraries for all the packages
+# LIBS = $(foreach LIB,$(PKG_LIST),$(LIB).$(LIBEXT))
+define GET_COMP_DEPENDENCY_SUB_PATH
+  ifeq ($$($(1)_PLATFORM_DEPENDENCY),yes)
+    ifeq ($$($(1)_CORE_DEPENDENCY),yes)
+      $(1)_DEPSUBPATH = $(PLATFORM)/$(CORE)
+    else
+      $(1)_DEPSUBPATH = $(PLATFORM)/$(ISA)
+    endif
+   else
+    ifeq ($$($(1)_CORE_DEPENDENCY),yes)
+      $(1)_DEPSUBPATH = $(CORE)
+    else
+      $(1)_DEPSUBPATH = $(ISA)
+    endif
+  endif
+endef
+
+$(foreach LIB,$(PKG_LIST),$(eval $(call GET_COMP_DEPENDENCY_SUB_PATH,$(LIB))))
+
+ifeq ($(DEST_ROOT),)
+LIB_PATHS = $(foreach LIB,$(PKG_LIST),$($(LIB)_PATH)/lib/$($(LIB)_DEPSUBPATH)/$(PROFILE_$(CORE))/$(LIB).$(LIBEXT))
+else
+LIB_PATHS = $(foreach LIB,$(PKG_LIST),$(DEST_ROOT)/$($(LIB)_RELPATH)/lib/$($(LIB)_DEPSUBPATH)/$(PROFILE_$(CORE))/$(LIB).$(LIBEXT))
+endif
+
+# XDC Specific defines
+ifneq ($(XDC_CFG_FILE_$(CORE)),)
+  ifeq ($(PROFILE_$(CORE)),debug)
+    CFG_CFILENAMEPART_XDC =$(EXEEXT)
+  endif
+  ifeq ($(PROFILE_$(CORE)),whole_program_debug)
+    CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+    CFG_LNKFILENAMEPART_XDC=_x
+  endif
+  CFG_CFILE_XDC =$(patsubst %.cfg,%_$(CFG_CFILENAMEPART_XDC).c,$(XDC_CFG_FILE_$(CORE)))
+  CFG_C_XDC = $(addprefix $(CONFIGURO_DIR)/package/cfg/,$(CFG_CFILE_XDC))
+  XDCLNKCMD_FILE =$(patsubst %.c, %$(CFG_LNKFILENAMEPART_XDC).xdl, $(CFG_C_XDC))
+  CFG_COBJ_XDC = $(patsubst %.c,%.$(OBJEXT),$(CFG_CFILE_XDC))
+#  OBJ_PATHS += $(CFG_COBJ_XDC)
+  LNKCMD_FILE = $(CONFIGURO_DIR)/linker_mod.cmd
+  SPACE := 
+  SPACE += 
+  XDC_GREP_STRING = $(CONFIGURO_DIRNAME)
+#  XDC_GREP_STRING = $(subst $(SPACE),\|,$(COMP_LIST_$(CORE)))
+#  XDC_GREP_STRING += \|$(CONFIGURO_DIRNAME)
+endif
+
+# Include make rules for ISA that is built in this iteration
+#   eg: rules_m3.mk
+include $(ROOTDIR)/makerules/rules_$(ISA).mk
+
+ifdef MODULE_NAME
+# Rules for module; this iteration is for a module
+
+# Clean Object and Library (archive) directories
+clean :
+       $(RM) -f $(OBJDIR)/* $(DEPDIR)/* $(LIBDIR)/*
+
+# Create dependencies list to ultimately create module archive library file
+$(CORE) : $(OBJDIR) $(DEPDIR) $(LIBDIR) $(LIBDIR)/$(MODULE_NAME).$(LIBEXT)
+
+else
+# Rules for application; this iteration is for an app
+
+# Clean Object, Binary and Configuro generated directories
+clean :
+       $(RM) -rf $(CONFIGURO_DIR)
+       $(RM) -f $(OBJDIR)/* $(DEPDIR)/*
+
+# Create dependencies list to ultimately create application executable binary
+$(CORE) : $(OBJDIR) $(BINDIR) $(DEPDIR) $(CONFIGURO_DIR) $(PKG_LIST) $(BINDIR)/$(APP_NAME)_$(CORE)_$(PROFILE_$(CORE)).$(EXEEXT)
+
+endif
+
+# Nothing beyond this point
+
diff --git a/makerules/docs/makerules_spec.doc b/makerules/docs/makerules_spec.doc
new file mode 100644 (file)
index 0000000..0988319
Binary files /dev/null and b/makerules/docs/makerules_spec.doc differ
diff --git a/makerules/env.mk b/makerules/env.mk
new file mode 100644 (file)
index 0000000..fccbab9
--- /dev/null
@@ -0,0 +1,109 @@
+# File: env.mk. This file contains all the paths and other ENV variables
+
+#
+# Module paths
+#
+
+# Directory where all internal software packages are located; typically 
+#  those that are checked into version controlled repository. In this case all
+#  the OMX components and SDK/OMX demo.
+INTERNAL_SW_ROOT = E:/EDMA/MAKEFI~1/WITHMA~1/testinghis/edma/edma3_lld_02_10_04_01
+
+# Directory where all external (imported) software packages are located; typically 
+#  those that are NOT checked into version controlled repository. In this case,
+#  compiler tool chains, BIOS, XDC, Syslink, IPC, FC, CE, drivers, codecs, etc.
+EXTERNAL_SW_ROOT = E:/EDMA/MAKEFI~1/WITHMA~1/testinghis/edma/tools
+
+# Destination root directory.
+#   - specify the directory where you want to place the object, archive/library,
+#     binary and other generated files in a different location than source tree
+#   - or leave it blank to place then in the same tree as the source
+#DEST_ROOT = E:/Temp/sdk5008_outfiles
+
+# Utilities directory. This is required only if the build machine is Windows.
+#   - specify the installation directory of utility which supports POSIX commands
+#     (eg: Cygwin installation or MSYS installation).
+UTILS_INSTALL_DIR = E:/EDMA/MAKEFI~1/WITHMA~1/testinghis/edma/tools/xdctools_3_20_02_59
+
+# Set path separator, etc based on the OS
+ifeq ($(OS),Windows_NT)
+  PATH_SEPARATOR = ;
+  UTILSPATH = $(UTILS_INSTALL_DIR)/bin/
+else 
+  # else, assume it is linux
+  PATH_SEPARATOR = :
+endif
+
+# BIOS
+bios_PATH = $(EXTERNAL_SW_ROOT)/bios_6_30_02_42
+bios_INCLUDE = $(bios_PATH)/packages
+
+# XDC
+xdc_PATH = $(EXTERNAL_SW_ROOT)/xdctools_3_20_02_59
+xdc_INCLUDE = $(xdc_PATH)/packages
+
+# EDMA3 LLD
+edma3_lld_PATH = $(INTERNAL_SW_ROOT)
+include $(edma3_lld_PATH)/packages/component.mk
+
+#
+# Tools paths
+#
+# Cortex-M3
+
+CODEGEN_PATH_M3 = $(EXTERNAL_SW_ROOT)/TMS470~1.3
+
+# Cortex-A8
+CODEGEN_PATH_A8 = $(EXTERNAL_SW_ROOT)/CodeSourcery/2009q1-203
+
+# DSP - Since same toolchain does not support COFF and ELF, there are two entries
+#        This would go away when one version supports both formats
+CODEGEN_PATH_DSP = $(EXTERNAL_SW_ROOT)/C6000C~1.0
+CODEGEN_PATH_DSPELF = $(EXTERNAL_SW_ROOT)/C6000C~1.0A1
+
+
+# Commands commonly used within the make files
+
+RM = $(UTILSPATH)rm
+RMDIR = $(UTILSPATH)rm -rf
+MKDIR = $(UTILSPATH)mkdir
+ECHO = @$(UTILSPATH)echo
+# MAKE = $(UTILSPATH)make
+EGREP = $(UTILSPATH)egrep
+CP = $(UTILSPATH)cp
+
+# This is to avoid using full blown cygwin - chmod is really needed only linux
+ifeq ($(OS),Windows_NT)
+CHMOD = @echo
+else
+CHMOD = $(UTILSPATH)chmod
+endif
+
+#
+# XDC specific ENV variables
+#
+
+# XDC Config.bld file (required for configuro) ; Derives from top-level omx_PATH
+CONFIG_BLD_XDC_c674 = $(edma3_lld_PATH)/packages/_config.bld
+CONFIG_BLD_XDC_c64p = $(edma3_lld_PATH)/packages/_config.bld
+
+XDCPATH = $(bios_PATH)/packages;$(xdc_PATH)/packages;$(edma3_lld_PATH)/packages;
+export XDCPATH
+
+XDCROOT = $(xdc_PATH)
+XDCTOOLS = $(xdc_PATH)
+export XDCROOT
+export XDCTOOLS
+
+TMS470_CGTOOLS = $(CODEGEN_PATH_M3)
+CGTOOLS = $(CODEGEN_PATH_DSP)
+CGTOOLS_ELF = $(CODEGEN_PATH_DSPELF)
+export TMS470CGTOOLPATH
+
+CODESOURCERYCGTOOLS = $(CODEGEN_PATH_A8)
+export CODESOURCERYCGTOOLS
+
+PATH += $(PATH_SEPARATOR)$(xdc_PATH)$(PATH_SEPARATOR)$(CODEGEN_PATH_M3)/bin
+export PATH
+
+# Nothing beyond this point
diff --git a/makerules/platform.mk b/makerules/platform.mk
new file mode 100644 (file)
index 0000000..b907138
--- /dev/null
@@ -0,0 +1,232 @@
+# Filename: platforms.mk
+#
+# Platforms make file - Platform/SoC/targets are defined/derived in this file
+# 
+# This file needs to change when:
+#     1. a new platform/SoC is added, which also might have its own cores/ISAs
+#
+
+#
+# Derive SOC from PLATFORM
+#
+
+# ti816x (Netra) catalog EVM
+ifeq ($(PLATFORM),ti816x-evm)
+ SOC = ti816x
+ ifeq ($(CORE),c6xdsp)
+  PLATFORM_XDC = "ti.platforms.evmDM8168"
+ endif
+endif
+
+# ti816x (Netra) Simulator
+ifeq ($(PLATFORM),ti816x-sim)
+ SOC = ti816x
+ ifeq ($(CORE),c6xdsp)
+  PLATFORM_XDC = "ti.platforms.simDM8168"
+ endif
+endif
+
+# ti814x (Centaurus) Catalog EVM
+ifeq ($(PLATFORM),ti814x-evm)
+ SOC = ti814x
+ ifeq ($(CORE),c6xdsp)
+  PLATFORM_XDC = "ti.platforms.evmDM8148"
+ endif
+endif
+
+# c6472 (Tomahawk) EVM
+ifeq ($(PLATFORM),c6472-evm)
+ SOC = c6472
+ PLATFORM_XDC = "ti.platforms.evm6472"
+endif
+
+# tci6486 (Tomahawk) EVM
+ifeq ($(PLATFORM),tci6486-evm)
+ SOC = c6472
+ PLATFORM_XDC = "ti.platforms.evmTCI6486"
+endif
+
+# tci6498 (Nyquist) Simulator - This might change
+ifeq ($(PLATFORM),tci6498-sim)
+ SOC = c6498
+ PLATFORM_XDC = "ti.platforms.simTCI6498"
+endif
+
+# omapl138 (Freon) EVM
+ifeq ($(PLATFORM),omapl138-evm)
+ SOC = omapl138
+ PLATFORM_XDC = "ti.platforms.evmOMAPL138"
+endif
+
+# c6748 (Freon) EVM
+ifeq ($(PLATFORM),c6748-evm)
+ SOC = omapl138
+ PLATFORM_XDC = "ti.platforms.evm6748"
+endif
+
+# da830 (Primus) EVM
+ifeq ($(PLATFORM),da830-evm)
+ SOC = omapl137
+ PLATFORM_XDC = "ti.platforms.evmDA830"
+endif
+
+# Derive Target/ISA from CORE
+
+# m3vpss
+ifeq ($(CORE),m3vpss)
+ ISA = m3
+endif
+
+# m3video
+ifeq ($(CORE),m3video)
+ ISA = m3
+endif
+
+# a8host
+ifeq ($(CORE),a8host)
+ ISA = a8
+endif
+
+# c6xdsp
+ifeq ($(CORE),c6xdsp)
+ ifeq ($(SOC),ti816x)
+  ISA = c674
+ endif
+ ifeq ($(SOC),ti814x)
+  ISA = c674
+ endif
+ ifeq ($(SOC),omapl137)
+  ISA = c674
+ endif
+ ifeq ($(SOC),omapl138)
+  ISA = c674
+ endif
+ ifeq ($(SOC),c6472)
+  ISA = c64p
+ endif
+ # Note: The below is for Nyqyist Simulator - might change
+ ifeq ($(SOC),c6498)
+  ISA = c64p
+ endif
+endif
+
+
+#
+# Derive XDC/ISA specific settings 
+#
+
+ifeq ($(ISA),m3)
+  ifeq ($(FORMAT),ELF)
+    TARGET_XDC = ti.targets.arm.elf.M3
+    FORMAT_EXT = e
+  else
+    TARGET_XDC = ti.targets.arm.M3
+  endif
+  ifeq ($(CORE),m3video)
+    PLATFORM_XDC = "ti.platforms.generic:DucatiPlatform_Core0"
+  else
+    PLATFORM_XDC = "ti.platforms.generic:DucatiPlatform_Core1"
+  endif
+  
+  # If ENDIAN is set to "big", set ENDIAN_EXT to "e", that would be used in
+  #    in the filename extension of object/library/executable files
+  ifeq ($(ENDIAN),big)
+    ENDIAN_EXT = e
+  endif
+
+  # Define the file extensions
+  OBJEXT = o$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+  LIBEXT = a$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+  EXEEXT = x$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+  ASMEXT = s$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+endif
+
+ifeq ($(ISA),c674)
+  ifeq ($(FORMAT),ELF)
+    TARGET_XDC = ti.targets.elf.C674
+    FORMAT_EXT = e
+  else
+    TARGET_XDC = ti.targets.C674
+  endif
+  
+  # If ENDIAN is set to "big", set ENDIAN_EXT to "e", that would be used in
+  #    in the filename extension of object/library/executable files
+  ifeq ($(ENDIAN),big)
+    ENDIAN_EXT = e
+  endif
+
+  # Define the file extensions
+  OBJEXT = o$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+  LIBEXT = a$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+  EXEEXT = x$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+  ASMEXT = s$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+endif
+
+ifeq ($(ISA),c64p)
+  ifeq ($(FORMAT),ELF)
+   ifeq ($(ENDIAN),big)
+    TARGET_XDC = ti.targets.elf.C64P_big_endian
+   else
+    TARGET_XDC = ti.targets.elf.C64P
+   endif
+    FORMAT_EXT = e
+  else
+   ifeq ($(ENDIAN),big)
+    TARGET_XDC = ti.targets.C64P_big_endian
+   else
+    TARGET_XDC = ti.targets.C64P
+   endif
+  endif
+#  PLATFORM_XDC = "ti.platforms.generic:DucatiPlatform_Core0"
+  
+  # If ENDIAN is set to "big", set ENDIAN_EXT to "e", that would be used in
+  #    in the filename extension of object/library/executable files
+  ifeq ($(ENDIAN),big)
+    ENDIAN_EXT = e
+  endif
+
+  # Define the file extensions
+  OBJEXT = o$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+  LIBEXT = a$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+  EXEEXT = x$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+  ASMEXT = s$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+endif
+
+ifeq ($(ISA),a8)
+  TARGET_XDC = gnu.targets.arm.GCArmv5T
+  PLATFORM_XDC = "host.platforms.arm"
+  
+  # Define the file extensions
+  OBJEXT = ov5T
+  LIBEXT = av5T
+  EXEEXT = xv5T
+  ASMEXT = sv5T
+endif
+
+ifeq (sim,$(findstring sim,$(PLATFORM)))
+  OMX_PLATFORM = sim
+endif
+
+ifeq (ti816x-evm,$(findstring ti816x-evm,$(PLATFORM)))
+ # Don't know why platform define for XDC is separate for A8. TO DO.
+ ifeq ($(CORE),a8host)
+  OMX_PLATFORM = evmSi
+ else
+  OMX_PLATFORM = evmSi816X
+ endif
+endif
+
+ifeq ($(CORE),m3vpss)
+  CFGARGS_XDC = \"{mode: \\\"$(IPC_MODE)\\\", coreName: \\\"VPSS-M3\\\", tiler: \\\"DucatiTilerMemMgr\\\", platformMem: \\\"$(PLATFORM_MEM)\\\", maxResolution: \\\"$(MAX_RESOLUTION)\\\", omxBuildPlatform: \\\"$(OMX_PLATFORM)\\\"}\"
+endif
+ifeq ($(CORE),m3video)
+  CFGARGS_XDC = \"{mode: \\\"$(IPC_MODE)\\\", coreName:\\\"VIDEO-M3\\\", tiler: \\\"DucatiTilerMemMgr\\\", platformMem: \\\"$(PLATFORM_MEM)\\\", maxResolution: \\\"$(MAX_RESOLUTION)\\\", omxBuildPlatform: \\\"$(OMX_PLATFORM)\\\"}\"
+endif
+ifeq ($(CORE),c6xdsp)
+  CFGARGS_XDC = 
+endif
+ifeq ($(CORE),a8host)
+  CFGARGS_XDC = \"{mode: \\\"$(IPC_MODE)\\\", coreName:\\\"HOST\\\", tiler: \\\"NullTilerMemMgr\\\", platformMem: \\\"$(PLATFORM_MEM)\\\", maxResolution: \\\"$(MAX_RESOLUTION)\\\", omxBuildPlatform: \\\"$(OMX_PLATFORM)\\\"}\"
+endif
+
+# Nothing beyond this point
diff --git a/makerules/rules_a8.mk b/makerules/rules_a8.mk
new file mode 100644 (file)
index 0000000..2c9eca0
--- /dev/null
@@ -0,0 +1,141 @@
+# Filename: rules_a8.mk
+#
+# Make rules for A8 - This file has all the common rules and defines required
+#                     for Cortex-A8 ISA
+#
+# This file needs to change when:
+#     1. Code generation tool chain changes (currently it uses CodeSourcery)
+#     2. Internal switches (which are normally not touched) has to change
+#     3. XDC specific switches change
+#     4. a rule common for A8 ISA has to be added or modified
+
+# Set compiler/archiver/linker commands and include paths
+CODEGEN_INCLUDE = $(CODEGEN_PATH_A8)
+CC = $(CODEGEN_PATH_A8)/bin/arm-none-linux-gnueabi-gcc
+AR = $(CODEGEN_PATH_A8)/bin/arm-none-linux-gnueabi-ar
+LNK = $(CODEGEN_PATH_A8)/bin/arm-none-linux-gnueabi-ld
+
+# Internal CFLAGS - normally doesn't change
+CFLAGS_INTERNAL = -fPIC -fno-strict-aliasing -MD -MF $(DEPFILE).P -march=armv5t -Dfar= -D_DEBUG_=1 -DMULTICHANNEL_OPT=1
+CFLAGS_DIROPTS = 
+
+# XDC specific CFLAGS 
+CFLAGS_XDCINTERNAL = -Dxdc_target_name__=GCArmv5T -Dxdc_target_types__=gnu/targets/arm/std.h  -Dxdc_bld__profile_$(PROFILE_$(CORE))  -Dxdc_bld__vers_1_0_4_3_3 
+LNKFLAGS_INTERNAL_PROFILE = 
+
+# Following 'if...' block is for an application; to add a #define for each
+#   component in the build. This is required to know - at compile time - which
+#   components are on which core.
+ifndef MODULE_NAME
+  # Derive list of all packages from each of the components needed by the app
+  PKG_LIST_LOCAL = $(foreach COMP,$(COMP_LIST_$(CORE)),$($(COMP)_PKG_LIST))
+  
+  # Defines for the app and cfg source code to know which components/packages
+  # are included in the build for the local CORE...
+  CFLAGS_APP_DEFINES = $(foreach PKG,$(PKG_LIST_LOCAL),-D_LOCAL_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_LOCAL),-D_BUILD_$(PKG)_)
+  
+  ifeq ($(CORE),m3vpss)
+    PKG_LIST_REMOTE = $(foreach COMP,$(COMP_LIST_m3video),$($(COMP)_PKG_LIST))
+    CFLAGS_APP_DEFINES += -D_LOCAL_CORE_m3vpss_
+  endif
+  ifeq ($(CORE),m3video)
+    PKG_LIST_REMOTE = $(foreach COMP,$(COMP_LIST_m3vpss),$($(COMP)_PKG_LIST))
+    CFLAGS_APP_DEFINES += -D_LOCAL_CORE_m3video_
+  endif
+  ifeq ($(CORE),a8host)
+    PKG_LIST_REMOTE = $(foreach COMP,$(COMP_LIST_m3video),$($(COMP)_PKG_LIST))
+    PKG_LIST_REMOTE += $(foreach COMP,$(COMP_LIST_m3vpss),$($(COMP)_PKG_LIST))
+    CFLAGS_APP_DEFINES += -D_LOCAL_CORE_a8host_
+  endif
+
+  # Defines for the app and cfg source code to know which components/packages
+  # are included in the build for the remote CORE...
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_REMOTE),-D_REMOTE_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_REMOTE),-D_BUILD_$(PKG)_)
+endif
+
+# Assemble CFLAGS from all other CFLAGS definitions
+_CFLAGS = $(CFLAGS_GLOBAL_$(CORE)) $(CFLAGS_INTERNAL) $(CFLAGS_XDCINTERNAL) $(CFLAGS_LOCAL_COMMON) $(CFLAGS_LOCAL_$(CORE)) $(CFLAGS_LOCAL_$(PLATFORM)) $(CFLAGS_LOCAL_$(SOC)) $(CFLAGS_APP_DEFINES) $(CFLAGS_COMP_COMMON) $(CFLAGS_GLOBAL_$(PLATFORM))
+
+# Object file creation
+# The first $(CC) generates the dependency make files for each of the objects
+# The second $(CC) compiles the source to generate object
+$(OBJ_PATHS): $(OBJDIR)/%.$(OBJEXT): %.c
+       $(ECHO) \# Compiling $< to $@ ...
+       $(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -o $(OBJDIR)/$(basename $(notdir $<)).$(OBJEXT) $<
+
+# Archive flags - normally doesn't change
+ARFLAGS = cr
+
+# Archive/library file creation
+$(LIBDIR)/$(MODULE_NAME).$(LIBEXT) : $(OBJ_PATHS)
+       $(ECHO) \#
+       $(ECHO) \# Archiving $(OBJ_PATHS) into $@...
+       $(ECHO) \#
+       $(AR) $(ARFLAGS) $@ $(OBJ_PATHS)
+
+# Linker options and rules
+LNKFLAGS_INTERNAL_COMMON =  -lpthread -lrt -L$(CODEGEN_PATH_A8)/arm-none-linux-gnueabi/lib
+
+# Assemble Linker flags from all other LNKFLAGS definitions
+_LNKFLAGS = $(LNKFLAGS_INTERNAL_COMMON) $(LNKFLAGS_INTERNAL_PROFILE) $(LNKFLAGS_GLOBAL_$(CORE)) $(LNKFLAGS_LOCAL_COMMON) $(LNKFLAGS_LOCAL_$(CORE)) 
+
+# Path of the RTS library - normally doesn't change for a given tool-chain
+RTSLIB_PATH = 
+LIB_PATHS += 
+
+LNK_LIBS = $(addprefix -l,$(LIB_PATHS))
+# Linker - to create executable file 
+$(BINDIR)/$(APP_NAME)_$(CORE)_$(PROFILE_$(CORE)).$(EXEEXT) : $(OBJ_PATHS) $(LIB_PATHS) $(LNKCMD_FILE) $(OBJDIR)/$(CFG_COBJ_XDC)
+       $(ECHO) \# Linking into $@
+       $(ECHO) \#
+#      $(LNK) $(OBJ_PATHS) $(OBJDIR)/$(CFG_COBJ_XDC) $(LNKCMD_FILE) $(_LNKFLAGS) -o $@ -Map $@.map $(LNK_LIBS)
+       $(CC) $(OBJ_PATHS) $(OBJDIR)/$(CFG_COBJ_XDC) $(LIB_PATHS) $(LNKCMD_FILE) $(_LNKFLAGS) -o $@
+       $(ECHO) \#
+       $(ECHO) \# $@ created.
+       $(ECHO) \#
+
+# XDC specific - assemble XDC-Configuro command
+CONFIGURO_CMD = $(xdc_PATH)/xs xdc.tools.configuro --generationOnly -o $(CONFIGURO_DIR) -t $(TARGET_XDC) -p $(PLATFORM_XDC) \
+               --cfgArgs $(CFGARGS_XDC) -r $(PROFILE_$(CORE)) -b $(CONFIG_BLD_XDC_$(ISA)) $(XDC_CFG_FILE_NAME)
+_XDC_GREP_STRING = \"$(XDC_GREP_STRING)\"
+EGREP_CMD = $(EGREP) -ivw $(XDC_GREP_STRING) $(XDCLNKCMD_FILE)
+
+# Invoke configuro for the rest of the components
+#  NOTE: 1. String handling is having issues with various make versions when the 
+#           cammand is directly tried to be given below. Hence, as a work-around, 
+#           the command is re-directed to a file (shell or batch file) and then 
+#           executed
+#        2. The linker.cmd file generated, includes the libraries generated by
+#           XDC. An egrep to search for these and omit in the .cmd file is added
+#           after configuro is done
+#$(CFG_CFILE_XDC) : $(XDC_CFG_FILE)
+xdc_configuro : $(XDC_CFG_FILE)
+       $(ECHO) \# Invoking configuro...
+       $(ECHO) -e $(CONFIGURO_CMD) > $(DEST_ROOT)/maketemp_configuro_cmd_$(CORE).bat
+       $(CHMOD) a+x $(DEST_ROOT)/maketemp_configuro_cmd_$(CORE).bat
+       $(DEST_ROOT)/maketemp_configuro_cmd_$(CORE).bat
+#      $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)
+#      $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat
+#      ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)
+       $(EGREP_CMD) > $(LNKCMD_FILE)
+#      $(EGREP) -iv "$(XDC_GREP_STRING)" $(XDCLNKCMD_FILE) > $(LNKCMD_FILE)
+       $(ECHO) \# Configuro done!
+
+$(LNKCMD_FILE) :
+#      $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)
+#      $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat
+#      ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)
+#      $(EGREP_CMD) > $(LNKCMD_FILE)
+ifndef MODULE_NAME
+$(OBJDIR)/$(CFG_COBJ_XDC) : $(CFG_C_XDC)
+       $(ECHO) \# Compiling generated $< to $@ ...
+       $(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -o $(OBJDIR)/$(CFG_COBJ_XDC) $(CFG_C_XDC)
+endif
+
+# Include dependency make files that were generated by $(CC)
+-include $(SRCS:%.c=$(DEPDIR)/%.P)
+
+# Nothing beyond this point
diff --git a/makerules/rules_c64p.mk b/makerules/rules_c64p.mk
new file mode 100644 (file)
index 0000000..62576b3
--- /dev/null
@@ -0,0 +1,222 @@
+# Filename: rules_c64p.mk
+#
+# Make rules for c64p - This file has all the common rules and defines required
+#                     for DSP c64+ ISA
+#
+# This file needs to change when:
+#     1. Code generation tool chain changes (currently it uses TI CGT)
+#     2. Internal switches (which are normally not touched) has to change
+#     3. XDC specific switches change
+#     4. a rule common for c64p ISA has to be added or modified
+
+# Set compiler/archiver/linker commands and include paths - Currently different
+#  for ELF and COFF. In a future release of the toolchain, it would merge.
+ifeq ($(FORMAT),COFF)
+ CODEGEN_PATH = $(CODEGEN_PATH_DSP)
+ CODEGEN_INCLUDE = $(CODEGEN_PATH_DSP)/include
+ CC = $(CODEGEN_PATH_DSP)/bin/cl6x
+ AR = $(CODEGEN_PATH_DSP)/bin/ar6x
+ LNK = $(CODEGEN_PATH_DSP)/bin/lnk6x
+endif
+ifeq ($(FORMAT),ELF)
+ CODEGEN_PATH = $(CODEGEN_PATH_DSPELF)
+ CODEGEN_INCLUDE = $(CODEGEN_PATH_DSPELF)/include
+ CC = $(CODEGEN_PATH_DSPELF)/bin/cl6x
+ AR = $(CODEGEN_PATH_DSPELF)/bin/ar6x
+ LNK = $(CODEGEN_PATH_DSPELF)/bin/lnk6x
+endif
+
+# Derive a part of RTS Library name based on ENDIAN: little/big
+ifeq ($(ENDIAN),little)
+  #RTSLIB_ENDIAN = 
+  XDCINTERNAL_DEFINES += -Dxdc_target_name__=C64P
+else
+  CSWITCH_ENDIAN = -me
+  RTSLIB_ENDIAN = e
+  XDCINTERNAL_DEFINES += -DBIG_ENDIAN_MODE -Dxdc_target_name__=C64P_big_endian
+endif
+
+# Derive compiler switch and part of RTS Library name based on FORMAT: COFF/ELF
+ifeq ($(FORMAT),COFF)
+  CSWITCH_FORMAT = 
+  #RTSLIB_FORMAT = 
+  XDCINTERNAL_DEFINES += -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__vers_1_0_7_0_0
+endif
+ifeq ($(FORMAT),ELF)
+  CSWITCH_FORMAT = --abi=elfabi 
+  RTSLIB_FORMAT = _elf
+  XDCINTERNAL_DEFINES += -Dxdc_target_types__=ti/targets/elf/std.h -Dxdc_bld__vers_1_0_7_2_0_10271
+endif
+
+# XDC Specific defines
+ifneq ($(XDC_CFG_FILE_$(CORE)),)
+  ifeq ($(PROFILE_$(CORE)),debug)
+    CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)64p$(RTSLIB_ENDIAN)
+  endif
+  ifeq ($(PROFILE_$(CORE)),release)
+    CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)64p$(RTSLIB_ENDIAN)
+  endif
+  ifeq ($(PROFILE_$(CORE)),whole_program_debug)
+    CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+    CFG_LNKFILENAMEPART_XDC=_x
+  endif
+  CFG_CFILE_XDC =$(patsubst %.cfg,%_$(CFG_CFILENAMEPART_XDC).c,$(notdir $(XDC_CFG_FILE_$(CORE))))
+  CFG_C_XDC = $(addprefix $(CONFIGURO_DIR)/package/cfg/,$(CFG_CFILE_XDC))
+  XDCLNKCMD_FILE =$(patsubst %.c, %$(CFG_LNKFILENAMEPART_XDC)_x.xdl, $(CFG_C_XDC))
+  CFG_COBJ_XDC = $(patsubst %.c,%.$(OBJEXT),$(CFG_CFILE_XDC))
+#  OBJ_PATHS += $(CFG_COBJ_XDC)
+  LNKCMD_FILE = $(CONFIGURO_DIR)/linker_mod.cmd
+  SPACE := 
+  SPACE += 
+  XDC_GREP_STRING = $(CONFIGURO_DIRNAME)
+#  XDC_GREP_STRING = $(subst $(SPACE),\|,$(COMP_LIST_$(CORE)))
+#  XDC_GREP_STRING += \|$(CONFIGURO_DIRNAME)
+endif
+
+# Internal CFLAGS - normally doesn't change
+CFLAGS_INTERNAL = -c -qq -pdsw225 -mv64p $(CSWITCH_FORMAT) $(CSWITCH_ENDIAN) -mo -eo.$(OBJEXT) -ea.$(ASMEXT)
+CFLAGS_DIROPTS = -fr=$(OBJDIR) -fs=$(OBJDIR)
+
+# CFLAGS based on profile selected
+ifeq ($(PROFILE_$(CORE)), debug)
+ CFLAGS_INTERNAL += --symdebug:dwarf
+ CFLAGS_XDCINTERNAL = -Dxdc_bld__profile_debug -D_DEBUG_=1 
+ ifndef MODULE_NAME
+  CFLAGS_XDCINTERNAL += -Dxdc_cfg__header__='$(CONFIGURO_DIR)/package/cfg/VpsAppMain_xem3.h' 
+ endif
+ LNKFLAGS_INTERNAL_PROFILE = 
+endif
+ifeq ($(PROFILE_$(CORE)), release)
+ CFLAGS_INTERNAL += -O2
+ CFLAGS_XDCINTERNAL = -Dxdc_bld__profile_release -DGENERIC
+ ifndef MODULE_NAME
+  CFLAGS_XDCINTERNAL += -Dxdc_cfg__header__='$(CONFIGURO_DIR)/package/cfg/VpsAppMain_pem3.h' 
+ endif
+ LNKFLAGS_INTERNAL_PROFILE = -o2
+# LNKFLAGS_INTERNAL_PROFILE = 
+endif
+CFLAGS_XDCINTERNAL += $(XDCINTERNAL_DEFINES)
+
+# Following 'if...' block is for an application; to add a #define for each
+#   component in the build. This is required to know - at compile time - which
+#   components are on which core.
+ifndef MODULE_NAME
+  # Derive list of all packages from each of the components needed by the app
+  PKG_LIST_M3_LOCAL = $(foreach COMP,$(COMP_LIST_$(CORE)),$($(COMP)_PKG_LIST))
+  
+  # Defines for the app and cfg source code to know which components/packages
+  # are included in the build for the local CORE...
+  CFLAGS_APP_DEFINES = $(foreach PKG,$(PKG_LIST_M3_LOCAL),-D_LOCAL_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_LOCAL),-D_BUILD_$(PKG)_)
+  
+  ifeq ($(CORE),m3vpss)
+    PKG_LIST_M3_REMOTE = $(foreach COMP,$(COMP_LIST_m3video),$($(COMP)_PKG_LIST))
+    CFLAGS_APP_DEFINES += -D_LOCAL_CORE_m3vpss_
+  endif
+  ifeq ($(CORE),m3video)
+    PKG_LIST_M3_REMOTE = $(foreach COMP,$(COMP_LIST_m3vpss),$($(COMP)_PKG_LIST))
+    CFLAGS_APP_DEFINES += -D_LOCAL_CORE_m3video_
+  endif
+  PKG_LIST_A8_REMOTE = $(foreach COMP,$(COMP_LIST_a8host),$($(COMP)_PKG_LIST))
+
+  # Defines for the app and cfg source code to know which components/packages
+  # are included in the build for the remote CORE...
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_REMOTE),-D_REMOTE_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_REMOTE),-D_BUILD_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_A8_REMOTE),-D_REMOTE_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_A8_REMOTE),-D_BUILD_$(PKG)_)
+endif
+
+# Assemble CFLAGS from all other CFLAGS definitions
+_CFLAGS = $(CFLAGS_INTERNAL) $(CFLAGS_GLOBAL_$(CORE)) $(CFLAGS_XDCINTERNAL) $(CFLAGS_LOCAL_COMMON) $(CFLAGS_LOCAL_$(CORE)) $(CFLAGS_LOCAL_$(PLATFORM)) $(CFLAGS_LOCAL_$(SOC)) $(CFLAGS_APP_DEFINES) $(CFLAGS_COMP_COMMON) $(CFLAGS_GLOBAL_$(PLATFORM))
+
+# Object file creation
+# The first $(CC) generates the dependency make files for each of the objects
+# The second $(CC) compiles the source to generate object
+$(OBJ_PATHS): $(OBJDIR)/%.$(OBJEXT): %.c
+       $(ECHO) \# Compiling $< to $@ ...
+       $(CC) -ppd=$(DEPFILE).P $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $<
+       $(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $<
+
+# Archive flags - normally doesn't change
+ARFLAGS = rq
+
+# Archive/library file creation
+$(LIBDIR)/$(MODULE_NAME).$(LIBEXT) : $(OBJ_PATHS)
+       $(ECHO) \#
+       $(ECHO) \# Archiving $(OBJ_PATHS) into $@...
+       $(ECHO) \#
+       $(AR) $(ARFLAGS) $@ $(OBJ_PATHS)
+
+# Linker options and rules
+LNKFLAGS_INTERNAL_COMMON = --warn_sections -q -e=_c_int00 --silicon_version=64+ -c 
+
+# Assemble Linker flags from all other LNKFLAGS definitions
+_LNKFLAGS = $(LNKFLAGS_INTERNAL_COMMON) $(LNKFLAGS_INTERNAL_PROFILE) $(LNKFLAGS_GLOBAL_$(CORE)) $(LNKFLAGS_LOCAL_COMMON) $(LNKFLAGS_LOCAL_$(CORE)) 
+
+# Path of the RTS library - normally doesn't change for a given tool-chain
+RTSLIB_PATH = $(CODEGEN_PATH)/lib/rts64plus$(RTSLIB_ENDIAN)$(RTSLIB_FORMAT).lib
+LIB_PATHS += $(RTSLIB_PATH)
+
+LNK_LIBS = $(addprefix -l,$(LIB_PATHS))
+ifeq ($(DEST_ROOT),)
+ TMPOBJDIR = .
+else
+ TMPOBJDIR = $(OBJDIR)
+endif
+# Linker - to create executable file
+$(BINDIR)/$(APP_NAME)_$(CORE)_$(PROFILE_$(CORE)).$(EXEEXT) : $(OBJ_PATHS) $(LIB_PATHS) $(LNKCMD_FILE) $(OBJDIR)/$(CFG_COBJ_XDC)
+       $(ECHO) \# Linking into $@
+       $(ECHO) \#
+       cd $(TMPOBJDIR) && $(LNK) $(_LNKFLAGS) $(OBJ_PATHS) $(OBJDIR)/$(CFG_COBJ_XDC) -l$(LNKCMD_FILE) sample_app/linker.cmd -o $@ -m $@.map $(LNK_LIBS)
+       $(ECHO) \#
+       $(ECHO) \# $@ created.
+       $(ECHO) \#
+
+# XDC specific - assemble XDC-Configuro command
+CONFIGURO_CMD = $(xdc_PATH)/xs xdc.tools.configuro --generationOnly -o $(CONFIGURO_DIR) -t $(TARGET_XDC) -p $(PLATFORM_XDC) \
+               -r whole_program -c $(CODEGEN_PATH) -b $(CONFIG_BLD_XDC_$(ISA)) $(XDC_CFG_FILE_NAME)
+_XDC_GREP_STRING = \"$(XDC_GREP_STRING)\"
+EGREP_CMD = $(EGREP) -ivw $(XDC_GREP_STRING) $(XDCLNKCMD_FILE)
+
+ifneq ($(DEST_ROOT),)
+ DEST_ROOT += /
+endif
+# Invoke configuro for the rest of the components
+#  NOTE: 1. String handling is having issues with various make versions when the 
+#           cammand is directly tried to be given below. Hence, as a work-around, 
+#           the command is re-directed to a file (shell or batch file) and then 
+#           executed
+#        2. The linker.cmd file generated, includes the libraries generated by
+#           XDC. An egrep to search for these and omit in the .cmd file is added
+#           after configuro is done
+#$(CFG_CFILE_XDC) : $(XDC_CFG_FILE)
+xdc_configuro : $(XDC_CFG_FILE)
+       $(ECHO) \# Invoking configuro...
+       $(ECHO) -e $(CONFIGURO_CMD) > $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat
+       $(CHMOD) a+x $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat
+       $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat
+       $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)
+#      $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat
+#      ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)
+#      $(EGREP_CMD) > $(LNKCMD_FILE)
+#      $(EGREP) -iv "$(XDC_GREP_STRING)" $(XDCLNKCMD_FILE) > $(LNKCMD_FILE)
+       $(ECHO) \# Configuro done!
+
+$(LNKCMD_FILE) :
+#      $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)
+#      $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat
+#      ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)
+#      $(EGREP_CMD) > $(LNKCMD_FILE)
+ifndef MODULE_NAME
+$(OBJDIR)/$(CFG_COBJ_XDC) : $(CFG_C_XDC)
+       $(ECHO) \# Compiling generated $< to $@ ...
+       $(CC) -ppd=$(DEPFILE).P $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $(CFG_C_XDC)
+       $(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $(CFG_C_XDC)
+endif
+
+# Include dependency make files that were generated by $(CC)
+-include $(SRCS:%.c=$(DEPDIR)/%.P)
+
+# Nothing beyond this point
diff --git a/makerules/rules_c674.mk b/makerules/rules_c674.mk
new file mode 100644 (file)
index 0000000..eb99948
--- /dev/null
@@ -0,0 +1,222 @@
+# Filename: rules_c674.mk
+#
+# Make rules for c674 - This file has all the common rules and defines required
+#                     for DSP - c674 ISA
+#
+# This file needs to change when:
+#     1. Code generation tool chain changes (currently it uses TI CGT)
+#     2. Internal switches (which are normally not touched) has to change
+#     3. XDC specific switches change
+#     4. a rule common for c674 ISA has to be added or modified
+
+# Set compiler/archiver/linker commands and include paths - Currently different
+#  for ELF and COFF. In a future release of the toolchain, it would merge.
+ifeq ($(FORMAT),COFF)
+ CODEGEN_PATH = $(CODEGEN_PATH_DSP)
+ CODEGEN_INCLUDE = $(CODEGEN_PATH_DSP)/include
+ CC = $(CODEGEN_PATH_DSP)/bin/cl6x 
+ AR = $(CODEGEN_PATH_DSP)/bin/ar6x
+ LNK = $(CODEGEN_PATH_DSP)/bin/lnk6x
+endif
+ifeq ($(FORMAT),ELF)
+ CODEGEN_PATH = $(CODEGEN_PATH_DSPELF)
+ CODEGEN_INCLUDE = $(CODEGEN_PATH_DSPELF)/include
+ CC = $(CODEGEN_PATH_DSPELF)/bin/cl6x 
+ AR = $(CODEGEN_PATH_DSPELF)/bin/ar6x
+ LNK = $(CODEGEN_PATH_DSPELF)/bin/lnk6x
+endif
+
+
+# Derive a part of RTS Library name based on ENDIAN: little/big
+ifeq ($(ENDIAN),little)
+  #RTSLIB_ENDIAN =
+else
+  RTSLIB_ENDIAN = e
+endif
+
+# Derive compiler switch and part of RTS Library name based on FORMAT: COFF/ELF
+ifeq ($(FORMAT),COFF)
+  CSWITCH_FORMAT = 
+  #RTSLIB_FORMAT = 
+  XDCINTERNAL_DEFINES = -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__vers_1_0_7_0_0
+endif
+ifeq ($(FORMAT),ELF)
+  CSWITCH_FORMAT = --abi=elfabi 
+  RTSLIB_FORMAT = _elf
+  XDCINTERNAL_DEFINES = -Dxdc_target_types__=ti/targets/elf/std.h -Dxdc_bld__vers_1_0_7_2_0_10271
+endif
+
+# XDC Specific defines
+ifneq ($(XDC_CFG_FILE_$(CORE)),)
+  ifeq ($(PROFILE_$(CORE)),debug)
+    CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)674
+  endif
+  ifeq ($(PROFILE_$(CORE)),release)
+    CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)674
+  endif
+  ifeq ($(PROFILE_$(CORE)),whole_program_debug)
+    CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
+    CFG_LNKFILENAMEPART_XDC=_x
+  endif
+  CFG_CFILE_XDC =$(patsubst %.cfg,%_$(CFG_CFILENAMEPART_XDC).c,$(notdir $(XDC_CFG_FILE_$(CORE))))
+  CFG_C_XDC = $(addprefix $(CONFIGURO_DIR)/package/cfg/,$(CFG_CFILE_XDC))
+  XDCLNKCMD_FILE =$(patsubst %.c, %$(CFG_LNKFILENAMEPART_XDC)_x.xdl, $(CFG_C_XDC))
+  CFG_COBJ_XDC = $(patsubst %.c,%.$(OBJEXT),$(CFG_CFILE_XDC))
+#  OBJ_PATHS += $(CFG_COBJ_XDC)
+  LNKCMD_FILE = $(CONFIGURO_DIR)/linker_mod.cmd
+  SPACE := 
+  SPACE += 
+  XDC_GREP_STRING = $(CONFIGURO_DIRNAME)
+#  XDC_GREP_STRING = $(subst $(SPACE),\|,$(COMP_LIST_$(CORE)))
+#  XDC_GREP_STRING += \|$(CONFIGURO_DIRNAME)
+endif
+
+# Internal CFLAGS - normally doesn't change
+CFLAGS_INTERNAL = -c -qq -pdsw225 -mv6740 $(CSWITCH_FORMAT) -mo -eo.$(OBJEXT) -ea.$(ASMEXT)
+CFLAGS_DIROPTS = -fr=$(OBJDIR) -fs=$(OBJDIR)
+
+# CFLAGS based on profile selected
+ifeq ($(PROFILE_$(CORE)), debug)
+ CFLAGS_INTERNAL += --symdebug:dwarf
+ CFLAGS_XDCINTERNAL = -Dxdc_target_name__=C674  -Dxdc_bld__profile_debug -D_DEBUG_=1 
+ ifndef MODULE_NAME
+  CFLAGS_XDCINTERNAL += -Dxdc_cfg__header__='$(CONFIGURO_DIR)/package/cfg/VpsAppMain_xem3.h' 
+ endif
+ LNKFLAGS_INTERNAL_PROFILE = 
+endif
+ifeq ($(PROFILE_$(CORE)), release)
+ CFLAGS_INTERNAL += -O2
+ CFLAGS_XDCINTERNAL = -Dxdc_target_name__=C674 -Dxdc_bld__profile_release -DGENERIC
+ ifndef MODULE_NAME
+  CFLAGS_XDCINTERNAL += -Dxdc_cfg__header__='$(CONFIGURO_DIR)/package/cfg/VpsAppMain_pem3.h' 
+ endif
+ LNKFLAGS_INTERNAL_PROFILE = -o2
+# LNKFLAGS_INTERNAL_PROFILE = 
+endif
+CFLAGS_XDCINTERNAL += $(XDCINTERNAL_DEFINES)
+
+# Following 'if...' block is for an application; to add a #define for each
+#   component in the build. This is required to know - at compile time - which
+#   components are on which core.
+ifndef MODULE_NAME
+  # Derive list of all packages from each of the components needed by the app
+  PKG_LIST_M3_LOCAL = $(foreach COMP,$(COMP_LIST_$(CORE)),$($(COMP)_PKG_LIST))
+  
+  # Defines for the app and cfg source code to know which components/packages
+  # are included in the build for the local CORE...
+  CFLAGS_APP_DEFINES = $(foreach PKG,$(PKG_LIST_M3_LOCAL),-D_LOCAL_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_LOCAL),-D_BUILD_$(PKG)_)
+  
+  ifeq ($(CORE),m3vpss)
+    PKG_LIST_M3_REMOTE = $(foreach COMP,$(COMP_LIST_m3video),$($(COMP)_PKG_LIST))
+    CFLAGS_APP_DEFINES += -D_LOCAL_CORE_m3vpss_
+  endif
+  ifeq ($(CORE),m3video)
+    PKG_LIST_M3_REMOTE = $(foreach COMP,$(COMP_LIST_m3vpss),$($(COMP)_PKG_LIST))
+    CFLAGS_APP_DEFINES += -D_LOCAL_CORE_m3video_
+  endif
+  PKG_LIST_A8_REMOTE = $(foreach COMP,$(COMP_LIST_a8host),$($(COMP)_PKG_LIST))
+
+  # Defines for the app and cfg source code to know which components/packages
+  # are included in the build for the remote CORE...
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_REMOTE),-D_REMOTE_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_REMOTE),-D_BUILD_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_A8_REMOTE),-D_REMOTE_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_A8_REMOTE),-D_BUILD_$(PKG)_)
+endif
+
+# Assemble CFLAGS from all other CFLAGS definitions
+_CFLAGS = $(CFLAGS_INTERNAL) $(CFLAGS_GLOBAL_$(CORE)) $(CFLAGS_XDCINTERNAL) $(CFLAGS_LOCAL_COMMON) $(CFLAGS_LOCAL_$(CORE)) $(CFLAGS_LOCAL_$(PLATFORM)) $(CFLAGS_LOCAL_$(SOC)) $(CFLAGS_APP_DEFINES) $(CFLAGS_COMP_COMMON) $(CFLAGS_GLOBAL_$(PLATFORM))
+
+# Object file creation
+# The first $(CC) generates the dependency make files for each of the objects
+# The second $(CC) compiles the source to generate object
+$(OBJ_PATHS): $(OBJDIR)/%.$(OBJEXT): %.c
+       $(ECHO) \# Compiling $< to $@ ...
+       $(CC) -ppd=$(DEPFILE).P $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $<
+       $(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $<
+
+# Archive flags - normally doesn't change
+ARFLAGS = rq
+
+# Archive/library file creation
+$(LIBDIR)/$(MODULE_NAME).$(LIBEXT) : $(OBJ_PATHS)
+       $(ECHO) \#
+       $(ECHO) \# Archiving $(OBJ_PATHS) into $@...
+       $(ECHO) \#
+       $(AR) $(ARFLAGS) $@ $(OBJ_PATHS)
+
+# Linker options and rules
+LNKFLAGS_INTERNAL_COMMON = --warn_sections -q -e=_c_int00 --silicon_version=6740 -c 
+
+# Assemble Linker flags from all other LNKFLAGS definitions
+_LNKFLAGS = $(LNKFLAGS_INTERNAL_COMMON) $(LNKFLAGS_INTERNAL_PROFILE) $(LNKFLAGS_GLOBAL_$(CORE)) $(LNKFLAGS_LOCAL_COMMON) $(LNKFLAGS_LOCAL_$(CORE)) 
+
+# Path of the RTS library - normally doesn't change for a given tool-chain
+RTSLIB_PATH = $(CODEGEN_PATH)/lib/rts6740$(RTSLIB_ENDIAN)$(RTSLIB_FORMAT).lib
+LIB_PATHS += $(RTSLIB_PATH)
+
+LNK_LIBS = $(addprefix -l,$(LIB_PATHS))
+ifeq ($(DEST_ROOT),)
+ TMPOBJDIR = .
+else
+ TMPOBJDIR = $(OBJDIR)
+endif
+# Linker - to create executable file 
+$(BINDIR)/$(APP_NAME)_$(CORE)_$(PROFILE_$(CORE)).$(EXEEXT) : $(OBJ_PATHS) $(LIB_PATHS) $(LNKCMD_FILE) $(OBJDIR)/$(CFG_COBJ_XDC)
+       $(ECHO) \# Linking into $@
+       $(ECHO) \#
+       cd $(TMPOBJDIR) && $(LNK) $(_LNKFLAGS) $(OBJ_PATHS) $(OBJDIR)/$(CFG_COBJ_XDC) -l$(LNKCMD_FILE) sample_app/linker.cmd -o $@ -m $@.map $(LNK_LIBS)
+       $(ECHO) \#
+       $(ECHO) \# $@ created.
+       $(ECHO) \#
+
+# XDC specific - assemble XDC-Configuro command
+CONFIGURO_CMD = $(xdc_PATH)/xs xdc.tools.configuro --generationOnly -o $(CONFIGURO_DIR) -t $(TARGET_XDC) -p $(PLATFORM_XDC) \
+               -r whole_program -c $(CODEGEN_PATH) -b $(CONFIG_BLD_XDC_$(ISA)) $(XDC_CFG_FILE_NAME)
+#CONFIGURO_CMD = $(xdc_PATH)/xs xdc.tools.configuro --generationOnly -o $(CONFIGURO_DIR) -t $(TARGET_XDC) -p $(PLATFORM_XDC) \
+#               -r whole_program $(XDC_CFG_FILE_NAME)
+_XDC_GREP_STRING = \"$(XDC_GREP_STRING)\"
+EGREP_CMD = $(EGREP) -ivw $(XDC_GREP_STRING) $(XDCLNKCMD_FILE)
+
+ifneq ($(DEST_ROOT),)
+ DEST_ROOT += /
+endif
+# Invoke configuro for the rest of the components
+#  NOTE: 1. String handling is having issues with various make versions when the 
+#           cammand is directly tried to be given below. Hence, as a work-around, 
+#           the command is re-directed to a file (shell or batch file) and then 
+#           executed
+#        2. The linker.cmd file generated, includes the libraries generated by
+#           XDC. An egrep to search for these and omit in the .cmd file is added
+#           after configuro is done
+#$(CFG_CFILE_XDC) : $(XDC_CFG_FILE)
+xdc_configuro : $(XDC_CFG_FILE)
+       $(ECHO) \# Invoking configuro...
+       $(ECHO) -e $(CONFIGURO_CMD) > $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat
+       $(CHMOD) a+x $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat
+       $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat
+       $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)
+#      $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat
+#      ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)
+#      $(EGREP_CMD) > $(LNKCMD_FILE)
+#      $(EGREP) -iv "$(XDC_GREP_STRING)" $(XDCLNKCMD_FILE) > $(LNKCMD_FILE)
+       $(ECHO) \# Configuro done!
+
+$(LNKCMD_FILE) :
+#      $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)
+#      $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat
+#      ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)
+#      $(EGREP_CMD) > $(LNKCMD_FILE)
+ifndef MODULE_NAME
+$(OBJDIR)/$(CFG_COBJ_XDC) : $(CFG_C_XDC)
+       $(ECHO) \# Compiling generated $< to $@ ...
+       $(CC) -ppd=$(DEPFILE).P $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $(CFG_C_XDC)
+       $(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $(CFG_C_XDC)
+endif
+
+# Include dependency make files that were generated by $(CC)
+-include $(SRCS:%.c=$(DEPDIR)/%.P)
+
+# Nothing beyond this point
diff --git a/makerules/rules_m3.mk b/makerules/rules_m3.mk
new file mode 100644 (file)
index 0000000..bc57713
--- /dev/null
@@ -0,0 +1,170 @@
+# Filename: rules_m3.mk
+#
+# Make rules for M3 - This file has all the common rules and defines required
+#                     for Cortex-M3 ISA
+#
+# This file needs to change when:
+#     1. Code generation tool chain changes (currently it uses TMS470)
+#     2. Internal switches (which are normally not touched) has to change
+#     3. XDC specific switches change
+#     4. a rule common for M3 ISA has to be added or modified
+
+# Set compiler/archiver/linker commands and include paths
+CODEGEN_INCLUDE = $(CODEGEN_PATH_M3)/include
+CC = $(CODEGEN_PATH_M3)/bin/cl470 
+AR = $(CODEGEN_PATH_M3)/bin/ar470
+LNK = $(CODEGEN_PATH_M3)/bin/lnk470
+
+# Derive a part of RTS Library name based on ENDIAN: little/big
+ifeq ($(ENDIAN),little)
+  RTSLIB_ENDIAN = le
+else
+  RTSLIB_ENDIAN = be
+endif
+
+# Derive compiler switch and part of RTS Library name based on FORMAT: COFF/ELF
+ifeq ($(FORMAT),COFF)
+  CSWITCH_FORMAT = ti_arm9_abi
+  RTSLIB_FORMAT = tiarm9
+endif
+ifeq ($(FORMAT),ELF)
+  CSWITCH_FORMAT = eabi
+  RTSLIB_FORMAT = eabi
+endif
+
+# Internal CFLAGS - normally doesn't change
+CFLAGS_INTERNAL = -c -qq -pdsw225 --endian=$(ENDIAN) -mv7M3 --abi=$(CSWITCH_FORMAT) -eo.$(OBJEXT) -ea.$(ASMEXT) --symdebug:dwarf 
+CFLAGS_DIROPTS = -fr=$(OBJDIR) -fs=$(OBJDIR)
+
+# CFLAGS based on profile selected
+ifeq ($(PROFILE_$(CORE)), debug)
+ CFLAGS_XDCINTERNAL = -Dxdc_target_name__=M3 -Dxdc_target_types__=ti/targets/arm/elf/std.h -Dxdc_bld__profile_debug -Dxdc_bld__vers_1_0_4_6_1 -D_DEBUG_=1 
+ ifndef MODULE_NAME
+  CFLAGS_XDCINTERNAL += -Dxdc_cfg__header__='$(CONFIGURO_DIR)/package/cfg/VpsAppMain_xem3.h' 
+ endif
+ LNKFLAGS_INTERNAL_PROFILE = 
+endif
+ifeq ($(PROFILE_$(CORE)), whole_program_debug)
+ CFLAGS_XDCINTERNAL = -Dxdc_target_name__=M3 -Dxdc_target_types__=ti/targets/arm/elf/std.h -Dxdc_bld__profile_whole_program_debug -Dxdc_bld__vers_1_0_4_6_1 -ms -oe 
+ ifndef MODULE_NAME
+  CFLAGS_XDCINTERNAL += -Dxdc_cfg__header__='$(CONFIGURO_DIR)/package/cfg/VpsAppMain_pem3.h' 
+ endif
+ LNKFLAGS_INTERNAL_PROFILE = --opt='--endian=$(ENDIAN) -mv7M3 --abi=$(CSWITCH_FORMAT) -qq -pdsw225 $(CFLAGS_GLOBAL_$(CORE)) -oe --symdebug:dwarf -ms -op2 -O3 -k -os --optimize_with_debug --inline_recursion_limit=20' --strict_compatibility=on 
+# LNKFLAGS_INTERNAL_PROFILE = 
+endif
+
+# Following 'if...' block is for an application; to add a #define for each
+#   component in the build. This is required to know - at compile time - which
+#   components are on which core.
+ifndef MODULE_NAME
+  # Derive list of all packages from each of the components needed by the app
+  PKG_LIST_M3_LOCAL = $(foreach COMP,$(COMP_LIST_$(CORE)),$($(COMP)_PKG_LIST))
+  
+  # Defines for the app and cfg source code to know which components/packages
+  # are included in the build for the local CORE...
+  CFLAGS_APP_DEFINES = $(foreach PKG,$(PKG_LIST_M3_LOCAL),-D_LOCAL_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_LOCAL),-D_BUILD_$(PKG)_)
+  
+  ifeq ($(CORE),m3vpss)
+    PKG_LIST_M3_REMOTE = $(foreach COMP,$(COMP_LIST_m3video),$($(COMP)_PKG_LIST))
+    CFLAGS_APP_DEFINES += -D_LOCAL_CORE_m3vpss_
+  endif
+  ifeq ($(CORE),m3video)
+    PKG_LIST_M3_REMOTE = $(foreach COMP,$(COMP_LIST_m3vpss),$($(COMP)_PKG_LIST))
+    CFLAGS_APP_DEFINES += -D_LOCAL_CORE_m3video_
+  endif
+  PKG_LIST_A8_REMOTE = $(foreach COMP,$(COMP_LIST_a8host),$($(COMP)_PKG_LIST))
+
+  # Defines for the app and cfg source code to know which components/packages
+  # are included in the build for the remote CORE...
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_REMOTE),-D_REMOTE_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_REMOTE),-D_BUILD_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_A8_REMOTE),-D_REMOTE_$(PKG)_)
+  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_A8_REMOTE),-D_BUILD_$(PKG)_)
+endif
+
+# Assemble CFLAGS from all other CFLAGS definitions
+_CFLAGS = $(CFLAGS_INTERNAL) $(CFLAGS_GLOBAL_$(CORE)) $(CFLAGS_XDCINTERNAL) $(CFLAGS_LOCAL_COMMON) $(CFLAGS_LOCAL_$(CORE)) $(CFLAGS_LOCAL_$(PLATFORM)) $(CFLAGS_LOCAL_$(SOC)) $(CFLAGS_APP_DEFINES) $(CFLAGS_COMP_COMMON) $(CFLAGS_GLOBAL_$(PLATFORM))
+
+# Object file creation
+# The first $(CC) generates the dependency make files for each of the objects
+# The second $(CC) compiles the source to generate object
+$(OBJ_PATHS): $(OBJDIR)/%.$(OBJEXT): %.c
+       $(ECHO) \# Compiling $< to $@ ...
+       $(CC) -ppd=$(DEPFILE).P $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $<
+       $(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $<
+
+# Archive flags - normally doesn't change
+ARFLAGS = rq
+
+# Archive/library file creation
+$(LIBDIR)/$(MODULE_NAME).$(LIBEXT) : $(OBJ_PATHS)
+       $(ECHO) \#
+       $(ECHO) \# Archiving $(OBJ_PATHS) into $@...
+       $(ECHO) \#
+       $(AR) $(ARFLAGS) $@ $(OBJ_PATHS)
+
+# Linker options and rules
+LNKFLAGS_INTERNAL_COMMON = -w -q -u _c_int00 --silicon_version=7M3 -c --dynamic 
+
+# Assemble Linker flags from all other LNKFLAGS definitions
+_LNKFLAGS = $(LNKFLAGS_INTERNAL_COMMON) $(LNKFLAGS_INTERNAL_PROFILE) $(LNKFLAGS_GLOBAL_$(CORE)) $(LNKFLAGS_LOCAL_COMMON) $(LNKFLAGS_LOCAL_$(CORE)) 
+
+# Path of the RTS library - normally doesn't change for a given tool-chain
+RTSLIB_PATH = $(CODEGEN_PATH_M3)/lib/rtsv7M3_T_$(RTSLIB_ENDIAN)_$(RTSLIB_FORMAT).lib
+LIB_PATHS += $(RTSLIB_PATH)
+
+LNK_LIBS = $(addprefix -l,$(LIB_PATHS))
+# Linker - to create executable file 
+$(BINDIR)/$(APP_NAME)_$(CORE)_$(PROFILE_$(CORE)).$(EXEEXT) : $(OBJ_PATHS) $(LIB_PATHS) $(LNKCMD_FILE) $(OBJDIR)/$(CFG_COBJ_XDC)
+       $(ECHO) \# Linking into $@
+       $(ECHO) \#
+       cd $(OBJDIR) && $(LNK) $(_LNKFLAGS) $(OBJ_PATHS) $(OBJDIR)/$(CFG_COBJ_XDC) $(LNKCMD_FILE) -o $@ -m $@.map $(LNK_LIBS)
+       $(ECHO) \#
+       $(ECHO) \# $@ created.
+       $(ECHO) \#
+
+# XDC specific - assemble XDC-Configuro command
+CONFIGURO_CMD = $(xdc_PATH)/xs xdc.tools.configuro --generationOnly -o $(CONFIGURO_DIR) -t $(TARGET_XDC) -p $(PLATFORM_XDC) \
+               --cfgArgs $(CFGARGS_XDC) -r $(PROFILE_$(CORE)) -b $(CONFIG_BLD_XDC_$(ISA)) $(XDC_CFG_FILE_NAME)
+_XDC_GREP_STRING = \"$(XDC_GREP_STRING)\"
+EGREP_CMD = $(EGREP) -ivw $(XDC_GREP_STRING) $(XDCLNKCMD_FILE)
+
+# Invoke configuro for the rest of the components
+#  NOTE: 1. String handling is having issues with various make versions when the 
+#           cammand is directly tried to be given below. Hence, as a work-around, 
+#           the command is re-directed to a file (shell or batch file) and then 
+#           executed
+#        2. The linker.cmd file generated, includes the libraries generated by
+#           XDC. An egrep to search for these and omit in the .cmd file is added
+#           after configuro is done
+#$(CFG_CFILE_XDC) : $(XDC_CFG_FILE)
+xdc_configuro : $(XDC_CFG_FILE)
+       $(ECHO) \# Invoking configuro...
+       $(ECHO) -e $(CONFIGURO_CMD) > $(DEST_ROOT)/maketemp_configuro_cmd_$(CORE).bat
+       $(CHMOD) a+x $(DEST_ROOT)/maketemp_configuro_cmd_$(CORE).bat
+       $(DEST_ROOT)/maketemp_configuro_cmd_$(CORE).bat
+#      $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)
+#      $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat
+#      ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)
+       $(EGREP_CMD) > $(LNKCMD_FILE)
+#      $(EGREP) -iv "$(XDC_GREP_STRING)" $(XDCLNKCMD_FILE) > $(LNKCMD_FILE)
+       $(ECHO) \# Configuro done!
+
+$(LNKCMD_FILE) :
+#      $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)
+#      $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat
+#      ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)
+#      $(EGREP_CMD) > $(LNKCMD_FILE)
+ifndef MODULE_NAME
+$(OBJDIR)/$(CFG_COBJ_XDC) : $(CFG_C_XDC)
+       $(ECHO) \# Compiling generated $< to $@ ...
+       $(CC) -ppd=$(DEPFILE).P $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $(CFG_C_XDC)
+       $(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $(CFG_C_XDC)
+endif
+
+# Include dependency make files that were generated by $(CC)
+-include $(SRCS:%.c=$(DEPDIR)/%.P)
+
+# Nothing beyond this point