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