]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-rtos/edma3_lld.git/blob - makerules/rules_a15.mk
Webgen makefile to have a URL field
[keystone-rtos/edma3_lld.git] / makerules / rules_a15.mk
1 # Filename: rules_a15.mk\r
2 #\r
3 # Make rules for A15 - This file has all the common rules and defines required\r
4 #                     for Cortex-A15 ISA\r
5 #\r
6 # This file needs to change when:\r
7 #     1. Code generation tool chain changes (This file uses Code Sourcery)\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 A15 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_A15)/arm-none-eabi/include\r
14 CC = $(CODEGEN_PATH_A15)/bin/arm-none-eabi-gcc \r
15 AR = $(CODEGEN_PATH_A15)/bin/arm-none-eabi-ar\r
16 #LNK = $(CODEGEN_PATH_A15)/bin/arm-none-eabi-ld\r
17 LNK = $(CODEGEN_PATH_A15)/bin/arm-none-eabi-gcc\r
18 \r
19 # XDC Specific defines\r
20 ifneq ($(XDC_CFG_FILE_$(CORE)),)\r
21   ifeq ($(PROFILE_$(CORE)),debug)\r
22 #    CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)a15f\r
23     CFG_CFILENAMEPART_XDC =pa15fg\r
24   endif\r
25   ifeq ($(PROFILE_$(CORE)),release)\r
26 #    CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)a15f\r
27     CFG_CFILENAMEPART_XDC =pa15fg\r
28   endif\r
29   ifeq ($(PROFILE_$(CORE)),whole_program_debug)\r
30     CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)a15f$(ENDIAN_EXT)\r
31     CFG_LNKFILENAMEPART_XDC=_x\r
32   endif\r
33   CFG_CFILE_XDC =$(patsubst %.cfg,%_$(CFG_CFILENAMEPART_XDC).c,$(notdir $(XDC_CFG_FILE_$(CORE))))\r
34   CFG_C_XDC = $(addprefix $(CONFIGURO_DIR)/package/cfg/,$(CFG_CFILE_XDC))\r
35   XDCLNKCMD_FILE =$(patsubst %.c, %$(CFG_LNKFILENAMEPART_XDC)_x.xdl, $(CFG_C_XDC))\r
36 # CFG_COBJ_XDC = $(patsubst %.c,%.$(OBJEXT),$(CFG_CFILE_XDC))\r
37   CFG_COBJ_XDC = $(patsubst %.c,%.oa15fg,$(CFG_CFILE_XDC))\r
38 #  OBJ_PATHS += $(CFG_COBJ_XDC)\r
39   LNKCMD_FILE = $(CONFIGURO_DIR)/linker.cmd\r
40   SPACE := \r
41   SPACE += \r
42   XDC_GREP_STRING = $(CONFIGURO_DIRNAME)\r
43 #  XDC_GREP_STRING = $(subst $(SPACE),\|,$(COMP_LIST_$(CORE)))\r
44 #  XDC_GREP_STRING += \|$(CONFIGURO_DIRNAME)\r
45 endif\r
46 # Internal CFLAGS - normally doesn't change\r
47 CFLAGS_INTERNAL = -Wall -Wunknown-pragmas -c -mcpu=cortex-a15 -g -mfpu=neon -mfloat-abi=hard -mabi=aapcs -mapcs-frame  -Wswitch\r
48 #-ffunction-sections -fdata-sections\r
49 CFLAGS_DIROPTS =\r
50 \r
51 LNKFLAGS_INTERNAL = -nostartfiles -static -Wl,--gc-sections -mfloat-abi=hard\r
52 \r
53 # CFLAGS based on profile selected\r
54 CFLAGS_XDCINTERNAL = -Dxdc_target_name__=A15F -Dxdc_target_types__=gnu/targets/arm/std.h -Dxdc_cfg__header__='$(CONFIGURO_DIR)/package/cfg/$(XDC_CFG_BASE_FILE_NAME)_xem3.h'\r
55 # Following 'if...' block is for an application; to add a #define for each\r
56 #   component in the build. This is required to know - at compile time - which\r
57 #   components are on which core.\r
58 ifndef MODULE_NAME\r
59   # Derive list of all packages from each of the components needed by the app\r
60   PKG_LIST_LOCAL = $(foreach COMP,$(COMP_LIST_$(CORE)),$($(COMP)_PKG_LIST))\r
61   \r
62   # Defines for the app and cfg source code to know which components/packages\r
63   # are included in the build for the local CORE...\r
64   CFLAGS_APP_DEFINES = $(foreach PKG,$(PKG_LIST_LOCAL),-D_LOCAL_$(PKG)_)\r
65   CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_LOCAL),-D_BUILD_$(PKG)_)\r
66   \r
67   ifeq ($(CORE),a15host)\r
68     PKG_LIST_REMOTE = $(foreach COMP,$(COMP_LIST_a15host),$($(COMP)_PKG_LIST))\r
69     CFLAGS_APP_DEFINES += -D_LOCAL_CORE_a15host_\r
70   endif\r
71 \r
72   # Defines for the app and cfg source code to know which components/packages\r
73   # are included in the build for the remote CORE...\r
74   CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_REMOTE),-D_REMOTE_$(PKG)_)\r
75   CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_REMOTE),-D_BUILD_$(PKG)_)\r
76 endif\r
77 ifeq ($(PROFILE_$(CORE)), debug)\r
78 CFLAGS_INTERNAL += -D_DEBUG_=1\r
79 endif\r
80 ifeq ($(PROFILE_$(CORE)), release)\r
81  LNKFLAGS_INTERNAL_PROFILE =\r
82 endif\r
83 \r
84 # Assemble CFLAGS from all other CFLAGS definitions\r
85 _CFLAGS = $(CFLAGS_INTERNAL) $(CFLAGS_XDCINTERNAL) $(CFLAGS_GLOBAL_$(CORE)) $(CFLAGS_LOCAL_COMMON) $(CFLAGS_LOCAL_$(CORE)) $(CFLAGS_LOCAL_$(PLATFORM)) $(CFLAGS_LOCAL_$(SOC)) $(CFLAGS_APP_DEFINES) $(CFLAGS_COMP_COMMON) $(CFLAGS_GLOBAL_$(PLATFORM))\r
86 \r
87 # Object file creation\r
88 # The second $(CC) compiles the source to generate object\r
89 $(OBJ_PATHS): $(OBJDIR)/%.$(OBJEXT): %.c\r
90         $(ECHO) \# Compiling $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$(APP_NAME)$(MODULE_NAME): $<\r
91         $(CC) -c -MD -MF $@.dep $(_CFLAGS) $(INCLUDES) -o $(OBJDIR)/$(basename $(notdir $<)).$(OBJEXT) $<\r
92 \r
93 ASMFLAGS =\r
94 # Object file creation\r
95 $(OBJ_PATHS_ASM): $(OBJDIR)/%.$(OBJEXT): %.asm\r
96         $(ECHO) \# Compiling $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$(APP_NAME)$(MODULE_NAME): $<\r
97         $(CC) -c -x assembler-with-cpp $(_CFLAGS) $(ASMFLAGS) $(INCLUDES) -o $(OBJDIR)/$(basename $(notdir $<)).$(OBJEXT) $<\r
98 \r
99 $(PACKAGE_PATHS): $(PACKAGEDIR)/%: %\r
100         $(ECHO) \# Copying $(PACKAGE_NAME)/$($(MODULE_NAME)_RELPATH)/$<\r
101         $(MKDIR) -p $(DEST_ROOT)/package/$(PACKAGE_SELECT)/$(PACKAGE_NAME)/$($(MODULE_NAME)_RELPATH)\r
102         $(CP) --parents -rf $< $(DEST_ROOT)/package/$(PACKAGE_SELECT)/$(PACKAGE_NAME)/$($(MODULE_NAME)_RELPATH)\r
103 \r
104 # Archive flags - normally doesn't change\r
105 ARFLAGS = cr\r
106 \r
107 # Archive/library file creation\r
108 $(LIBDIR)/$(MODULE_NAME).$(LIBEXT) : $(OBJ_PATHS_ASM) $(OBJ_PATHS)\r
109         $(ECHO) \#\r
110         $(ECHO) \# Archiving $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$(MODULE_NAME)\r
111         $(ECHO) \#\r
112         $(AR) $(ARFLAGS) $@ $(OBJ_PATHS_ASM) $(OBJ_PATHS)\r
113 \r
114 # Linker options and rules\r
115 LNKFLAGS_INTERNAL_COMMON =\r
116 \r
117 # Assemble Linker flags from all other LNKFLAGS definitions\r
118 _LNKFLAGS = $(LNKFLAGS_INTERNAL) $(LNKFLAGS_INTERNAL_COMMON) $(LNKFLAGS_INTERNAL_PROFILE) $(LNKFLAGS_GLOBAL_$(CORE)) $(LNKFLAGS_LOCAL_COMMON) $(LNKFLAGS_LOCAL_$(CORE))\r
119 \r
120 # Path of the RTS library - normally doesn't change for a given tool-chain\r
121 RTSLIB_PATH =\r
122 LIB_PATHS += $(EXT_LIB_a15host) $(CODEGEN_PATH_A15)/lib/gcc/arm-none-eabi/4.7.3/fpu/libgcc.a $(CODEGEN_PATH_A15)/arm-none-eabi/lib/fpu/libc.a $(CODEGEN_PATH_A15)/arm-none-eabi/lib/fpu/libm.a  $(CODEGEN_PATH_A15)/arm-none-eabi/lib/fpu/librdimon.a $(CODEGEN_PATH_A15)/arm-none-eabi/lib/fpu/libg.a\r
123 \r
124 \r
125 LNK_LIBS = $(addprefix -l,$(LIB_PATHS))\r
126 # Linker - to create executable file\r
127 \r
128 ifeq ($(LOCAL_APP_NAME),)\r
129  EXE_NAME = $(BINDIR)/$(APP_NAME)_$(CORE)_$(PROFILE_$(CORE)).$(EXEEXT)\r
130 else\r
131  ifeq ($(PROFILE_$(CORE)),prod_release)\r
132   EXE_NAME = $(BINDIR)/$(LOCAL_APP_NAME).$(EXEEXT)\r
133  else\r
134   EXE_NAME = $(BINDIR)/$(LOCAL_APP_NAME)_$(PROFILE_$(CORE)).$(EXEEXT)\r
135  endif\r
136 endif\r
137 \r
138 $(EXE_NAME) : $(OBJ_PATHS_ASM) $(OBJ_PATHS) $(LIB_PATHS) $(LNKCMD_FILE)  $(CONFIGURO_DIR)/package/cfg/$(CFG_COBJ_XDC)\r
139         $(ECHO) \# Linking into $(EXE_NAME)...\r
140         $(ECHO) \#\r
141         $(LNK) $(_LNKFLAGS) $(OBJ_PATHS_ASM) $(OBJ_PATHS) -Wl,-T,$(LNKCMD_FILE) -Wl,-Map,$@.map $(LIB_PATHS) -o $@\r
142         $(ECHO) \#\r
143         $(ECHO) \# $@ created.\r
144         $(ECHO) \#\r
145 \r
146 ifeq ($(CONFIG_BLD_XDC_CUSTOM),)\r
147   CONFIG_BLD_FILE = $(CONFIG_BLD_XDC_$(ISA))\r
148 else\r
149   CONFIG_BLD_FILE = $(CONFIG_BLD_XDC_CUSTOM)\r
150 endif\r
151 ifeq ($(PLATFORM_XDC_CUSTOM),)\r
152   PLATFORM_XDC_NAME = $(PLATFORM_XDC)\r
153 else\r
154   PLATFORM_XDC_NAME = $(PLATFORM_XDC_CUSTOM)\r
155 endif\r
156 \r
157 # XDC specific - assemble XDC-Configuro command\r
158 CONFIGURO_CMD = $(xdc_PATH)/xs xdc.tools.configuro --generationOnly -o $(CONFIGURO_DIR) -t $(TARGET_XDC) -p "$(PLATFORM_XDC_NAME)" \\r
159                -r $(PROFILE_$(CORE)) -c $(CODEGEN_PATH_A15) -b $(CONFIG_BLD_FILE) $(XDC_CFG_FILE_NAME)\r
160 _XDC_GREP_STRING = \"$(XDC_GREP_STRING)\"\r
161 EGREP_CMD = $(EGREP) -ivw $(XDC_GREP_STRING) $(XDCLNKCMD_FILE)\r
162 \r
163 ifneq ($(DEST_ROOT),)\r
164  DEST_ROOT += /\r
165 endif\r
166 # Invoke configuro for the rest of the components\r
167 #  NOTE: 1. String handling is having issues with various make versions when the \r
168 #           cammand is directly tried to be given below. Hence, as a work-around, \r
169 #           the command is re-directed to a file (shell or batch file) and then \r
170 #           executed\r
171 #        2. The linker.cmd file generated, includes the libraries generated by\r
172 #           XDC. An egrep to search for these and omit in the .cmd file is added\r
173 #           after configuro is done\r
174 #$(CFG_CFILE_XDC) : $(XDC_CFG_FILE)\r
175 xdc_configuro : $(XDC_CFG_FILE)\r
176         $(ECHO) \# Invoking configuro...\r
177         $(ECHO) -e $(CONFIGURO_CMD) > $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat\r
178 ifeq ($(OS),Windows_NT)\r
179         CACLS $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat /E /P Everyone:F\r
180         $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat\r
181 else\r
182         $(CHMOD) a+x $(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat\r
183         ./$(DEST_ROOT)maketemp_configuro_cmd_$(CORE).bat\r
184 endif\r
185 #       $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)\r
186 #       $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat\r
187 #       ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)\r
188 #       $(EGREP_CMD) > $(LNKCMD_FILE)\r
189 #       $(EGREP) -iv "$(XDC_GREP_STRING)" $(XDCLNKCMD_FILE) > $(LNKCMD_FILE)\r
190         $(ECHO) \# Configuro done!\r
191 \r
192 $(LNKCMD_FILE) :\r
193 #       $(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)\r
194 #       $(ECHO) @ $(EGREP_CMD) > maketemp_egrep_cmd.bat\r
195 #       ./maketemp_egrep_cmd.bat | $(CYGWINPATH)/bin/tail -n+3 > $(LNKCMD_FILE)\r
196 #       $(EGREP_CMD) > $(LNKCMD_FILE)\r
197  \r
198 ifndef MODULE_NAME\r
199 $(CONFIGURO_DIR)/package/cfg/$(CFG_COBJ_XDC) : $(CFG_C_XDC)\r
200         $(ECHO) \# Compiling generated $< to $@ ...\r
201         $(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -o $(CONFIGURO_DIR)/package/cfg/$(CFG_COBJ_XDC) $(CFG_C_XDC)\r
202 endif\r
203 \r
204 # Include dependency make files that were generated by $(CC)\r
205 -include $(SRCS:%.c=$(DEPDIR)/%.P)\r
206 # Nothing beyond this point\r