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