1#! make -f 2#---------------------------------------------------------------------------- 3# Project: TwlSDK 4# File: commondefs 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:: 2010-03-17#$ 15# $Rev: 11313 $ 16# $Author: okubata_ryoma $ 17#---------------------------------------------------------------------------- 18ifndef TWLSDK_TOP_COMMONDEFS_ 19TWLSDK_TOP_COMMONDEFS_ = TRUE 20 21#---------------------------------------------------------------- 22# 23# Utilities 24# 25EMPTY := 26SPACE := $(EMPTY) $(EMPTY) 27OPEN_PAREN :=( 28CLOSE_PAREN :=) 29ifdef MSYSTEM # for MinGW32 30QUOTE =' 31else 32QUOTE =" 33endif 34 35define NEWLINE 36$(EMPTY) 37 38endef 39 40#---------------------------------------------------------------------------- 41# MAKE COMMAND SETTINGS 42# 43# --no-print-directory: No print directory when 'change directory' 44# -r No built-in rules 45# -R No built-in variables 46# -j Perform multithreaded make (not currently available) 47# 48 49MAKEFILE = $(firstword $(MAKEFILE_LIST)) 50MAKEFLAGS_SHORT = $(filter-out --%,$(MAKEFLAGS)) 51 52MAKEFLAGS += -R -r 53 54ifdef SILENT 55MAKEFLAGS += -s 56endif 57 58# Check -w option 59ifeq (,$(findstring w,$(MAKEFLAGS_SHORT))) 60MAKEFLAGS += --no-print-directory 61endif 62 63# Check -k option 64ifeq (,$(findstring k,$(MAKEFLAGS_SHORT))) 65AND = && 66else 67AND = ; 68endif 69 70# Check -s option 71ifneq (,$(findstring s,$(MAKEFLAGS_SHORT))) 72STDOUT = > /dev/null 73endif 74 75# Check -B option 76MAKEFLAGS_OPTIONS = $(MAKEFLAGS) 77MAKEFLAGS_ALWAYS = $(if $(findstring B,$(MAKEFLAGS_SHORT))$(findstring --always-make,$(MAKEFLAGS_OPTIONS)),TRUE,FALSE) 78 79#---------------------------------------------------------------------------- 80# CYGWIN tools 81# 82CD := cd 83CP := cp -rf 84RM := rm -rf 85MV := mv 86MKDIRP := mkdir -p 87SED := sed 88INSTALL := install -p 89TOUCH := touch 90ECHO := echo 91PERL := perl 92OBJCOPY := objcopy -I elf32-little -O binary 93 94# Debugging flag 95MAKEFLAGS_D ?= 96 97REMAKE := $(MAKE) -f $(MAKEFILE) $(MAKEFLAGS_D) 98 99LEX := flex 100YACC := bison -y 101CC_X86 := gcc -mno-cygwin 102CXX_X86 := g++ -mno-cygwin 103LD_X86 := gcc -mno-cygwin 104AR_X86 := ar ruc 105GREP ?= /bin/grep 106MOUNT ?= /bin/mount 107HEAD ?= /bin/head 108AWK ?= /bin/gawk 109CUT ?= /bin/cut 110TR ?= /bin/tr 111 # Instead of /bin/true, use a built-in command that returns TRUE 112TRUE ?= test true 113 114ifdef USE_ASH 115export SHELL=ash 116endif 117 118#---------------------------------------------------------------- 119# 120# cygpath 121# 122 123CYGPATH ?= cygpath 124 125# The high-speed cygpath command is disabled by default (with make 3.80, there is a bug with the eval function that causes it not to work) 126CYGPATH_NOCMD ?= FALSE 127 128# If autodetecting, remove the definition above (not yet tested) 129#ifndef CYGPATH_NOCMD 130# 131#MAKE_VERSION := $(shell $(MAKE) -v | $(HEAD) -1 | $(AWK) '{print $3}') 132# 133#ifndef MSYSTEM 134# 135#ifeq ($(shell(expr "$(MAKE_VERSION)" ">=" "3.81")),1) 136#CYGPATH_NOCMD=TRUE 137#else # MAKE_VERSION 138#CYGPATH_NOCMD=FALSE 139#endif # MAKE_VERSION 140# 141#endif # MSYSTEM 142# 143#endif # CYGPATH_NOCMD 144 145 146# Get the cygdrive path prefix 147 148ifeq ($(CYGPATH_MOUNTPOINT),) 149CYGPATH_MOUNTPOINT := $(patsubst %/,%,$(dir $(shell $(CYGPATH) -u c:/))) 150endif # CYGPATH_MOUNTPOINT 151 152ifeq ($(CYGPATH_NOCMD),TRUE) 153 154ifeq ($(CYGPATH_DRIVELIST),) 155# Safe 156CYGPATH_DRIVELIST_ALL = $(shell DRIVES=`$(MOUNT) | $(GREP) 'type user' | $(CUT) -c1 | tr '\n' ' '` \ 157 && echo $${DRIVES} `echo $${DRIVES} | $(TR) '[a-z]' '[A-Z]'`) 158 159# Minimum load and fast 160CYGPATH_DRIVELIST_FAST = $(shell $(CYGPATH) -aw '$(TWLSDK_ROOT)c' '$(NITROSDK_ROOT)c' \ 161 '$(CWFOLDER_TWL)c' '$(CWFOLDER_NITRO)c' \ 162 '$(TWLSYSTEM_ROOT)c' '$(NITROSYSTEM_ROOT)c' \ 163 '$(IS_TWL_DIR)c' '$(IS_NITRO_DIR)c' \ 164 | $(CUT) -c1) 165 166CYGPATH_DRIVELIST := $(sort $(CYGPATH_DRIVELIST_FAST)) 167#CYGPATH_DRIVELIST := $(sort $(CYGPATH_DRIVELIST_ALL)) 168endif # CYGPATH_DRIVELIST 169 170 171define cygpathm 172$(strip $(eval VALUE=$(1))$(foreach DRIVE,$(CYGPATH_DRIVELIST),$(eval VALUE:=$$(patsubst $(CYGPATH_MOUNTPOINT)/$(DRIVE)/%,$(DRIVE):/%,$$(subst \,/,$$(VALUE)))))$(VALUE)) 173endef # cygpathm 174 175define cygpathu 176$(strip $(eval VALUE:=$(1))$(foreach DRIVE,$(CYGPATH_DRIVELIST),$(eval VALUE:=$$(patsubst $(DRIVE):/%,$(CYGPATH_MOUNTPOINT)/$(DRIVE)/%,$$(subst \,/,$$(VALUE)))))$(VALUE)) 177endef # cygpathu 178 179define cygpathm_multi 180$(foreach pathvar,$(1),$(call cygpathm,$(pathvar))) 181endef # cygpathm_multi 182 183define cygpathu_multi 184$(foreach pathvar,$(1),$(call cygpathu,$(pathvar))) 185endef # cygpathu_multi 186 187define eupath 188$(subst $(SPACE),\ ,$(call cygpathu,$(subst \ , ,$(1)))) 189endef # eupath 190 191define empath 192$(subst $(SPACE),\ ,$(call cygpathm,$(subst \ , ,$(1)))) 193endef # empath 194 195else # CYGPATH_NOCMD 196 197define empath 198$(subst $(SPACE),\ ,$(shell $(CYGPATH) -m $(subst \,\\,$(subst \ , ,$(1))))) 199endef # empath 200 201ifdef MSYSTEM 202 203define eupath 204$(call empath,$(1)) 205endef #eupath 206 207define cygpathu 208$(shell cygpath -m $(subst \,\\,$(subst \ , ,$(1)))) 209endef 210 211else # MSYSTEM 212 213# Enclosed by quotations to support compiler paths that include parentheses 214define eupath 215$(subst $(SPACE),\ ,$(shell $(CYGPATH) -u "$(subst \,\\,$(subst \ , ,$(1)))")) 216endef 217 218define cygpathu 219$(shell cygpath -u "$(subst \,\\,$(subst \ , ,$(1)))") 220endef 221 222endif # MSYSTEM 223 224define cygpathm 225$(shell cygpath -m "$(subst \,\\,$(subst \ , ,$(1)))") 226endef 227 228define cygpathu_multi 229$(foreach pathvar,$(1),$(call cygpathu,$(pathvar))) 230endef 231 232define cygpathm_multi 233$(foreach pathvar,$(1),$(call cygpathm,$(pathvar))) 234endef 235 236endif # CYGPATH_NOCMD 237 238export CYGPATH_MOUNTPOINT CYGPATH_DRIVELIST CYGPATH_NOCMD 239 240define encode_specialchar 241$(subst $(SPACE),%20,$(1)) 242endef 243 244define decode_specialchar 245$(subst %20,$(SPACE),$(1)) 246endef 247 248define delete_space_escape 249$(subst \ ,$(SPACE),$(1)) 250endef 251 252#---------------------------------------------------------------- 253# 254# SDK directories 255# 256 257TWLSDK_ROOT ?= C:/TwlSDK 258 259ROOT := $(call eupath,$(TWLSDK_ROOT)) 260BUILDTOOLSDIR := $(ROOT)/build/buildtools 261BUILDSETUPDIR := $(ROOT)/build/buildsetup 262TOOLSDIR := $(ROOT)/tools 263COMPONENTSDIR := $(ROOT)/components 264ADDINSDIR ?= $(ROOT)/add-ins 265 266 267#---------------------------------------------------------------- 268# 269# Utility rules 270# 271 272ifeq ($(MAKEFILE),Makefile) 273MAKEFILE_ = 274else 275MAKEFILE_ = /$(MAKEFILE) 276endif 277 278define ECHO_CURDIR 279 $(ECHO) "==== $(CURDIR)$(MAKEFILE_)"; 280endef 281 282define DO_MAKEDIR 283 $(if $(strip $(NEWDIRS)),$(MKDIRP) $(NEWDIRS);) 284endef 285 286 287#---------------------------------------------------------------- 288# 289# Target Platform 290# 291 292ifeq ($(filter TWL NITRO ALL,$(TWLSDK_PLATFORM)),) 293$(error "INVALID TWLSDK_PLATFORM : Please set TWLSDK_PLATFORM. Refer to the $$TwlSDK/docs/SDKRules/Rule-Defines.html for the setting method.") 294endif 295 296EFFECTIVE_TWLSDK_PLATFORM = $(if $(REMAKE_TWLSDK_PLATFORM),$(REMAKE_TWLSDK_PLATFORM),$(TWLSDK_PLATFORM)) 297TWLSDK_PLATFORM_LIST = $(strip $(if $(filter ALL,$(EFFECTIVE_TWLSDK_PLATFORM)),TWL NITRO,$(EFFECTIVE_TWLSDK_PLATFORM))) 298 299 300DEFAULT_TARGET_PLATFORM = ALL 301 302TARGET_PLATFORM := $(if $(REMAKE_TWLSDK_PLATFORM),$(REMAKE_TWLSDK_PLATFORM),$(if $(TARGET_PLATFORM),$(TARGET_PLATFORM),$(DEFAULT_TARGET_PLATFORM))) 303TARGET_PLATFORM_LIST = $(strip $(filter $(TWLSDK_PLATFORM_LIST),$(if $(filter ALL,$(TARGET_PLATFORM)),TWL NITRO,$(TARGET_PLATFORM)))) 304 305 306#---------------------------------------------------------------- 307# Temporary operation for TARGET_* compatibility 308# 309 310ifneq ($(filter TWL,$(TARGET_PLATFORM_LIST)),) 311TARGET_PLATFORM_TWL = TRUE 312endif 313ifneq ($(filter NITRO,$(TARGET_PLATFORM_LIST)),) 314TARGET_PLATFORM_NITRO = TRUE 315endif 316 317 318ifdef TARGET_CODEGEN 319NITRO_CODEGEN := $(TARGET_CODEGEN) 320TWL_CODEGEN := $(TARGET_CODEGEN) 321endif 322 323ifdef TARGET_PROC 324NITRO_PROC := $(TARGET_PROC) 325TWL_PROC := $(TARGET_PROC) 326endif 327 328#---------------------------------------------------------------- 329# common setiings 330# 331NITRO_ELF_EXT := nef 332TWL_ELF_EXT := tef 333 334TARGET_ELF ?= $(strip $(sort $(if $(IS_TWL),$(patsubst %.$(NITRO_ELF_EXT),%.$(TWL_ELF_EXT),$(TARGET_NEF)),$(TARGET_NEF)) $(TARGET_TEF))) 335 336FORCE_BUILD ?= $(strip $(TWL_FORCE_BUILD) $(NITRO_FORCE_BUILD) $(TARGET_BIN) $(TARGET_OBJ) $(TARGET_ELF) $(TARGET_LIB) $(TARGET_SIGN_BIN)) 337 338DEFAULT_SRCDIR := ./src 339DEFAULT_INCDIR := ./include 340DEFAULT_ETCDIR := ./etc 341 342 343#---------------------------------------------------------------- 344# 345# Read Private 346# 347-include $(BUILDTOOLSDIR)/@*privatedefs 348-include $(BUILDTOOLSDIR)/_privatedefs 349 350 351#---------------------------------------------------------------------------- 352# Load add-ins' commondefs 353# 354-include $(BUILDTOOLSDIR)/commondefs.add-ins.* 355 356 357#---------------------------------------------------------------- 358# 359# Target Proc 360# 361 362DEFAULT_PROC = ARM9 363 364TARGET_PROC ?= $(TWL_PROC) 365TARGET_PROC ?= $(NITRO_PROC) 366TARGET_PROC ?= $(DEFAULT_PROC) 367 368ifneq ($(TWLSDK_PRIVATE),TRUE) 369TWLSDK_PRIVATE = 370endif 371 372ifneq ($(TWL_PROC),) 373NITRO_PROC := $(TWL_PROC) 374endif 375 376TWL_PROC ?= $(NITRO_PROC) 377 378ifeq ($(NITRO_PROC)$(TWL_PROC),) 379NITRO_PROC = $(DEFAULT_PROC) 380TWL_PROC = $(DEFAULT_PROC) 381TARGET_PROC_LIST = $(DEFAULT_PROC) $(if $(TWLSDK_PRIVATE),ARM7,) 382else 383TARGET_PROC_LIST = $(filter-out $(if $(TWLSDK_PRIVATE),,ARM7),$(if $(filter ALL,$(TARGET_PROC)),ARM7 ARM9,$(TARGET_PROC))) 384endif 385 386 387#---------------------------------------------------------------- 388# 389# Target Codegen 390# 391 392DEFAULT_CODEGEN = ARM 393 394TARGET_CODEGEN ?= $(TWL_CODEGEN) 395TARGET_CODEGEN ?= $(NITRO_CODEGEN) 396TARGET_CODEGEN ?= $(DEFAULT_CODEGEN) 397 398ifneq ($(TWL_CODEGEN),) 399NITRO_CODEGEN := $(TWL_CODEGEN) 400endif 401 402TWL_CODEGEN ?= $(NITRO_CODEGEN) 403 404ifeq ($(NITRO_CODEGEN)$(TWL_CODEGEN),) 405NITRO_CODEGEN := $(DEFAULT_CODEGEN) 406TWL_CODEGEN := $(DEFAULT_CODEGEN) 407endif 408 409CODEGEN_ARCH = $(if $(filter ARM,$(TARGET_CODEGEN)),,.thumb) 410CODEGEN_ARCH_ARM7 ?= $(CODEGEN_ARCH) 411CODEGEN_CC ?= $(TARGET_CODEGEN) 412CODEGEN_AS ?= ARM 413 414 415#---------------------------------------------------------------- 416# 417# Target build type 418# 419 420# The code below is used because the build type is often used in the ifdef conditions within makefiles. 421# 422 423ifneq ($(NITRO_DEBUG),) 424ifeq ($(TWL_DEBUG),) 425TWL_DEBUG = $(NITRO_DEBUG) 426endif 427endif 428 429ifeq ($(TARGET_DEBUG),) 430TARGET_DEBUG = $(TWL_DEBUG) 431endif 432 433ifneq ($(NITRO_RELEASE),) 434ifeq ($(TWL_RELEASE),) 435TWL_RELEASE = $(NITRO_RELEASE) 436endif 437endif 438 439ifeq ($(TARGET_RELEASE),) 440TARGET_RELEASE = $(TWL_RELEASE) 441endif 442 443ifneq ($(NITRO_FINALROM),) 444ifeq ($(TWL_FINALROM),) 445TWL_FINALROM = $(NITRO_FINALROM) 446endif 447endif 448 449ifeq ($(TARGET_FINALROM),) 450TARGET_FINALROM = $(TWL_FINALROM) 451endif 452 453 454#---------------------------------------------------------------- 455# 456# GSUBDIRS 457# decided from $(TARGET_PLATFORM_xxx) and $(TWLSDK_PRIVATE) 458# 459 460define IS_TWL 461$(filter TWL,$(TARGET_PLATFORM_LIST)) 462endef 463 464define IS_NITRO 465$(filter NITRO,$(TARGET_PLATFORM_LIST)) 466endef 467 468GSUBDIRS = $(strip $(if $(IS_TWL),$(addsuffix .TWL,$(TARGET_PROC_LIST)),) $(if $(IS_NITRO),$(TARGET_PROC_LIST),)) 469 470 471#---------------------------------------------------------------------------- 472# TWLSDK_INSTALL_ROOT 473# 474 475ifdef TWLSDK_INSTALL_ROOT 476TWLSDK_INSTALL_ROOT_ := $(TWLSDK_INSTALL_ROOT) 477else 478TWLSDK_INSTALL_ROOT_ := $(TWLSDK_ROOT) 479endif 480 481TWL_INSTALL_ROOT := $(subst $(SPACE),\ ,$(subst \,/,$(TWLSDK_INSTALL_ROOT_))) 482TWL_INSTALL_INCDIR := $(TWL_INSTALL_ROOT)/include 483TWL_INSTALL_TOOLSDIR := $(TWL_INSTALL_ROOT)/tools 484TWL_INSTALL_LIBDIR = $(TWL_INSTALL_ROOT)/lib/$(TWL_LIBTYPE) 485TWL_INSTALL_COMPONENTSDIR := $(TWL_INSTALL_ROOT)/components 486TWL_INSTALL_ADDINS := $(TWL_INSTALL_ROOT)/add-ins 487 488#---------------------------------------------------------------------------- 489# NITROSDK_INSTALL_ROOT 490# 491 492NITROSDK_INSTALL_ROOT ?= $(TWLSDK_INSTALL_ROOT) 493NITROSDK_INSTALL_ROOT_ ?= $(TWLSDK_INSTALL_ROOT_) 494 495NITRO_INSTALL_ROOT ?= $(TWL_INSTALL_ROOT) 496NITRO_INSTALL_INCDIR ?= $(TWL_INSTALL_INCDIR) 497NITRO_INSTALL_TOOLSDIR ?= $(TWL_INSTALL_TOOLSDIR) 498NITRO_INSTALL_LIBDIR ?= $(TWL_INSTALL_LIBDIR) 499NITRO_INSTALL_COMPONENTSDIR ?= $(TWL_INSTALL_COMPONENTSDIR) 500NITRO_INSTALL_ADDINS ?= $(TWL_INSTALL_ADDINS) 501 502#---------------------------------------------------------------------------- 503# switch for NIGHTLYBUILD 504# 505ifeq ($(NIGHTLY_TARGET),full) 506SDK_NIGHTLY_BUILD = TRUE 507endif 508 509#---------------------------------------------------------------------------- 510# switch for NIGHTLYTEST 511# 512ifeq ($(NIGHTLY_TARGET),testsrl) 513SDK_NTEST = TRUE 514endif 515ifdef SDK_NTEST 516MACRO_FLAGS += -DSDK_NTEST 517endif 518 519#---------------------------------------------------------------- 520 521NITRO_BUILDTOOLSDIR := $(BUILDTOOLSDIR)/nitro 522TWL_BUILDTOOLSDIR := $(BUILDTOOLSDIR)/twl 523 524ifneq ($(filter TWL,$(TARGET_PLATFORM_LIST)),) 525include $(TWL_BUILDTOOLSDIR)/commondefs 526else 527ifneq ($(filter NITRO,$(TARGET_PLATFORM_LIST)),) 528include $(NITRO_BUILDTOOLSDIR)/commondefs 529else 530include $(BUILDTOOLSDIR)/commondefs.skip 531endif 532endif 533 534# This is a TWL-specific definition but it's also referenced during NITRO builds 535-include $(BUILDTOOLSDIR)/commondefs.compat.pre 536 537#---------------------------------------------------------------- 538# Merge flags 539# 540 541USE_STD_PCHDR = FALSE 542 543#ifeq ($(MAKEFLAGS_ALWAYS),FALSE) 544ifdef NITRO_STD_PCHDR 545ifndef NITRO_NO_STD_PCHDR 546USE_STD_PCHDR = TRUE 547endif 548endif 549 550ifdef TWL_STD_PCHDR 551ifndef TWL_NO_STD_PCHDR 552USE_STD_PCHDR = TRUE 553endif 554endif 555#endif 556 557 558#---------------------------------------------------------------------------- 559# NITRO-WIRELESS path settings 560# 561# libraries should be in 562# $(ROOT)/lib/NitroWireless 563# 564# includes should be in 565# $(ROOT)/include/nitro_wl/ARM7/*.h 566# 567# access by #include <nitro_wl/ARM7/*.h> 568# 569# SDK_VERSION_WL is defined in <nitro_wl/ARM7/version_wl.h> 570# 571 572NITROWIRELESS_VERSION ?= 2.88.00 573NITROWIRELESS_ROOT ?= $(ROOT)/add-ins/NitroWireless/Marionea-$(NITROWIRELESS_VERSION) 574NITROWIRELESS_ROOT_ = $(subst $(SPACE),\ ,$(subst \,/,$(NITROWIRELESS_ROOT))) 575NITROWIRELESS_LIBDIR ?= $(ROOT)/lib/NitroWireless/$(NITRO_LIBTYPE) 576NITROWIRELESS_INCDIR ?= $(ROOT)/include 577 578#---------------------------------------------------------------------------- 579endif # TWLSDK_TOP_COMMONDEFS_ 580#----- End of commondefs ----- 581