]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-rtos/edma3_lld.git/blob - makerules/rules_66.mk
df37a5b6c3c49b9489ed754af6f9b9a0647edb03
[keystone-rtos/edma3_lld.git] / makerules / rules_66.mk
1 # Filename: rules_c66.mk
2 #
3 # Make rules for c66 - This file has all the common rules and defines required
4 #                     for DSP c66 ISA
5 #
6 # This file needs to change when:
7 #     1. Code generation tool chain changes (currently it uses TI CGT)
8 #     2. Internal switches (which are normally not touched) has to change
9 #     3. XDC specific switches change
10 #     4. a rule common for c66 ISA has to be added or modified
12 # Set compiler/archiver/linker commands and include paths - Currently different
13 #  for ELF and COFF. In a future release of the toolchain, it would merge.
14 ifeq ($(FORMAT),COFF)
15  CODEGEN_PATH = $(CODEGEN_PATH_DSP)
16  CODEGEN_INCLUDE = $(CODEGEN_PATH_DSP)/include
17  CC = $(CODEGEN_PATH_DSP)/bin/cl6x
18  AR = $(CODEGEN_PATH_DSP)/bin/ar6x
19  LNK = $(CODEGEN_PATH_DSP)/bin/lnk6x
20 endif
21 ifeq ($(FORMAT),ELF)
22  CODEGEN_PATH = $(CODEGEN_PATH_DSPELF)
23  CODEGEN_INCLUDE = $(CODEGEN_PATH_DSPELF)/include
24  CC = $(CODEGEN_PATH_DSPELF)/bin/cl6x
25  AR = $(CODEGEN_PATH_DSPELF)/bin/ar6x
26  LNK = $(CODEGEN_PATH_DSPELF)/bin/lnk6x
27 endif
29 # Derive a part of RTS Library name based on ENDIAN: little/big
30 ifeq ($(ENDIAN),little)
31   #RTSLIB_ENDIAN = 
32   XDCINTERNAL_DEFINES += -Dxdc_target_name__=C66
33 else
34   CSWITCH_ENDIAN = -me
35   RTSLIB_ENDIAN = e
36   XDCINTERNAL_DEFINES += -DBIG_ENDIAN_MODE -Dxdc_target_name__=C66_big_endian
37 endif
39 # Derive compiler switch and part of RTS Library name based on FORMAT: COFF/ELF
40 ifeq ($(FORMAT),COFF)
41   CSWITCH_FORMAT = 
42   #RTSLIB_FORMAT = 
43   XDCINTERNAL_DEFINES += -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__vers_1_0_7_0_0
44 endif
45 ifeq ($(FORMAT),ELF)
46   CSWITCH_FORMAT = --abi=elfabi 
47   RTSLIB_FORMAT = _elf
48   XDCINTERNAL_DEFINES += -Dxdc_target_types__=ti/targets/elf/std.h -Dxdc_bld__vers_1_0_7_2_0_10271
49 endif
51 # XDC Specific defines
52 ifneq ($(XDC_CFG_FILE_$(CORE)),)
53   ifeq ($(PROFILE_$(CORE)),debug)
54     CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)66$(RTSLIB_ENDIAN)
55   endif
56   ifeq ($(PROFILE_$(CORE)),release)
57     CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)66$(RTSLIB_ENDIAN)
58   endif
59   ifeq ($(PROFILE_$(CORE)),whole_program_debug)
60     CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
61     CFG_LNKFILENAMEPART_XDC=_x
62   endif
63   CFG_CFILE_XDC =$(patsubst %.cfg,%_$(CFG_CFILENAMEPART_XDC).c,$(notdir $(XDC_CFG_FILE_$(CORE))))
64   CFG_C_XDC = $(addprefix $(CONFIGURO_DIR)/package/cfg/,$(CFG_CFILE_XDC))
65   XDCLNKCMD_FILE =$(patsubst %.c, %$(CFG_LNKFILENAMEPART_XDC).xdl, $(CFG_C_XDC))
66   CFG_COBJ_XDC = $(patsubst %.c,%.$(OBJEXT),$(CFG_CFILE_XDC))
67 #  OBJ_PATHS += $(CFG_COBJ_XDC)
68   LNKCMD_FILE = $(CONFIGURO_DIR)/linker_mod.cmd
69   SPACE := 
70   SPACE += 
71   XDC_GREP_STRING = $(CONFIGURO_DIRNAME)
72 #  XDC_GREP_STRING = $(subst $(SPACE),\|,$(COMP_LIST_$(CORE)))
73 #  XDC_GREP_STRING += \|$(CONFIGURO_DIRNAME)
74 endif
76 # Internal CFLAGS - normally doesn't change
77 CFLAGS_INTERNAL = -c -qq -pdsw225 -mv6600 $(CSWITCH_FORMAT) $(CSWITCH_ENDIAN) -mo -eo.$(OBJEXT) -ea.$(ASMEXT) -DBUILD_C6XDSP
78 CFLAGS_DIROPTS = -fr=$(OBJDIR) -fs=$(OBJDIR)
80 # CFLAGS based on profile selected
81 ifeq ($(PROFILE_$(CORE)), debug)
82  CFLAGS_INTERNAL += --symdebug:dwarf
83  CFLAGS_XDCINTERNAL = -Dxdc_bld__profile_debug -D_DEBUG_=1 
84  ifndef MODULE_NAME
85   CFLAGS_XDCINTERNAL += -Dxdc_cfg__header__='$(CONFIGURO_DIR)/package/cfg/$(XDC_CFG_BASE_FILE_NAME)_xem3.h' 
86  endif
87  LNKFLAGS_INTERNAL_PROFILE = 
88 endif
89 ifeq ($(PROFILE_$(CORE)), release)
90  CFLAGS_INTERNAL += -O2
91  CFLAGS_XDCINTERNAL = -Dxdc_bld__profile_release
92  ifndef MODULE_NAME
93   CFLAGS_XDCINTERNAL += -Dxdc_cfg__header__='$(CONFIGURO_DIR)/package/cfg/$(XDC_CFG_BASE_FILE_NAME)_pem3.h' 
94  endif
95  LNKFLAGS_INTERNAL_PROFILE = -o2
96 # LNKFLAGS_INTERNAL_PROFILE = 
97 endif
99 # For generic platform define GENERIC in CFLAGS
100 ifeq ($(PLATFORM),generic)
101  CFLAGS_XDCINTERNAL += -DGENERIC
102 endif
103 CFLAGS_XDCINTERNAL += $(XDCINTERNAL_DEFINES)
105 # Following 'if...' block is for an application; to add a #define for each
106 #   component in the build. This is required to know - at compile time - which
107 #   components are on which core.
108 ifndef MODULE_NAME
109   # Derive list of all packages from each of the components needed by the app
110   PKG_LIST_M3_LOCAL = $(foreach COMP,$(COMP_LIST_$(CORE)),$($(COMP)_PKG_LIST))
111   
112   # Defines for the app and cfg source code to know which components/packages
113   # are included in the build for the local CORE...
114   CFLAGS_APP_DEFINES = $(foreach PKG,$(PKG_LIST_M3_LOCAL),-D_LOCAL_$(PKG)_)
115   CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_LOCAL),-D_BUILD_$(PKG)_)
116   
117   ifeq ($(CORE),m3vpss)
118     PKG_LIST_M3_REMOTE = $(foreach COMP,$(COMP_LIST_m3video),$($(COMP)_PKG_LIST))
119     CFLAGS_APP_DEFINES += -D_LOCAL_CORE_m3vpss_
120   endif
121   ifeq ($(CORE),m3video)
122     PKG_LIST_M3_REMOTE = $(foreach COMP,$(COMP_LIST_m3vpss),$($(COMP)_PKG_LIST))
123     CFLAGS_APP_DEFINES += -D_LOCAL_CORE_m3video_
124   endif
125   PKG_LIST_A8_REMOTE = $(foreach COMP,$(COMP_LIST_a8host),$($(COMP)_PKG_LIST))
127   # Defines for the app and cfg source code to know which components/packages
128   # are included in the build for the remote CORE...
129   CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_REMOTE),-D_REMOTE_$(PKG)_)
130   CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_REMOTE),-D_BUILD_$(PKG)_)
131   CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_A8_REMOTE),-D_REMOTE_$(PKG)_)
132   CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_A8_REMOTE),-D_BUILD_$(PKG)_)
133 endif
135 # Assemble CFLAGS from all other CFLAGS definitions
136 _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))
138 # Object file creation
139 # The first $(CC) generates the dependency make files for each of the objects
140 # The second $(CC) compiles the source to generate object
141 $(OBJ_PATHS): $(OBJDIR)/%.$(OBJEXT): %.c
142         $(ECHO) \# Compiling $< to $@ ...
143         $(CC) -ppd=$(DEPFILE).P $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $<
144         $(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $<
146 # Archive flags - normally doesn't change
147 ARFLAGS = rq
149 # Archive/library file creation
150 $(LIBDIR)/$(MODULE_NAME).$(LIBEXT) : $(OBJ_PATHS)
151         $(ECHO) \#
152         $(ECHO) \# Archiving $(OBJ_PATHS) into $@...
153         $(ECHO) \#
154         $(AR) $(ARFLAGS) $@ $(OBJ_PATHS)
156 # Linker options and rules
157 LNKFLAGS_INTERNAL_COMMON = --warn_sections -q -e=_c_int00 --silicon_version=64+ -c
159 # Assemble Linker flags from all other LNKFLAGS definitions
160 _LNKFLAGS = $(LNKFLAGS_INTERNAL_COMMON) $(LNKFLAGS_INTERNAL_PROFILE) $(LNKFLAGS_GLOBAL_$(CORE)) $(LNKFLAGS_LOCAL_COMMON) $(LNKFLAGS_LOCAL_$(CORE)) 
162 # Path of the RTS library - normally doesn't change for a given tool-chain
163 RTSLIB_PATH = $(CODEGEN_PATH)/lib/rts6600$(RTSLIB_ENDIAN)$(RTSLIB_FORMAT).lib
164 LIB_PATHS += $(RTSLIB_PATH)
166 LNK_LIBS = $(addprefix -l,$(LIB_PATHS))
167 ifeq ($(DEST_ROOT),)
168  TMPOBJDIR = .
169 else
170  TMPOBJDIR = $(OBJDIR)
171 endif
172 # Linker - to create executable file
173 $(BINDIR)/$(APP_NAME)_$(CORE)_$(PROFILE_$(CORE)).$(EXEEXT) : $(OBJ_PATHS) $(LIB_PATHS) $(LNKCMD_FILE) $(OBJDIR)/$(CFG_COBJ_XDC)
174         $(ECHO) \# Linking into $@
175         $(ECHO) \#
176         cd $(TMPOBJDIR) && $(LNK) $(_LNKFLAGS) $(OBJ_PATHS) -l$(LNKCMD_FILE) sample_app/linker.cmd -o $@ -m $@.map $(LNK_LIBS)
177         $(ECHO) \#
178         $(ECHO) \# $@ created.
179         $(ECHO) \#
181 #Incase application needs to send custom platform and custom config.bld file
182 ifeq ($(CONFIG_BLD_XDC_CUSTOM),)
183   CONFIG_BLD_FILE = $(CONFIG_BLD_XDC_$(ISA))
184 else
185   CONFIG_BLD_FILE = $(CONFIG_BLD_XDC_CUSTOM)
186 endif
187 ifeq ($(PLATFORM_XDC_CUSTOM),)
188   PLATFORM_XDC_NAME = $(PLATFORM_XDC)
189 else
190   PLATFORM_XDC_NAME = $(PLATFORM_XDC_CUSTOM)
191 endif
193 # XDC specific - assemble XDC-Configuro command
194 CONFIGURO_CMD = $(xdc_PATH)/xs xdc.tools.configuro --generationOnly -o $(CONFIGURO_DIR) -t $(TARGET_XDC) -p $(PLATFORM_XDC_NAME) \
195                -r $(PROFILE_$(CORE)) -c $(CODEGEN_PATH) -b $(CONFIG_BLD_FILE) $(XDC_CFG_FILE_NAME)
196 _XDC_GREP_STRING = \"$(XDC_GREP_STRING)\"
197 EGREP_CMD = $(EGREP) -ivw $(XDC_GREP_STRING) $(XDCLNKCMD_FILE)
199 ifneq ($(DEST_ROOT),)
200  DEST_ROOT += /
201 endif
202 # Invoke configuro for the rest of the components
203 #  NOTE: 1. String handling is having issues with various make versions when the 
204 #           cammand is directly tried to be given below. Hence, as a work-around, 
205 #           the command is re-directed to a file (shell or batch file) and then 
206 #           executed
207 #        2. The linker.cmd file generated, includes the libraries generated by
208 #           XDC. An egrep to search for these and omit in the .cmd file is added
209 #           after configuro is done
210 #$(CFG_CFILE_XDC) : $(XDC_CFG_FILE)
211 xdc_configuro : $(XDC_CFG_FILE)
212         $(ECHO) \# Invoking configuro...
213         $(ECHO) -e $(CONFIGURO_CMD) > $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat
214         $(CHMOD) a+x $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat
215 ifeq ($(OS),Windows_NT)
216         CACLS $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat /E /P Everyone:F
217         $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat
218 else
219         ./$(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat
220 endif
221         $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)
222 #       $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat
223 #       ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)
224 #       $(EGREP_CMD) > $(LNKCMD_FILE)
225 #       $(EGREP) -iv "$(XDC_GREP_STRING)" $(XDCLNKCMD_FILE) > $(LNKCMD_FILE)
226         $(ECHO) \# Configuro done!
228 $(LNKCMD_FILE) :
229 #       $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)
230 #       $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat
231 #       ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)
232 #       $(EGREP_CMD) > $(LNKCMD_FILE)
233  
234 ifndef MODULE_NAME
235 $(OBJDIR)/$(CFG_COBJ_XDC) : $(CFG_C_XDC)
236         $(ECHO) \# Compiling generated $< to $@ ...
237         $(CC) -ppd=$(DEPFILE).P $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $(CFG_C_XDC)
238         $(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $(CFG_C_XDC)
239         $(CP) $(OBJDIR)/$(CFG_COBJ_XDC) $(CONFIGURO_DIR)/package/cfg/$(CFG_COBJ_XDC)
240 endif
242 # Include dependency make files that were generated by $(CC)
243 -include $(SRCS:%.c=$(DEPDIR)/%.P)
245 # Nothing beyond this point