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