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