1 # Filename: common.mk
2 #
3 # Common make file - This file has common rules and definitions that are common
4 # across platforms/cores/ISAs/SoCs
5 #
6 # This file needs to change when:
7 # 1. common rule/define has to be added or modified
8 #
10 #
11 # Include make paths and options for all supported targets/platforms
12 #
14 include $(ROOTDIR)/makerules/build_config.mk
15 include $(ROOTDIR)/makerules/env.mk
16 include $(ROOTDIR)/makerules/platform.mk
18 #.DEFAULT_GOAL := all
20 .PHONY : all clean gendirs m3video m3vpss c6xdsp a8host arm9
22 all : $(CORE)
24 # Define directories that are going to be created as a part of build process
25 ifdef MODULE_NAME
26 ifeq ($($(MODULE_NAME)_PLATFORM_DEPENDENCY),yes)
27 ifeq ($($(MODULE_NAME)_CORE_DEPENDENCY),yes)
28 DEPENDENCY_SUB_PATH = $(PLATFORM)/$(CORE)
29 else
30 DEPENDENCY_SUB_PATH = $(PLATFORM)/$(ISA)
31 endif
32 else
33 ifeq ($($(MODULE_NAME)_CORE_DEPENDENCY),yes)
34 DEPENDENCY_SUB_PATH = $(CORE)
35 else
36 DEPENDENCY_SUB_PATH = $(ISA)
37 endif
38 endif
39 endif
41 ifeq ($(DEST_ROOT),)
42 ifdef MODULE_NAME
43 OBJDIR = obj/$(DEPENDENCY_SUB_PATH)/$(PROFILE_$(CORE))
44 LIBDIR = lib/$(DEPENDENCY_SUB_PATH)/$(PROFILE_$(CORE))
45 else
46 OBJDIR = obj/$(PLATFORM)/$(CORE)/$(PROFILE_$(CORE))
47 BINDIR = bin/$(PLATFORM)
48 endif
49 else
50 ifdef MODULE_NAME
51 OBJDIR = $(DEST_ROOT)/$($(MODULE_NAME)_RELPATH)/obj/$(DEPENDENCY_SUB_PATH)/$(PROFILE_$(CORE))
52 LIBDIR = $(DEST_ROOT)/$($(MODULE_NAME)_RELPATH)/lib/$(DEPENDENCY_SUB_PATH)/$(PROFILE_$(CORE))
53 else
54 OBJDIR = $(DEST_ROOT)/$(APP_NAME)/obj/$(PLATFORM)/$(CORE)/$(PROFILE_$(CORE))
55 BINDIR = $(DEST_ROOT)/$(APP_NAME)/bin/$(PLATFORM)
56 endif
57 endif
59 CONFIGURO_DIRNAME = $(APP_NAME)_configuro
60 ifeq ($(XDC_CFG_DIR),)
61 CONFIGURO_DIR = $(OBJDIR)/$(CONFIGURO_DIRNAME)
62 XDC_CFG_FILE_NAME = $(XDC_CFG_FILE_$(CORE))
63 else
64 CONFIGURO_DIR = $(XDC_CFG_DIR)/configuro/$(PLATFORM)/$(CORE)/$(PROFILE_$(CORE))/$(CONFIGURO_DIRNAME)
65 # XDC_CFG_FILE_NAME = $(XDC_CFG_DIR)/$(XDC_CFG_FILE_$(CORE))
66 XDC_CFG_FILE_NAME = $(XDC_CFG_FILE_$(CORE))
67 endif
69 DEPDIR = $(OBJDIR)/.deps
70 DEPFILE = $(DEPDIR)/$(*F)
72 # Create directories
73 $(OBJDIR) :
74 $(MKDIR) -p $(OBJDIR)
76 $(DEPDIR) :
77 $(MKDIR) -p $(DEPDIR)
79 $(LIBDIR) :
80 $(MKDIR) -p $(LIBDIR)
82 $(BINDIR) :
83 $(MKDIR) -p $(BINDIR)
85 $(CONFIGURO_DIR) :
86 $(MKDIR) -p $(OBJDIR)
87 $(MKDIR) -p $(DEPDIR)
88 $(MKDIR) -p $(CONFIGURO_DIR)
90 #
91 # Common variables
92 #
94 # Assemble list of source file names
95 SRCS = $(SRCS_COMMON) $(SRCS_$(CORE)) $(SRCS_$(SOC)) $(SRCS_$(PLATFORM))
97 # Define search paths
98 VPATH = $(SRCDIR)
100 # Following 'if...' block is for an application.
101 ifndef MODULE_NAME
102 # Derive list of all packages from each of the components needed by the app
103 PKG_LIST = $(foreach COMP,$(COMP_LIST_$(CORE)),$($(COMP)_PKG_LIST))
105 # For each of the packages (or modules), get a list of source files that are
106 # marked to be compiled in app stage of the build (or in the context in the app)
107 SRCS_APPSTG_FILES = $(foreach PKG, $(PKG_LIST), $($(PKG)_APP_STAGE_FILES))
108 # The app has to compile package cfg source files in its context. The name
109 # of the file assumed is <MOD>_cfg.c under the top-level directory - i.e.
110 # specified by <MOD>_PATH variable
111 #SRCS_CFG = $(addsuffix _cfg.c,$(PKG_LIST))
112 SRCS += $(SRCS_APPSTG_FILES)
113 PKG_PATHS = $(foreach PKG,$(PKG_LIST),$($(PKG)_PATH))
114 VPATH += $(PKG_PATHS)
115 endif
117 # Change the extension from C to $(OBJEXT) and also add path
118 OBJ_PATHS = $(patsubst %.c, $(OBJDIR)/%.$(OBJEXT), $(SRCS))
119 OBJ_PATHS_SO = $(patsubst %.c, $(OBJDIR)/%.$(OBJEXT_SO), $(SRCS))
121 # Assemble include paths here
122 INCLUDE_EXTERNAL = $(foreach INCL,$(INCLUDE_EXTERNAL_INTERFACES),$($(INCL)_INCLUDE))
123 INCLUDE_ALL = $(CODEGEN_INCLUDE) $(INCDIR) $(INCLUDE_EXTERNAL)
125 # Add prefix "-I" to each of the include paths in INCLUDE_ALL
126 INCLUDES = $(addprefix -I,$(INCLUDE_ALL))
128 # Create rule to "make" all packages
129 .PHONY : $(PKG_LIST)
130 $(PKG_LIST) :
131 $(ECHO) \# Making $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$@...
132 $(MAKE) -C $($@_PATH)
134 # Get libraries for all the packages
135 # LIBS = $(foreach LIB,$(PKG_LIST),$(LIB).$(LIBEXT))
136 define GET_COMP_DEPENDENCY_SUB_PATH
137 ifeq ($$($(1)_PLATFORM_DEPENDENCY),yes)
138 ifeq ($$($(1)_CORE_DEPENDENCY),yes)
139 $(1)_DEPSUBPATH = $(PLATFORM)/$(CORE)
140 else
141 $(1)_DEPSUBPATH = $(PLATFORM)/$(ISA)
142 endif
143 else
144 ifeq ($$($(1)_CORE_DEPENDENCY),yes)
145 $(1)_DEPSUBPATH = $(CORE)
146 else
147 $(1)_DEPSUBPATH = $(ISA)
148 endif
149 endif
150 endef
152 $(foreach LIB,$(PKG_LIST),$(eval $(call GET_COMP_DEPENDENCY_SUB_PATH,$(LIB))))
154 ifeq ($(DEST_ROOT),)
155 LIB_PATHS = $(foreach LIB,$(PKG_LIST),$($(LIB)_PATH)/lib/$($(LIB)_DEPSUBPATH)/$(PROFILE_$(CORE))/$(LIB).$(LIBEXT))
156 else
157 LIB_PATHS = $(foreach LIB,$(PKG_LIST),$(DEST_ROOT)/$($(LIB)_RELPATH)/lib/$($(LIB)_DEPSUBPATH)/$(PROFILE_$(CORE))/$(LIB).$(LIBEXT))
158 endif
160 # XDC Specific defines
161 ifneq ($(XDC_CFG_FILE_$(CORE)),)
162 ifeq ($(PROFILE_$(CORE)),debug)
163 CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
164 endif
165 ifeq ($(PROFILE_$(CORE)),whole_program_debug)
166 CFG_CFILENAMEPART_XDC =p$(FORMAT_EXT)$(ISA)$(ENDIAN_EXT)
167 CFG_LNKFILENAMEPART_XDC=_x
168 endif
169 CFG_CFILE_XDC =$(patsubst %.cfg,%_$(CFG_CFILENAMEPART_XDC).c,$(XDC_CFG_FILE_$(CORE)))
170 CFG_C_XDC = $(addprefix $(CONFIGURO_DIR)/package/cfg/,$(CFG_CFILE_XDC))
171 XDCLNKCMD_FILE =$(patsubst %.c, %$(CFG_LNKFILENAMEPART_XDC).xdl, $(CFG_C_XDC))
172 CFG_COBJ_XDC = $(patsubst %.c,%.$(OBJEXT),$(CFG_CFILE_XDC))
173 XDC_CFG_BASE_FILE_NAME = $(basename $(notdir $(XDC_CFG_FILE_$(CORE))))
174 # OBJ_PATHS += $(CFG_COBJ_XDC)
175 LNKCMD_FILE = $(CONFIGURO_DIR)/linker_mod.cmd
176 ifeq ($(ISA),a15)
177 LNKCMD_FILE = $(CONFIGURO_DIR)/linker.cmd
178 endif
179 SPACE :=
180 SPACE +=
181 XDC_GREP_STRING = $(CONFIGURO_DIRNAME)
182 # XDC_GREP_STRING = $(subst $(SPACE),\|,$(COMP_LIST_$(CORE)))
183 # XDC_GREP_STRING += \|$(CONFIGURO_DIRNAME)
184 endif
186 # Include make rules for ISA that is built in this iteration
187 # eg: rules_m3.mk
188 ifneq ($(TOOLCHAIN_$(ISA)),)
189 TOOLCHAIN_SELECTION = $(TOOLCHAIN_$(ISA))_
190 endif
191 include $(ROOTDIR)/makerules/rules_$(TOOLCHAIN_SELECTION)$(ISA).mk
193 ifdef MODULE_NAME
194 # Rules for module; this iteration is for a module
196 # Clean Object and Library (archive) directories
197 clean :
198 $(RM) -rf $(OBJDIR)/* $(DEPDIR)/* $(LIBDIR)/*
200 # Create dependencies list to ultimately create module archive library file
201 ifeq ($(PLATFORM), $(filter $(PLATFORM),tci6636k2h-evm tci6638k2k-evm tci6630k2l-evm c66ak2e-evm))
202 ifeq ($(CORE),a15host)
203 $(CORE) : $(OBJDIR) $(DEPDIR) $(LIBDIR) $(LIBDIR)/$(MODULE_NAME).$(LIBEXT) $(LIBDIR)/$(MODULE_NAME).$(LIBEXT_SO)
204 else
205 $(CORE) : $(OBJDIR) $(DEPDIR) $(LIBDIR) $(LIBDIR)/$(MODULE_NAME).$(LIBEXT)
206 endif
207 else
208 $(CORE) : $(OBJDIR) $(DEPDIR) $(LIBDIR) $(LIBDIR)/$(MODULE_NAME).$(LIBEXT)
209 endif
211 else
212 # Rules for application; this iteration is for an app
214 # Clean Object, Binary and Configuro generated directories
215 clean :
216 $(RM) -rf $(CONFIGURO_DIR)
217 $(RM) -rf $(OBJDIR)/* $(DEPDIR)/*
219 # Create dependencies list to ultimately create application executable binary
220 $(CORE) : $(OBJDIR) $(BINDIR) $(DEPDIR) $(CONFIGURO_DIR) $(PKG_LIST) $(BINDIR)/$(APP_NAME)_$(CORE)_$(PROFILE_$(CORE)).$(EXEEXT)
222 endif
224 # Nothing beyond this point