16649b3a8a3591d436127f454e693c0c74470dda
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/cl470
15 AR = $(CODEGEN_PATH_M3)/bin/ar470
16 LNK = $(CODEGEN_PATH_M3)/bin/lnk470
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
37 CFLAGS_DIROPTS = -fr=$(OBJDIR) -fs=$(OBJDIR)
39 # CFLAGS based on profile selected
40 ifeq ($(PROFILE_$(CORE)), debug)
41 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
42 ifndef MODULE_NAME
43 CFLAGS_XDCINTERNAL += -Dxdc_cfg__header__='$(CONFIGURO_DIR)/package/cfg/$(XDC_CFG_BASE_FILE_NAME)_xem3.h'
44 endif
45 LNKFLAGS_INTERNAL_PROFILE =
46 endif
47 ifeq ($(PROFILE_$(CORE)), whole_program_debug)
48 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
49 ifndef MODULE_NAME
50 CFLAGS_XDCINTERNAL += -Dxdc_cfg__header__='$(CONFIGURO_DIR)/package/cfg/$(XDC_CFG_BASE_FILE_NAME)_pem3.h'
51 endif
52 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
53 # LNKFLAGS_INTERNAL_PROFILE =
54 endif
55 ifeq ($(PROFILE_$(CORE)), release)
56 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
57 ifndef MODULE_NAME
58 CFLAGS_XDCINTERNAL += -Dxdc_cfg__header__='$(CONFIGURO_DIR)/package/cfg/$(XDC_CFG_BASE_FILE_NAME)_xem3.h'
59 endif
60 LNKFLAGS_INTERNAL_PROFILE = -o2
61 endif
63 # Following 'if...' block is for an application; to add a #define for each
64 # component in the build. This is required to know - at compile time - which
65 # components are on which core.
66 ifndef MODULE_NAME
67 # Derive list of all packages from each of the components needed by the app
68 PKG_LIST_M3_LOCAL = $(foreach COMP,$(COMP_LIST_$(CORE)),$($(COMP)_PKG_LIST))
70 # Defines for the app and cfg source code to know which components/packages
71 # are included in the build for the local CORE...
72 CFLAGS_APP_DEFINES = $(foreach PKG,$(PKG_LIST_M3_LOCAL),-D_LOCAL_$(PKG)_)
73 CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_LOCAL),-D_BUILD_$(PKG)_)
75 ifeq ($(CORE),m3vpss)
76 PKG_LIST_M3_REMOTE = $(foreach COMP,$(COMP_LIST_m3video),$($(COMP)_PKG_LIST))
77 CFLAGS_APP_DEFINES += -D_LOCAL_CORE_m3vpss_
78 endif
79 ifeq ($(CORE),m3video)
80 PKG_LIST_M3_REMOTE = $(foreach COMP,$(COMP_LIST_m3vpss),$($(COMP)_PKG_LIST))
81 CFLAGS_APP_DEFINES += -D_LOCAL_CORE_m3video_
82 endif
83 PKG_LIST_A8_REMOTE = $(foreach COMP,$(COMP_LIST_a8host),$($(COMP)_PKG_LIST))
85 # Defines for the app and cfg source code to know which components/packages
86 # are included in the build for the remote CORE...
87 CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_REMOTE),-D_REMOTE_$(PKG)_)
88 CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_M3_REMOTE),-D_BUILD_$(PKG)_)
89 CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_A8_REMOTE),-D_REMOTE_$(PKG)_)
90 CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_A8_REMOTE),-D_BUILD_$(PKG)_)
91 endif
93 # Assemble CFLAGS from all other CFLAGS definitions
94 _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))
96 # Object file creation
97 # The first $(CC) generates the dependency make files for each of the objects
98 # The second $(CC) compiles the source to generate object
99 $(OBJ_PATHS): $(OBJDIR)/%.$(OBJEXT): %.c
100 $(ECHO) \# Compiling $< to $@ ...
101 $(CC) -ppd=$(DEPFILE).P $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $<
102 $(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $<
104 # Archive flags - normally doesn't change
105 ARFLAGS = rq
107 # Archive/library file creation
108 $(LIBDIR)/$(MODULE_NAME).$(LIBEXT) : $(OBJ_PATHS)
109 $(ECHO) \#
110 $(ECHO) \# Archiving $(OBJ_PATHS) into $@...
111 $(ECHO) \#
112 $(AR) $(ARFLAGS) $@ $(OBJ_PATHS)
114 # Linker options and rules
115 LNKFLAGS_INTERNAL_COMMON = -w -q -u _c_int00 --silicon_version=7M3 -c --dynamic
117 # Assemble Linker flags from all other LNKFLAGS definitions
118 _LNKFLAGS = $(LNKFLAGS_INTERNAL_COMMON) $(LNKFLAGS_INTERNAL_PROFILE) $(LNKFLAGS_GLOBAL_$(CORE)) $(LNKFLAGS_LOCAL_COMMON) $(LNKFLAGS_LOCAL_$(CORE))
120 # Path of the RTS library - normally doesn't change for a given tool-chain
121 RTSLIB_PATH = $(CODEGEN_PATH_M3)/lib/rtsv7M3_T_$(RTSLIB_ENDIAN)_$(RTSLIB_FORMAT).lib
122 LIB_PATHS += $(RTSLIB_PATH)
124 LNK_LIBS = $(addprefix -l,$(LIB_PATHS))
125 ifeq ($(DEST_ROOT),)
126 TMPOBJDIR = .
127 else
128 TMPOBJDIR = $(OBJDIR)
129 endif
130 # Linker - to create executable file
131 $(BINDIR)/$(APP_NAME)_$(CORE)_$(PROFILE_$(CORE)).$(EXEEXT) : $(OBJ_PATHS) $(LIB_PATHS) $(LNKCMD_FILE) $(OBJDIR)/$(CFG_COBJ_XDC)
132 $(ECHO) \# Linking into $@
133 $(ECHO) \#
134 cd $(TMPOBJDIR) && $(LNK) $(_LNKFLAGS) $(OBJ_PATHS) $(OBJDIR)/$(CFG_COBJ_XDC) $(LNKCMD_FILE) -o $@ -m $@.map $(LNK_LIBS)
135 $(ECHO) \#
136 $(ECHO) \# $@ created.
137 $(ECHO) \#
139 # XDC specific - assemble XDC-Configuro command
140 CONFIGURO_CMD = $(xdc_PATH)/xs xdc.tools.configuro --generationOnly -o $(CONFIGURO_DIR) -t $(TARGET_XDC) -p $(PLATFORM_XDC) \
141 $(CFGARGS_XDC) -r $(PROFILE_$(CORE)) -b $(CONFIG_BLD_XDC_$(ISA)) $(XDC_CFG_FILE_NAME)
142 _XDC_GREP_STRING = \"$(XDC_GREP_STRING)\"
143 EGREP_CMD = $(EGREP) -ivw $(XDC_GREP_STRING) $(XDCLNKCMD_FILE)
145 ifneq ($(DEST_ROOT),)
146 DEST_ROOT += /
147 endif
148 # Invoke configuro for the rest of the components
149 # NOTE: 1. String handling is having issues with various make versions when the
150 # cammand is directly tried to be given below. Hence, as a work-around,
151 # the command is re-directed to a file (shell or batch file) and then
152 # executed
153 # 2. The linker.cmd file generated, includes the libraries generated by
154 # XDC. An egrep to search for these and omit in the .cmd file is added
155 # after configuro is done
156 #$(CFG_CFILE_XDC) : $(XDC_CFG_FILE)
157 xdc_configuro : $(XDC_CFG_FILE)
158 $(ECHO) \# Invoking configuro...
159 $(ECHO) -e $(CONFIGURO_CMD) > $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat
160 $(CHMOD) a+x $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat
161 $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat
162 $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)
163 # $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat
164 # ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)
165 # $(EGREP_CMD) > $(LNKCMD_FILE)
166 # $(EGREP) -iv "$(XDC_GREP_STRING)" $(XDCLNKCMD_FILE) > $(LNKCMD_FILE)
167 $(ECHO) \# Configuro done!
169 $(LNKCMD_FILE) :
170 # $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)
171 # $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat
172 # ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)
173 # $(EGREP_CMD) > $(LNKCMD_FILE)
175 ifndef MODULE_NAME
176 $(OBJDIR)/$(CFG_COBJ_XDC) : $(CFG_C_XDC)
177 $(ECHO) \# Compiling generated $< to $@ ...
178 $(CC) -ppd=$(DEPFILE).P $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $(CFG_C_XDC)
179 $(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -fc $(CFG_C_XDC)
180 endif
182 # Include dependency make files that were generated by $(CC)
183 -include $(SRCS:%.c=$(DEPDIR)/%.P)
185 # Nothing beyond this point