Merged from master, added a15 support for k2l, c66ak2e
[keystone-rtos/edma3_lld.git] / makerules / common.mk
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)
81  
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_EXERNAL_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)
133  
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) -f $(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 $(CORE) : $(OBJDIR) $(DEPDIR) $(LIBDIR) $(LIBDIR)/$(MODULE_NAME).$(LIBEXT) $(LIBDIR)/$(MODULE_NAME).$(LIBEXT_SO)
203 else
204 $(CORE) : $(OBJDIR) $(DEPDIR) $(LIBDIR) $(LIBDIR)/$(MODULE_NAME).$(LIBEXT)
205 endif
207 else
208 # Rules for application; this iteration is for an app
210 # Clean Object, Binary and Configuro generated directories
211 clean :
212         $(RM) -rf $(CONFIGURO_DIR)
213         $(RM) -f $(OBJDIR)/* $(DEPDIR)/*
215 # Create dependencies list to ultimately create application executable binary
216 $(CORE) : $(OBJDIR) $(BINDIR) $(DEPDIR) $(CONFIGURO_DIR) $(PKG_LIST) $(BINDIR)/$(APP_NAME)_$(CORE)_$(PROFILE_$(CORE)).$(EXEEXT)
218 endif
220 # Nothing beyond this point