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