1#! make -f
2#----------------------------------------------------------------------------
3#  Project:  TwlSDK
4#  File:     commondefs.cctype.CW
5#
6#  Copyright 2007-2008 Nintendo.  All rights reserved.
7#
8# These coded instructions, statements, and computer programs contain
9# proprietary information of Nintendo of America Inc. and/or Nintendo
10# Company Ltd., and are protected by Federal copyright law.  They may
11# not be disclosed to third parties or copied or duplicated in any form,
12# in whole or in part, without the prior written consent of Nintendo.
13#
14# $Date:: 2009-02-16#$
15# $Rev: 10025 $
16# $Author: okubata_ryoma $
17#----------------------------------------------------------------------------
18
19TWL_STD_PCHDR	?= True
20PCHDR_SRC		?= $(ROOT)/include/twl.h
21
22#----------------------------------------------------------------------------
23#CWFOLDER_IRIS	?= D:\Program Files\Freescale\CW for NINTENDO DS V2.0
24#CWFOLDER_TWL	?= $(CWFOLDER_IRIS)
25CWFOLDER_TWL	?= $(CWFOLDER_NITRO)
26LM_LICENSE_FILE	:= $(subst /,\,$(CWFOLDER_TWL))\license.dat
27CW_ROOT			:= $(subst $(SPACE),\ ,$(subst \,/,$(CWFOLDER_TWL)))
28CW_BINDIR		:= $(call eupath,$(CW_ROOT))/ARM_Tools/Command_Line_Tools
29CW_ARMDIR		:= $(CW_ROOT)/ARM_EABI_Support
30
31#----------------------------------------------------------------------------
32SDK_VERINFO_CW_CC	?= $(TWL_BUILDTOOLSDIR)/verinfo.cw.cc
33SDK_VERINFO_CW_LD	?= $(TWL_BUILDTOOLSDIR)/verinfo.cw.ld
34SDK_VERINFO_CC		:= $(SDK_VERINFO_CW_CC)
35SDK_VERINFO_LD		:= $(SDK_VERINFO_CW_LD)
36
37ifneq	($(filter build_and_install sdk-mch,$(MAKECMDGOALS)),)
38
39-include $(SDK_VERINFO_CW_CC) $(SDK_VERINFO_CW_LD)
40#--------Support for CW2.0beta2 and later versions
41ifndef	SDK_CW_BUILD_VERSION_CC
42#--------If SDK_CW_BUILD_VERSION_CC is not defined, use make to create verinfo
43MAKE_VERINFO	:= $(shell $(REMAKE) make-verinfo)
44-include $(SDK_VERINFO_CW_CC) $(SDK_VERINFO_CW_LD)
45endif
46
47SDK_BUILD_VERSION_CC	:= $(SDK_CW_BUILD_VERSION_CC)
48SDK_BUILD_NUMBER_CC		:= $(SDK_CW_BUILD_NUMBER_CC)
49SDK_BUILD_NUMBER2_CC	:= $(SDK_CW_BUILD_NUMBER2_CC)
50SDK_BUILD_VERSION_LD	:= $(SDK_CW_BUILD_VERSION_LD)
51SDK_BUILD_NUMBER_LD		:= $(SDK_CW_BUILD_NUMBER_LD)
52SDK_BUILD_NUMBER2_LD	:= $(SDK_CW_BUILD_NUMBER2_LD)
53
54ifeq		($(shell expr "$(SDK_CW_BUILD_VERSION_CC)" ">=" 4.0),1)
55CW_MAJOR_VER	?= 3
56endif
57ifeq		($(shell expr "$(SDK_CW_BUILD_VERSION_CC)" "==" 3.0),1)
58CW_MAJOR_VER	?= 2
59endif
60# "__declspec(force_export)" support
61ifeq		($(shell expr "$(SDK_CW_BUILD_VERSION_CC)" ">=" 3.0),1)
62SDK_CW_FORCE_EXPORT_SUPPORT	:= yes
63endif
64endif
65CW_MAJOR_VER	?= 1
66
67######## IRIS V0.2 Hotfix 1
68######## TWL V0.3
69#CW_AVOID_STRB		:= -avoid_strb all,noerr
70#
71######## TWL V0.4 or other
72CW_AVOID_STRB		:= -avoid_byte strb -warn_byte none
73#CW_AVOID_STRB		:= -avoid_byte strb -warn_byte all
74#
75
76#----------------------------------------------------------------------------
77
78MWCC			:= $(CW_BINDIR)/mwccarm.exe
79MWAS			:= $(CW_BINDIR)/mwasmarm.exe
80MWLD			:= $(CW_BINDIR)/mwldarm.exe
81MWAR			:= $(MWLD)
82
83CC			:= $(MWCC)
84AS			:= $(MWAS)
85LD			:= $(MWLD)
86AR			:= $(MWAR)
87
88ELFTOBIN			:= $(CW_BINDIR)/elftobin.exe
89ELFTOBIN_TYPE		= $(TWL_PLATFORM)$(CODEGEN_ARCH)/$(TWL_BUILD_DIR)
90ELFTOBIN_ARM9		?= $(TWL_COMPONENTSDIR)/printserver/$(TWL_BUILDTYPE_ARM9)/printserver.$(TWL_ELF_EXT)
91ELFTOBIN_ARM7		?= $(TWL_COMPONENTSDIR)/ferret/$(TWL_BUILDTYPE_ARM7)/ferret.$(TWL_ELF_EXT)
92ELFTOBIN_ROMHEADER	?= $(TWL_TOOLSDIR)/elftobin/romHeader.bin
93
94#----------------------------------------------------------------------------
95#  Workaround flags
96#	SDK_CW_WARNOFF_SAFESTRB	: use code32.h to wipe warning STRB out
97#	SDK_CW_WA_OPT4		: workaround for -O4
98#	SDK_CW_WA_CONSTPOOLS	: workaround for CW 'ConstantPools.c'line: 346
99#	SDK_CW_WA_OPT_BLX	: workaround for blxeq,blxne with opt>=2
100#	SDK_CW_WA_LIBCXX	: workaround for 'C++' libname in lcf
101#
102
103#--- flags ---
104ifeq	($(TWL_PLATFORM),TEG)
105SDK_CW_WARNOFF_SAFESTRB := yes
106else
107SDK_CW_WARNOFF_SAFESTRB	:=
108endif
109
110######## IRIS V0.2 Hotfix 1
111######## TWL V0.3
112######## TWL V0.4.1
113#SDK_CW_WA_OPT4		:= yes
114#SDK_CW_WA_CONSTPOOLS	:= yes
115#SDK_CW_WA_OPT_BLX	:= yes
116######## TWL V0.5
117######## TWL V0.5 + HotFix1
118######## TWL V0.6
119#SDK_CW_WA_LIBCXX	:= yes
120
121#-----------------------------------
122#
123ifdef	SDK_CW_WA_OPT_BLX
124ifdef	TWL_BLXCHECKED
125#	Workaround by pragma
126MACRO_FLAGS	+= -DSDK_CW_WA_OPT_BLX
127else
128#	Workaround by option
129SDK_CW_AVOID_ARM_ARCH5	:= yes
130endif
131endif
132
133ifdef	SDK_CW_WARNOFF_SAFESTRB
134MACRO_FLAGS	+= -DSDK_CW_WARNOFF_SAFESTRB
135endif
136
137ifdef	SDK_CW_WA_OPT4
138ifeq	($(CODEGEN_CC),ARM)
139MACRO_FLAGS	+= $(if $(filter DEBUG,$(TWL_BUILD_TYPE)),,-DSDK_CW_WA_OPT4)
140endif
141endif
142
143ifdef	SDK_CW_WA_CONSTPOOLS
144ifeq	($(CODEGEN_CC),THUMB)
145MACRO_FLAGS	+= $(if $(filter DEBUG,$(TWL_BUILD_TYPE)),,-DSDK_CW_WA_CONSTPOOLS)
146endif
147endif
148
149ifdef	SDK_CW_FORCE_EXPORT_SUPPORT
150MACRO_FLAGS   +=  -DSDK_CW_FORCE_EXPORT_SUPPORT
151endif
152
153#----------------------------------------------------------------------------
154# SDK small build
155
156ifdef	SDK_SMALL_BUILD
157MACRO_FLAGS	+=	-DSDK_SMALL_BUILD
158endif
159
160#----------------------------------------------------------------------------
161#  Workaround flags
162#	SDK_TEG_WA_VBLANK	: workaround TEG vblank problems
163#
164
165ifeq	($(TWL_PLATFORM),TEG)
166MACRO_FLAGS	+= -DSDK_TEG_WA_VBLANK
167endif
168
169
170#----------------------------------------------------------------------------
171######## IRIS V0.2 Hotfix 1
172######## TWL V0.3
173######## TWL V0.4
174#CW_LIBNAME_RULE_A   := ARM
175#CW_LIBNAME_RULE_T   := Thumb
176#CW_LIBNAME_RULE_AI  := ARM_i
177#CW_LIBNAME_RULE_RA  := ARM_Runtime
178#CW_LIBNAME_RULE_RT  := Thumb_Runtime
179#CW_LIBNAME_RULE_RAI := ARM_Runtime_i
180######## TWL V0.5 or other
181CW_LIBNAME_RULE_A   := NITRO_A
182CW_LIBNAME_RULE_T   := NITRO_T
183CW_LIBNAME_RULE_AI  := NITRO_Ai
184CW_LIBNAME_RULE_RA  := NITRO_Runtime_A
185CW_LIBNAME_RULE_RT  := NITRO_Runtime_T
186CW_LIBNAME_RULE_RAI := NITRO_Runtime_Ai
187#
188
189CW_INCDIRS	 = $(CW_ARMDIR)/msl/MSL_C/MSL_ARM/Include					\
190			   $(CW_ARMDIR)/msl/MSL_C/MSL_Common/Include				\
191			   $(CW_ARMDIR)/msl/MSL_C/MSL_Common_Embedded/Math/Include	\
192			   $(CW_ARMDIR)/msl/MSL_C++/MSL_ARM/Include					\
193			   $(CW_ARMDIR)/msl/MSL_C++/MSL_Common/Include				\
194			   $(CW_ARMDIR)/msl/MSL_Extras/MSL_Common/Include			\
195			   $(CW_ARMDIR)/Profiler/include							\
196			   $(CW_ARMDIR)/Runtime/Runtime_ARM/Runtime_NITRO/Common_Includes
197#--------Because the Runtime directory was changed in versions CW2.0beta2 and later
198ifneq		($(CW_MAJOR_VER),1)
199CW_INCDIRS	+= $(CW_ARMDIR)/msl/MSL_Extras/MSL_ARM/Include
200endif
201
202CW_CXX		= $(if $(SDK_CW_WA_LIBCXX),CXX,CPP)
203CW_LIBCXX_DIR	= $(if $(SDK_CW_WA_LIBCXX),$(ROOT)/lib/CodeWarrior,$(CW_ARMDIR)/msl/MSL_C++/MSL_ARM/Lib)
204#--------Because the Runtime directory was changed in versions CW2.0beta2 and later
205ifneq		($(CW_MAJOR_VER),1)
206CW_LIBDIRS	?= $(CW_ARMDIR)/msl/MSL_C/MSL_ARM/Lib			\
207		   $(CW_LIBCXX_DIR)					\
208		   $(CW_ARMDIR)/msl/MSL_Extras/MSL_ARM/Lib 		\
209		   $(CW_ARMDIR)/Runtime/Runtime_ARM/Runtime_NITRO/Lib	\
210		   $(CW_ARMDIR)/Mathlib/lib
211endif
212CW_LIBDIRS	?= $(CW_ARMDIR)/msl/MSL_C/MSL_ARM/Lib			\
213		   $(CW_LIBCXX_DIR)					\
214		   $(CW_ARMDIR)/msl/MSL_Extras/MSL_ARM/Lib 		\
215		   $(CW_ARMDIR)/Runtime/Lib				\
216		   $(CW_ARMDIR)/Mathlib/lib
217
218ifeq		($(CODEGEN_PROC)-$(TWL_PLATFORM),ARM9-TEG)
219CW_SUFFIX	= _LE_strb.a
220else
221CW_SUFFIX	= _LE.a
222endif
223
224ifeq		($(CODEGEN_PROC),ARM9)
225CW_LIBFP	?= FP_fastI_v5t_LE.a
226# CW_LIBFP	?= FP_fixedI_v5t_LE.a
227# CW_LIBFP	?= FP_flush0_v5t_LE.a
228# CW_LIBFP	?= FP_fullI_v5t_LE.a
229else
230CW_LIBFP	?= FP_fastI_v4t_LE.a
231# CW_LIBFP	?= FP_fixedI_v4t_LE.a
232# CW_LIBFP	?= FP_flush0_v4t_LE.a
233# CW_LIBFP	?= FP_fullI_v4t_LE.a
234endif
235
236CW_LIBCXX_ARM	= MSL_$(CW_CXX)_$(CW_LIBNAME_RULE_AI)$(CW_SUFFIX)
237
238CW_LIBS_ARM	= MSL_C_$(CW_LIBNAME_RULE_AI)$(CW_SUFFIX)		\
239		  MSL_Extras_$(CW_LIBNAME_RULE_AI)$(CW_SUFFIX)		\
240		  $(CW_LIBCXX_ARM)					\
241		  $(CW_LIBFP)						\
242		  $(CW_LIBNAME_RULE_RAI)$(CW_SUFFIX)
243
244# Workaround for Byte Access: Don't use thumb libraries if ARM9-TEG
245ifeq		($(CODEGEN_PROC)-$(TWL_PLATFORM),ARM9-TEG)
246
247CW_LIBCXX_THUMB = $(CW_LIBCXX_ARM)
248
249CW_LIBS_THUMB	= $(CW_LIBS_ARM)
250
251else
252
253CW_LIBCXX_THUMB = MSL_$(CW_CXX)_$(CW_LIBNAME_RULE_T)_LE.a
254
255CW_LIBS_THUMB	= MSL_C_$(CW_LIBNAME_RULE_T)_LE.a			\
256		  MSL_Extras_$(CW_LIBNAME_RULE_T)_LE.a			\
257		  $(CW_LIBCXX_THUMB)					\
258		  $(CW_LIBFP)						\
259		  $(CW_LIBNAME_RULE_RT)_LE.a
260endif
261
262ifeq	($(CODEGEN_PROC),ARM9)
263#STUBS_LIBS	+= libstubscw$(TWL_LIBSUFFIX).a
264else #	($(CODEGEN_PROC),ARM7)
265#STUBS_LIBS	+= libstubscw_sp$(TWL_LIBSUFFIX).a
266endif
267	$(ECHO) "==== test";
268
269#----------------------------------------------------------------------------
270#  Switch by codegen target
271#    TWL_PLATFORM  TEG/TS
272#    TWL_MEMSIZE   4M/8M
273#    CODEGEN_PROC    ARM7/ARM9
274#    CODEGEN_CC      ARM/THUMB
275#    CODEGEN_AS      ARM/THUMB
276#
277
278MACRO_FLAGS	+= -DSDK_$(TWL_PLATFORM)  \
279		   -DSDK_$(TWL_MEMSIZE)   \
280		   -DSDK_$(CODEGEN_PROC)
281
282MACRO_FLAGS_CC	+= -DSDK_CODE_$(CODEGEN_CC)
283MACRO_FLAGS_AS	+= -DSDK_CODE_$(CODEGEN_AS)
284
285
286#-------------------------------------- CODEGEN_PROC ARM9/ARM7
287
288CCFLAGS_PROC_ARM9 = $(if $(SDK_CW_AVOID_ARM_ARCH5),arm7tdmi,arm946e)
289
290
291CCFLAGS_PROC	 = -proc $(if $(filter ARM9,$(CODEGEN_PROC)),$(CCFLAGS_PROC_ARM9),arm7tdmi)
292ASFLAGS_PROC	 = -proc $(if $(filter ARM9,$(CODEGEN_PROC)),arm5TE,arm4T)
293
294#-------------------------------------- TWL_CODEGEN(=CODEGEN_CC) ARM/THUMB
295
296CC_LIBS	 	= $(if $(filter ARM,$(CODEGEN_CC)),$(CW_LIBS_ARM),$(CW_LIBS_THUMB))
297
298#-------------------------------------- CODEGEN_CC  ARM/THUMB
299
300CCFLAGS_ISET	 = $(if $(filter THUMB,$(CODEGEN_CC)),-thumb,-nothumb)
301
302#-------------------------------------- CODEGEN_AS  ARM/THUMB
303
304ASFLAGS_ISET	 = $(if $(filter THUMB,$(CODEGEN_AS)),-16,-32)
305
306CCFLAGS_ARCH	?= $(CCFLAGS_PROC) $(CCFLAGS_ISET) -nopic -nopid -interworking
307ASFLAGS_ARCH	?= $(ASFLAGS_PROC) $(ASFLAGS_ISET)
308LDFLAGS_ARCH	?= $(CCFLAGS_PROC) $(CCFLAGS_ISET) -nopic -nopid -interworking
309ARFLAGS_ARCH	?=
310
311#----------------------------------------------------------------------------
312#  Standard includes/libraries for CodeWarrior
313#
314
315export	MWCIncludes    := $(subst \;, ,$(subst $(SPACE),;,$(CW_INCDIRS)))
316export	MWLibraries    := $(subst \;, ,$(subst $(SPACE),;,$(CW_LIBDIRS)))
317export	MWLibraryFiles := $(subst \;, ,$(subst $(SPACE),;,$(CC_LIBS)))
318
319#----------------------------------------------------------------------------
320#  declare TWL target
321#
322
323MACRO_FLAGS	+= -DSDK_TWL -DSDK_TWL$(subst .,,$(ARCHGEN_TYPE))
324
325#----------------------------------------------------------------------------
326#  Switch by C Compiler CW/SNC
327#
328
329MACRO_FLAGS	+= -DSDK_$(TWL_CCTYPE) \
330               -DSDK_$(TWL_CCTYPE)_MAJOR_VER=$(CW_MAJOR_VER)
331
332
333#----------------------------------------------------------------------------
334#  Switch by DEBUG/RELEASE/FINALROM
335#
336
337MACRO_FLAGS		+= -DSDK_$(TWL_BUILD_TYPE)
338
339CCFLAGS_OPT_O_	 = -O4 -inline on,noauto
340CCFLAGS_OPT_O_	+= -opt $(if $(filter ARM9,$(CODEGEN_PROC)),speed,space)
341
342CCFLAGS_OPT		?= $(if $(filter DEBUG,$(TWL_BUILD_TYPE)),-O0 -inline off,$(CCFLAGS_OPT_O_))
343ASFLAGS_OPT		?=
344LDFLAGS_OPT		?=
345ARFLAGS_OPT		?=
346
347CCFLAGS_OPT		+= $(if $(TWL_NO_OPT_G),,-g)
348LDFLAGS_OPT		+= $(if $(TWL_NO_OPT_G),,-g) $(if $(filter 3,$(CW_MAJOR_VER)),-segment_veneers)
349
350#--------To avoid problem with size increase in versions CW2.0beta2 and later, -ipa file option is required
351ifneq		($(CW_MAJOR_VER),1)
352CCFLAGS_OPT		+= -ipa file
353endif
354
355
356#----------------------------------------------------------------------------
357#  Switch for code profiling
358#
359CCFLAGS_OPT	+= $(if $(TWL_PROFILE),-profile)
360CCFLAGS_OPT	+= $(if $(TWL_PROFILE_TYPE),-DSDK_PROFILE_$(TWL_PROFILE_TYPE))
361
362
363#----------------------------------------------------------------------------
364#  Switch for anti-thread policy
365#
366
367ifdef		TWL_NO_THREAD
368MACRO_FLAGS	+= -DSDK_NO_THREAD
369endif
370
371
372#----------------------------------------------------------------------------
373#  Switch for AUTOTEST/UNITTEST
374#
375ifdef		TWL_AUTOTEST
376MACRO_FLAGS	+= -DSDK_AUTOTEST
377endif
378ifdef		TWL_UTEST
379MACRO_FLAGS	+= -DSDK_UTEST
380endif
381
382#----------------------------------------------------------------------------
383#  Switch for using system call when SVC_WaitVBlankIntr
384#
385MACRO_FLAGS	+= $(if $(TWL_SVC_WAITVBLANK_COMPATIBLE),-DSDK_SVC_WAITVBLANK_COMPATIBLE)
386
387
388#----------------------------------------------------------------------------
389#  Switch for automatic PrintServer
390#
391ifdef		TWL_ENABLE_ARM7_PRINT
392MACRO_FLAGS	+= -DSDK_ENABLE_ARM7_PRINT
393endif
394
395
396#----------------------------------------------------------------------------
397#  My macro flags
398#
399MACRO_FLAGS	+= $(LMACRO_FLAGS)
400
401
402#----------------------------------------------------------------------------
403CCFLAGS_WARNING_FULL	 = all,cmdline,illpragmas,emptydecl,possible,unusedarg,unusedvar,unused,extracomma,pedantic,hidevirtual,implicitconv,impl_int2float,impl_float2int,impl_signedunsigned,notinlined,largeargs,structclass,padding,notused,missingreturn,unusedexpr,ptrintconv,anyptrintconv,undefmacro,filecaps,sysfilecaps,tokenpasting
404
405CCFLAGS_WARNING_NIGHTLY	 = all,padding,notused,ptrintconv,undefmacro
406
407CCFLAGS_MSGSTYLE		?= -msgstyle std
408
409ifeq	($(TWLSDK_WARNING_NIGHTLY),TRUE)
410CCFLAGS_WARNING			?= -w $(CCFLAGS_WARNING_NIGHTLY)
411endif
412
413ifeq	($(NITRO_WARNING_STRICT),TRUE)
414CCFLAGS_WARNING			?= -w $(CCFLAGS_WARNING_FULL)
415else
416CCFLAGS_WARNING			?= -w all
417endif
418LDFLAGS_WARNING			?= -w on
419ARFLAGS_WARNING			?= -w on
420
421CCFLAGS_ENCODING		?= $(if $(filter en,$(TWLSDK_LANG)),-enc ascii,-enc SJIS)
422
423CCFLAGS_CHARTYPE		?= -char signed
424
425CCFLAGS_MISC			 = $(CCFLAGS_MSGSTYLE) $(CCFLAGS_WARNING) $(CCFLAGS_ENCODING) $(CCFLAGS_CHARTYPE)
426ASFLAGS_MISC			 = $(CCFLAGS_MSGSTYLE)
427LDFLAGS_MISC			 = $(CCFLAGS_MSGSTYLE) $(LDFLAGS_WARNING)
428ARFLAGS_MISC			 = $(CCFLAGS_MSGSTYLE) $(ARFLAGS_WARNING)
429
430
431#----------------------------------------------------------------------------
432
433CCFLAGS_SYS	?= -stdinc -enum int -stdkeywords off -Cpp_exceptions off
434ASFLAGS_SYS	?= -nostdinc -DSDK_ASM
435LDFLAGS_SYS	?= -stdlib -map closure -main _start
436ARFLAGS_SYS	?= -library
437
438
439CCFLAGS		= -lang c $(CCFLAGS_ARCH) $(CCFLAGS_OPT) $(CCFLAGS_MISC) \
440		  $(CCFLAGS_SYS)  $(MACRO_FLAGS) $(MACRO_FLAGS_CC)
441
442CXXFLAGS	= -lang c++ $(CCFLAGS_ARCH) $(CCFLAGS_OPT) $(CCFLAGS_MISC) \
443		  $(CCFLAGS_SYS)  $(MACRO_FLAGS) $(MACRO_FLAGS_CC)
444
445ASFLAGS		= $(ASFLAGS_ARCH) $(ASFLAGS_OPT) $(ASFLAGS_MISC) \
446		  $(ASFLAGS_SYS)  $(MACRO_FLAGS) $(MACRO_FLAGS_AS)
447
448LDFLAGS		= $(LDFLAGS_ARCH) $(LDFLAGS_OPT) $(LDFLAGS_MISC) \
449		  $(LDFLAGS_SYS)
450
451ARFLAGS		= $(ARFLAGS_ARCH) $(ARFLAGS_OPT) $(ARFLAGS_MISC) \
452		  $(ARFLAGS_SYS)
453
454
455#----- End of commondefs.cctype.CW -----
456