1AINCLUDE_DIRS	 = $(LINCLUDES)	   $(EINCLUDES)     $(GINCLUDES)
2ALIBRARY_DIRS	 = $(LLIBRARY_DIRS) $(ELIBRARY_DIRS) $(GLIBRARY_DIRS)
3ALIBRARIES		 = $(LLIBRARIES)	   $(ELIBRARIES)    $(GLIBRARIES)
4
5# ISDBG_LIBS is in a location that cannot be searched by vpath
6ALIBRARIES_DEPEND = $(filter-out $(ISDBG_LIBS),$(ALIBRARIES))
7
8# Convert Unix and Windows format paths
9AINCLUDE_DIRS_M	:= $(if $(filter-out 	,$(AINCLUDE_DIRS)),$(call cygpathm_multi,$(AINCLUDE_DIRS)))
10ALIBRARY_DIRS_M	:= $(if $(filter-out 	,$(ALIBRARY_DIRS)),$(call cygpathm_multi,$(ALIBRARY_DIRS)))
11ALIBRARY_DIRS_U	:= $(if $(filter-out 	,$(ALIBRARY_DIRS)),$(call cygpathu_multi,$(ALIBRARY_DIRS)))
12
13#
14# VPATH does not support the path name included white space like "C:/Program Files"
15#	Please, be careful !!!
16#
17ifdef	MSYSTEM
18ALIBVPATH		 = $(subst \:,\ ,$(subst $(SPACE),:,$(ALIBRARY_DIRS)))
19else
20ALIBVPATH		 = $(foreach DIR,$(ALIBRARY_DIRS_U),$(call decode_specialchar,$(DIR)))
21endif
22
23vpath	%.a		$(ALIBVPATH)
24vpath	%.o		$(ALIBVPATH)
25
26INCLUDE_DIRS	 = $(call decode_specialchar,$(foreach DIR,$(AINCLUDE_DIRS_M),-I'$(DIR)'))
27LIBRARY_DIRS	 = $(call decode_specialchar,$(foreach DIR,$(ALIBRARY_DIRS_M),-L'$(DIR)'))
28LIBRARIES		 = $(subst \ -l,\ ,$(addprefix -l,$(ALIBRARIES)))
29INCLUDES		 = -gccinc -I. $(INCLUDE_DIRS)
30
31#
32# Generate dependency files
33#
34
35ifdef	MSYSTEM
36DEPEND_RULE		 = $(QUOTE)/ARM_EABI_Support/d;s/\\x0D//g;s/\\([^ ]\\)\\\\\([^ ]\\)/\\1\\/\\2/g;$(QUOTE)
37else
38DEPEND_RULE		 = $(QUOTE)/ARM_EABI_Support/d;s/\\x0D//g;s!\\([A-Za-z]\\):[\\\\\/]!$(CYGPATH_MOUNTPOINT)\\/\\l\\1\\/!g;s/\\([^ ]\\)\\\\\([^ ]\\)/\\1\\/\\2/g;$(QUOTE)
39endif
40
41ifneq ($(MAKEFLAGS_ALWAYS),TRUE)
42define MOVE_SRC_DEPEND
43	$(SED) -e $(DEPEND_RULE) $(dir $@)/$(*F).d > $(DEPENDDIR)/$(*F).d && $(RM) $(dir $@)/$(*F).d
44endef
45else
46define MOVE_SRC_DEPEND
47$(EMPTY)
48endef
49endif
50
51
52#
53# Precompiled header
54#
55
56#----------------------------------------
57# if USE_STD_PCHDR == TRUE
58ifeq ($(USE_STD_PCHDR),TRUE)
59
60.PHONY:	sdk-mch
61
62PCHDR_C_DEFS	 = $(sort $(filter -DSDK_%,$(CCFLAGS)))
63PCHDR_C_NODEF	 = $(filter-out -D%,$(CCFLAGS))
64PCHDR_C_NAME	 = $(subst $(SPACE),,$(subst -DSDK_,.,$(subst =,-,$(PCHDR_C_DEFS))))
65PCHDR_C_NAME    := $(subst TWLHYB,HYB,$(subst TWLLTD,LTD,$(PCHDR_C_NAME)))
66PCHDR_C_NAME    := $(subst ARM9,A9,$(subst ARM7,A7,$(PCHDR_C_NAME)))
67PCHDR_C_NAME    := $(subst RELEASE,REL,$(subst DEBUG,DBG,$(subst FINALROM,ROM,$(PCHDR_C_NAME))))
68PCHDR_C_NAME    := $(subst CW_FORCE_EXPORT_SUPPORT,CWFES,$(subst CW_MAJOR_VER,CWVER,$(PCHDR_C_NAME)))
69PCHDR_C_NAME    := $(subst CODE_ARM,ARM,$(subst CODE_THUMB,THUMB,$(PCHDR_C_NAME)))
70PCHDR_C_NAME    := $(subst PROFILE_CALLTRACE,PRCT,$(subst PROFILE_FUNCTIONCOST,PRFC,$(PCHDR_C_NAME)))
71PCHDR_C_NAME    := $(subst LINK_ISTD,ISTD,$(subst NITRO,NTR,$(PCHDR_C_NAME)))
72PCHDR_C_BASE	 = $(PCHDR_CACHE)/$(notdir $(PCHDR_SRC))$(PCHDR_C_NAME).C
73PCHDR_C_MCH		 = $(PCHDR_C_BASE).mch
74PCHDR_C_DEPEND	 = $(PCHDR_C_BASE).depend
75PCHDR_CCFLAGS	 = -include $(call empath,$(PCHDR_C_MCH))
76CCFLAGS_NOLDEF	 = $(PCHDR_C_DEFS) $(PCHDR_C_NODEF)
77
78PCHDR_CXX_DEFS	 = $(sort $(filter -DSDK_%,$(CXXFLAGS)))
79PCHDR_CXX_NODEF	 = $(filter-out -D%,$(CXXFLAGS))
80PCHDR_CXX_NAME	 = $(subst $(SPACE),,$(subst -DSDK_,.,$(subst =,-,$(PCHDR_CXX_DEFS))))
81PCHDR_CXX_NAME  := $(subst TWLHYB,HYB,$(subst TWLLTD,LTD,$(PCHDR_CXX_NAME)))
82PCHDR_CXX_NAME  := $(subst ARM9,A9,$(subst ARM7,A7,$(PCHDR_CXX_NAME)))
83PCHDR_CXX_NAME  := $(subst RELEASE,REL,$(subst DEBUG,DBG,$(subst FINALROM,ROM,$(PCHDR_CXX_NAME))))
84PCHDR_CXX_NAME  := $(subst CW_FORCE_EXPORT_SUPPORT,CWFES,$(subst CW_MAJOR_VER,CWVER,$(PCHDR_CXX_NAME)))
85PCHDR_CXX_NAME  := $(subst CODE_ARM,ARM,$(subst CODE_THUMB,THUMB,$(PCHDR_CXX_NAME)))
86PCHDR_CXX_NAME  := $(subst PROFILE_CALLTRACE,PRCT,$(subst PROFILE_FUNCTIONCOST,PRFC,$(PCHDR_CXX_NAME)))
87PCHDR_CXX_NAME  := $(subst LINK_ISTD,ISTD,$(subst NITRO,NTR,$(PCHDR_CXX_NAME)))
88PCHDR_CXX_BASE	 = $(PCHDR_CACHE)/$(notdir $(PCHDR_SRC))$(PCHDR_CXX_NAME).CXX
89PCHDR_CXX_MCH	 = $(PCHDR_CXX_BASE).mch
90PCHDR_CXX_DEPEND = $(PCHDR_CXX_BASE).depend
91PCHDR_CXXFLAGS	 = -include $(call empath,$(PCHDR_CXX_MCH))
92CXXFLAGS_NOLDEF	 = $(PCHDR_CXX_DEFS) $(PCHDR_CXX_NODEF)
93
94
95#----------------------------------------
96# if MAKECMDGOALS contains build_and_install or sdk-mch
97ifneq	($(filter build_and_install sdk-mch,$(MAKECMDGOALS)),)
98
99SYSTEM_GINCLUDES_M	 = $(if $(filter-out 	,$(SYSTEM_GINCLUDES)),$(call cygpathm_multi,$(SYSTEM_GINCLUDES)))
100SYSTEM_INCLUDE_DIRS	 = $(call decode_specialchar,$(foreach DIR,$(SYSTEM_GINCLUDES_M),-I'$(DIR)'))
101SYSTEM_INCLUDES		 = -gccinc -I. $(SYSTEM_INCLUDE_DIRS)
102
103
104## $(call BUILD_PCHDR,$(MCH))
105ifdef SILENT
106define BUILD_PCHDR_ECHO
107	echo $(TWLSDK_MSG_MAKE_MCH) $(1)
108endef
109else
110define BUILD_PCHDR_ECHO
111	true
112endef
113endif
114
115.DELETE_ON_ERROR: $(PCHDR_CACHE)/%_lock
116
117## $(call BUILD_PCHDR,$(BASE),$(CCFLAGS))
118# $(BASE) must be a full path
119define BUILD_PCHDR
120	$(call BUILD_PCHDR_ECHO,$(notdir $(1).mch)) &&	\
121	$(CP) $(PCHDR_SRC) $(1).h &&			\
122	($(CD) $(dir $(1).mch) &&				\
123	 $(RM) $(1).mch	&&						\
124	 $(RM) $(1).depend &&					\
125	 $(CC) $(subst -include ,-DSDK_PCHDR_DUMMY_,$(2)) $(SYSTEM_INCLUDES) -MD -precompile $(notdir $(1).m) $(call empath,$(1).h)) && \
126	 $(MV) $(1).m $(1).mch &&				\
127	(($(ECHO) $(1).mch: $(PCHDR_SRC) \\; $(SED) -e '1d' -e $(DEPEND_RULE) $(1).d) > $(1).dep \
128	  && $(MV) $(1).dep $(1).depend			\
129	  && $(RM) $(1).d $(1).h)
130endef
131
132## $(call J_SAFE_BUILD_PCHDR,$(BASE),$(CCFLAGS),CCFLAGS)
133define J_SAFE_BUILD_PCHDR
134	trap 'rm -rf $(1)_lock 2> /dev/null ; exit 1' 1 2 3 15; \
135	until mkdir $(1)_lock 2> /dev/null; do					\
136		sleep 1;											\
137	done;													\
138	$(REMAKE) sdk-mch $(3)="$(subst ",\",$(2))" $(4)=TRUE;	\
139	rmdir $(1)_lock;										\
140	trap 1 2 3 15
141endef
142
143
144# precompiled header for C
145
146#----------------------------------------
147# if OBJS_CC != ""
148ifneq	($(strip $(OBJS_CC)),)
149
150-include $(PCHDR_C_DEPEND)
151
152$(PCHDR_C_DEPEND): $(PCHDR_C_MCH)
153sdk-mch: $(PCHDR_C_MCH)
154
155$(PCHDR_C_MCH):
156ifneq	($(filter sdk-mch,$(MAKECMDGOALS)),)
157ifeq	($(PCHDR_C_FLAG),TRUE)
158	$(call BUILD_PCHDR,$(PCHDR_C_BASE),$(CCFLAGS_NOLDEF))
159endif
160else
161	+$(if $(findstring j,$(MAKEFLAGS)),														\
162		$(call J_SAFE_BUILD_PCHDR,$(PCHDR_C_BASE),$(CCFLAGS_NOLDEF),CCFLAGS,PCHDR_C_FLAG),	\
163		$(call BUILD_PCHDR,$(PCHDR_C_BASE),$(CCFLAGS_NOLDEF)) )
164endif
165
166endif
167# endif OBJS_CC != ""
168#----------------------------------------
169
170
171# precompiled header for C++
172
173#----------------------------------------
174# if OBJS_CXX != ""
175ifneq	($(strip $(OBJS_CXX)),)
176
177-include $(PCHDR_CXX_DEPEND)
178
179$(PCHDR_CXX_DEPEND): $(PCHDR_CXX_MCH)
180sdk-mch: $(PCHDR_CXX_MCH)
181
182$(PCHDR_CXX_MCH):
183ifneq	($(filter sdk-mch,$(MAKECMDGOALS)),)
184ifeq	($(PCHDR_CXX_FLAG),TRUE)
185	$(call BUILD_PCHDR,$(PCHDR_CXX_BASE),$(CXXFLAGS_NOLDEF))
186endif
187else
188	+$(if $(findstring j,$(MAKEFLAGS)),																\
189		$(call J_SAFE_BUILD_PCHDR,$(PCHDR_CXX_BASE),$(CXXFLAGS_NOLDEF),CXXFLAGS,PCHDR_CXX_FLAG),	\
190		$(call BUILD_PCHDR,$(PCHDR_CXX_BASE),$(CXXFLAGS_NOLDEF)) )
191endif
192
193endif
194# endif OBJS_CXX != ""
195#----------------------------------------
196
197endif
198# endif MAKECMDGOALS contain build_and_install or sdk-mch
199#----------------------------------------
200
201endif
202# endif USE_STD_PCHDR == TRUE
203#----------------------------------------
204
205
206
207#----------------------------------------------------------------------------
208# Get SDK_CW_BUILD_VERSION SDK_CW_BUILD_NUMBER
209#
210# IRIS	V0.2 Hotfix 1
211#	SDK_CW_BUILD_VERSION_CC=2.0
212#	SDK_CW_BUILD_VERSION_LD=2.0
213#	SDK_CW_BUILD_NUMBER_CC=0038
214#	SDK_CW_BUILD_NUMBER_LD=0050
215#
216# NITRO V0.3
217#	SDK_CW_BUILD_NUMBER_CC=0038
218#	SDK_CW_BUILD_NUMBER_LD=0056
219#
220# NITRO V0.4.1
221#	SDK_CW_BUILD_NUMBER_CC=0043
222#	SDK_CW_BUILD_NUMBER_LD=0057
223#
224# NITRO V0.5
225#	SDK_CW_BUILD_NUMBER_CC=0046
226#	SDK_CW_BUILD_NUMBER_LD=0058
227#
228# NITRO V0.5 + HotFix1
229#	SDK_CW_BUILD_NUMBER_CC=0049
230#	SDK_CW_BUILD_NUMBER_LD=0061
231#
232# NITRO V0.6
233#	SDK_CW_BUILD_NUMBER_CC=0050
234#	SDK_CW_BUILD_NUMBER_LD=0062
235#
236# NITRO V0.6.1
237#	SDK_CW_BUILD_NUMBER_CC=0050
238#	SDK_CW_BUILD_NUMBER_LD=0063
239#
240# NITRO V0.7
241#	SDK_CW_BUILD_NUMBER_CC=0050
242#	SDK_CW_BUILD_NUMBER_LD=0063
243#
244# NITRO V1.0
245#	SDK_CW_BUILD_NUMBER_CC=0056
246#	SDK_CW_BUILD_NUMBER_LD=0067
247#
248# NITRO V1.0.2
249#	SDK_CW_BUILD_NUMBER_CC=0068
250#	SDK_CW_BUILD_NUMBER_LD=0068
251#
252# NITRO V1.2
253#	SDK_CW_BUILD_NUMBER_CC=0073
254#	SDK_CW_BUILD_NUMBER_LD=0072
255#
256# NITRO V1.2SP1
257#	SDK_CW_BUILD_NUMBER_CC=0074
258#	SDK_CW_BUILD_NUMBER_LD=0072
259#
260# NITRO V1.2SP2+patch
261#	SDK_CW_BUILD_NUMBER_CC=0080
262#	SDK_CW_BUILD_NUMBER_LD=0074
263#
264# NITRO V1.2SP3
265#	SDK_CW_BUILD_NUMBER_CC=0084
266#	SDK_CW_BUILD_NUMBER_LD=0077
267#
268# NITRO V1.2SP4
269#	SDK_CW_BUILD_NUMBER_CC=0087
270#	SDK_CW_BUILD_NUMBER_LD=7702
271#
272# NITRO V2.0beta
273#	SDK_CW_BUILD_VERSION_CC=3.0
274#	SDK_CW_BUILD_VERSION_LD=2.0
275#	SDK_CW_BUILD_NUMBER_CC=0107
276#	SDK_CW_BUILD_NUMBER_LD=0077
277#
278# NITRO V2.0
279#	SDK_CW_BUILD_NUMBER_CC=0114
280#	SDK_CW_BUILD_NUMBER_LD=0082
281#
282
283
284ifneq	($(findstring $(MAKECMDGOALS),build_and_install make-verinfo clean-verinfo),)
285
286.PHONY: make-verinfo
287make-verinfo: $(SDK_VERINFO_CW_CC) $(SDK_VERINFO_CW_LD)
288
289$(SDK_VERINFO_CW_CC): $(MWCC)
290ifdef SILENT
291	echo $(TWLSDK_MSG_VERSION) $@
292endif
293	@$(CC) -version | \
294	 $(SED) -e $(QUOTE)/^Version /!d;s/\(build [0-9]\{2,4\}\) /\100 /;s/^Version \([0-9.]*\).*build \([0-9]*\).*(build \([0-9]*\)).*/SDK_CW_BUILD_VERSION_CC=\1\nSDK_CW_BUILD_NUMBER_CC=\3\nSDK_CW_BUILD_NUMBER2_CC=\2/i;$(QUOTE) >$(SDK_VERINFO_CW_CC)
295	@$(TOUCH) -r $(CC) $(SDK_VERINFO_CW_CC)
296
297$(SDK_VERINFO_CW_LD): $(MWLD)
298ifdef SILENT
299	echo $(TWLSDK_MSG_VERSION) $@
300endif
301	@$(LD) -version | \
302	 $(SED) -e $(QUOTE)/^Version /!d;s/\(build [0-9]\{2,4\}\) /\100 /;s/^Version \([0-9.]*\).*build \([0-9]*\).*(build \([0-9]*\)).*/SDK_CW_BUILD_VERSION_LD=\1\nSDK_CW_BUILD_NUMBER_LD=\3\nSDK_CW_BUILD_NUMBER2_LD=\2/i;$(QUOTE) >$(SDK_VERINFO_CW_LD)
303	@$(TOUCH) -r $(LD) $(SDK_VERINFO_CW_LD)
304
305endif
306
307.PHONY: clean-verinfo
308clean-verinfo:
309	@$(RM) $(SDK_VERINFO_CW_CC) $(SDK_VERINFO_CW_LD)
310
311
312