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