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