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
19NITRO_STD_PCHDR	?= True
20PCHDR_SRC		?= $(ROOT)/include/nitro.h
21
22#----------------------------------------------------------------------------
23#CWFOLDER_IRIS	?= D:/Program Files/Freescale/CW for NINTENDO DS V2.0
24#CWFOLDER_NITRO	?= $(CWFOLDER_IRIS)
25CWFOLDER_NITRO	?= $(CWFOLDER_TWL)
26LM_LICENSE_FILE	:= $(subst /,\,$(CWFOLDER_NITRO))\license.dat
27CW_ROOT			:= $(subst $(SPACE),\ ,$(subst \,/,$(CWFOLDER_NITRO)))
28CW_BINDIR		:= $(call eupath,$(CW_ROOT))/ARM_Tools/Command_Line_Tools
29CW_ARMDIR		:= $(CW_ROOT)/ARM_EABI_Support
30
31#----------------------------------------------------------------------------
32SDK_VERINFO_CW_CC	?= $(NITRO_BUILDTOOLSDIR)/verinfo.cw.cc
33SDK_VERINFO_CW_LD	?= $(NITRO_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######## NITRO V0.3
69#CW_AVOID_STRB		:= -avoid_strb all,noerr
70#
71######## NITRO 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		 = $(NITRO_PLATFORM)$(CODEGEN_ARCH)/$(NITRO_BUILD_DIR)
90ELFTOBIN_ARM9		?= $(NITRO_COMPONENTSDIR)/printserver/$(NITRO_BUILDTYPE_ARM9)/printserver.$(NITRO_ELF_EXT)
91ELFTOBIN_ARM7		?= $(NITRO_COMPONENTSDIR)/ferret/$(NITRO_BUILDTYPE_ARM7)/ferret.$(NITRO_ELF_EXT)
92ELFTOBIN_ROMHEADER	?= $(NITRO_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	($(NITRO_PLATFORM),TEG)
105SDK_CW_WARNOFF_SAFESTRB := yes
106else
107SDK_CW_WARNOFF_SAFESTRB	:=
108endif
109
110######## IRIS V0.2 Hotfix 1
111######## NITRO V0.3
112######## NITRO V0.4.1
113#SDK_CW_WA_OPT4			:= yes
114#SDK_CW_WA_CONSTPOOLS	:= yes
115#SDK_CW_WA_OPT_BLX		:= yes
116######## NITRO V0.5
117######## NITRO V0.5 + HotFix1
118######## NITRO V0.6
119#SDK_CW_WA_LIBCXX		:= yes
120
121#-----------------------------------
122#
123ifdef	SDK_CW_WA_OPT_BLX
124ifdef	NITRO_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,$(NITRO_BUILD_TYPE)),,-DSDK_CW_WA_OPT4)
140endif
141endif
142
143ifdef	SDK_CW_WA_CONSTPOOLS
144ifeq	($(CODEGEN_CC),THUMB)
145MACRO_FLAGS	+= $(if $(filter DEBUG,$(NITRO_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	($(NITRO_PLATFORM),TEG)
166MACRO_FLAGS	+= -DSDK_TEG_WA_VBLANK
167endif
168
169
170#----------------------------------------------------------------------------
171######## IRIS V0.2 Hotfix 1
172######## NITRO V0.3
173######## NITRO 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######## NITRO 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)-$(NITRO_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)-$(NITRO_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$(NITRO_LIBSUFFIX).a
264else #	($(CODEGEN_PROC),ARM7)
265#STUBS_LIBS	+= libstubscw_sp$(NITRO_LIBSUFFIX).a
266endif
267	$(ECHO) "==== test";
268
269#----------------------------------------------------------------------------
270#  Switch by codegen target
271#    NITRO_PLATFORM  TEG/TS
272#    NITRO_MEMSIZE   4M/8M
273#    CODEGEN_PROC    ARM7/ARM9
274#    CODEGEN_CC      ARM/THUMB
275#    CODEGEN_AS      ARM/THUMB
276#
277
278MACRO_FLAGS		+= -DSDK_$(NITRO_PLATFORM)  \
279				   -DSDK_$(NITRO_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
294ifeq		($(NITRO_PLATFORM),TEG)
295CCFLAGS_PROC	+= $(CW_AVOID_STRB)
296endif
297
298#-------------------------------------- NITRO_CODEGEN(=CODEGEN_CC) ARM/THUMB
299
300CC_LIBS	 		 = $(if $(filter ARM,$(CODEGEN_CC)),$(CW_LIBS_ARM),$(CW_LIBS_THUMB))
301
302#-------------------------------------- CODEGEN_CC  ARM/THUMB
303
304CCFLAGS_ISET	 = $(if $(filter THUMB,$(CODEGEN_CC)),-thumb,-nothumb)
305
306#-------------------------------------- CODEGEN_AS  ARM/THUMB
307
308ASFLAGS_ISET	 = $(if $(filter THUMB,$(CODEGEN_AS)),-16,-32)
309
310CCFLAGS_ARCH	?= $(CCFLAGS_PROC) $(CCFLAGS_ISET) -nopic -nopid -interworking
311ASFLAGS_ARCH	?= $(ASFLAGS_PROC) $(ASFLAGS_ISET)
312LDFLAGS_ARCH	?= $(CCFLAGS_PROC) $(CCFLAGS_ISET) -nopic -nopid -interworking
313ARFLAGS_ARCH	?=
314
315#----------------------------------------------------------------------------
316#  Standard includes/libraries for CodeWarrior
317#
318
319export	MWCIncludes    := $(subst \;, ,$(subst $(SPACE),;,$(CW_INCDIRS)))
320export	MWLibraries    := $(subst \;, ,$(subst $(SPACE),;,$(CW_LIBDIRS)))
321export	MWLibraryFiles := $(subst \;, ,$(subst $(SPACE),;,$(CC_LIBS)))
322
323#----------------------------------------------------------------------------
324#  declare NITRO target
325#
326
327MACRO_FLAGS	+= -DSDK_NITRO
328
329#----------------------------------------------------------------------------
330#  Switch by C Compiler CW/SNC
331#
332
333MACRO_FLAGS	+= -DSDK_$(NITRO_CCTYPE) \
334               -DSDK_$(NITRO_CCTYPE)_MAJOR_VER=$(CW_MAJOR_VER)
335
336
337#----------------------------------------------------------------------------
338#  Switch by DEBUG/RELEASE/FINALROM
339#
340
341MACRO_FLAGS		+= -DSDK_$(NITRO_BUILD_TYPE)
342
343CCFLAGS_OPT_O_	 = -O4 -inline on,noauto
344CCFLAGS_OPT_O_	+= -opt $(if $(filter ARM9,$(CODEGEN_PROC)),speed,space)
345
346CCFLAGS_OPT		?= $(if $(filter DEBUG,$(NITRO_BUILD_TYPE)),-O0 -inline off,$(CCFLAGS_OPT_O_))
347ASFLAGS_OPT		?=
348LDFLAGS_OPT		?=
349ARFLAGS_OPT		?=
350
351CCFLAGS_OPT		+= $(if $(NITRO_NO_OPT_G),,-g)
352LDFLAGS_OPT		+= $(if $(NITRO_NO_OPT_G),,-g) $(if $(filter 3,$(CW_MAJOR_VER)),-segment_veneers)
353
354#--------To avoid problem with size increase in versions CW2.0beta2 and later, -ipa file option is required
355ifneq		($(CW_MAJOR_VER),1)
356CCFLAGS_OPT		+= -ipa file
357endif
358
359
360#----------------------------------------------------------------------------
361#  Switch for code profiling
362#
363CCFLAGS_OPT	+= $(if $(NITRO_PROFILE),-profile)
364CCFLAGS_OPT	+= $(if $(NITRO_PROFILE_TYPE),-DSDK_PROFILE_$(NITRO_PROFILE_TYPE))
365
366
367#----------------------------------------------------------------------------
368#  Switch for anti-thread policy
369#
370
371ifdef		NITRO_NO_THREAD
372MACRO_FLAGS	+= -DSDK_NO_THREAD
373endif
374
375
376#----------------------------------------------------------------------------
377#  Switch for AUTOTEST/UNITTEST
378#
379ifdef		NITRO_AUTOTEST
380MACRO_FLAGS	+= -DSDK_AUTOTEST
381endif
382ifdef		NITRO_UTEST
383MACRO_FLAGS	+= -DSDK_UTEST
384endif
385
386
387#----------------------------------------------------------------------------
388#  Switch for using system call when SVC_WaitVBlankIntr
389#
390MACRO_FLAGS	+= $(if $(NITRO_SVC_WAITVBLANK_COMPATIBLE),-DSDK_SVC_WAITVBLANK_COMPATIBLE)
391
392
393#----------------------------------------------------------------------------
394#  Switch for automatic PrintServer
395#
396ifdef		NITRO_ENABLE_ARM7_PRINT
397MACRO_FLAGS	+= -DSDK_ENABLE_ARM7_PRINT
398endif
399
400
401#----------------------------------------------------------------------------
402#  My macro flags
403#
404MACRO_FLAGS	+= $(LMACRO_FLAGS)
405
406
407#----------------------------------------------------------------------------
408CCFLAGS_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
409
410CCFLAGS_WARNING_NIGHTLY	 = all,padding,notused,ptrintconv,undefmacro
411
412CCFLAGS_MSGSTYLE		?= -msgstyle std
413
414ifeq	($(TWLSDK_WARNING_NIGHTLY),TRUE)
415CCFLAGS_WARNING			?= -w $(CCFLAGS_WARNING_NIGHTLY)
416endif
417
418ifeq	($(NITRO_WARNING_STRICT),TRUE)
419CCFLAGS_WARNING			?= -w $(CCFLAGS_WARNING_FULL)
420else
421CCFLAGS_WARNING			?= -w all
422endif
423LDFLAGS_WARNING			?= -w on
424ARFLAGS_WARNING			?= -w on
425
426CCFLAGS_ENCODING		?= $(if $(filter en,$(NITROSDK_LANG)),-enc ascii,-enc SJIS)
427
428CCFLAGS_CHARTYPE		?= -char signed
429
430CCFLAGS_MISC			 = $(CCFLAGS_MSGSTYLE) $(CCFLAGS_WARNING) $(CCFLAGS_ENCODING) $(CCFLAGS_CHARTYPE)
431ASFLAGS_MISC			 = $(CCFLAGS_MSGSTYLE)
432LDFLAGS_MISC			 = $(CCFLAGS_MSGSTYLE) $(LDFLAGS_WARNING)
433ARFLAGS_MISC			 = $(CCFLAGS_MSGSTYLE) $(ARFLAGS_WARNING)
434
435
436#----------------------------------------------------------------------------
437
438CCFLAGS_SYS	?= -stdinc -enum int -stdkeywords off -Cpp_exceptions off
439ASFLAGS_SYS	?= -nostdinc -DSDK_ASM
440LDFLAGS_SYS	?= -stdlib -map closure -main _start
441ARFLAGS_SYS	?= -library
442
443
444CCFLAGS		= -lang c $(CCFLAGS_ARCH) $(CCFLAGS_OPT) $(CCFLAGS_MISC) \
445		  $(CCFLAGS_SYS)  $(MACRO_FLAGS) $(MACRO_FLAGS_CC)
446
447CXXFLAGS	= -lang c++ $(CCFLAGS_ARCH) $(CCFLAGS_OPT) $(CCFLAGS_MISC) \
448		  $(CCFLAGS_SYS)  $(MACRO_FLAGS) $(MACRO_FLAGS_CC)
449
450ASFLAGS		= $(ASFLAGS_ARCH) $(ASFLAGS_OPT) $(ASFLAGS_MISC) \
451		  $(ASFLAGS_SYS)  $(MACRO_FLAGS) $(MACRO_FLAGS_AS)
452
453LDFLAGS		= $(LDFLAGS_ARCH) $(LDFLAGS_OPT) $(LDFLAGS_MISC) \
454		  $(LDFLAGS_SYS)
455
456ARFLAGS		= $(ARFLAGS_ARCH) $(ARFLAGS_OPT) $(ARFLAGS_MISC) \
457		  $(ARFLAGS_SYS)
458
459
460#----- End of commondefs.cctype.CW -----
461