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