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