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:: 2009-11-26#$ 15# $Rev: 11201 $ 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 Do make with multi-thread (not used now) 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 213define eupath 214$(subst $(SPACE),\ ,$(shell $(CYGPATH) -u $(subst \,\\,$(subst \ , ,$(1))))) 215endef 216 217define cygpathu 218$(shell cygpath -u $(subst \,\\,$(subst \ , ,$(1)))) 219endef 220 221endif # MSYSTEM 222 223define cygpathm 224$(shell cygpath -m $(subst \,\\,$(subst \ , ,$(1)))) 225endef 226 227define cygpathu_multi 228$(call cygpathu,$(1)) 229endef 230 231define cygpathm_multi 232$(call cygpathm,$(1)) 233endef 234 235endif # CYGPATH_NOCMD 236 237export CYGPATH_MOUNTPOINT CYGPATH_DRIVELIST CYGPATH_NOCMD 238 239define encode_specialchar 240$(subst $(SPACE),%20,$(1)) 241endef 242 243define decode_specialchar 244$(subst %20,$(SPACE),$(1)) 245endef 246 247define delete_space_escape 248$(subst \ ,$(SPACE),$(1)) 249endef 250 251#---------------------------------------------------------------- 252# 253# SDK directories 254# 255 256TWLSDK_ROOT ?= C:/TwlSDK 257 258ROOT := $(call eupath,$(TWLSDK_ROOT)) 259BUILDTOOLSDIR := $(ROOT)/build/buildtools 260BUILDSETUPDIR := $(ROOT)/build/buildsetup 261TOOLSDIR := $(ROOT)/tools 262COMPONENTSDIR := $(ROOT)/components 263ADDINSDIR ?= $(ROOT)/add-ins 264 265 266#---------------------------------------------------------------- 267# 268# Utility rules 269# 270 271ifeq ($(MAKEFILE),Makefile) 272MAKEFILE_ = 273else 274MAKEFILE_ = /$(MAKEFILE) 275endif 276 277define ECHO_CURDIR 278 $(ECHO) "==== $(CURDIR)$(MAKEFILE_)"; 279endef 280 281define DO_MAKEDIR 282 $(if $(strip $(NEWDIRS)),$(MKDIRP) $(NEWDIRS);) 283endef 284 285 286#---------------------------------------------------------------- 287# 288# Target Platform 289# 290 291ifeq ($(filter TWL NITRO ALL,$(TWLSDK_PLATFORM)),) 292$(error "INVALID TWLSDK_PLATFORM : Please set TWLSDK_PLATFORM. Refer to the $$TwlSDK/docs/SDKRules/Rule-Defines.html for the setting method.") 293endif 294 295EFFECTIVE_TWLSDK_PLATFORM = $(if $(REMAKE_TWLSDK_PLATFORM),$(REMAKE_TWLSDK_PLATFORM),$(TWLSDK_PLATFORM)) 296TWLSDK_PLATFORM_LIST = $(strip $(if $(filter ALL,$(EFFECTIVE_TWLSDK_PLATFORM)),TWL NITRO,$(EFFECTIVE_TWLSDK_PLATFORM))) 297 298 299DEFAULT_TARGET_PLATFORM = ALL 300 301TARGET_PLATFORM := $(if $(REMAKE_TWLSDK_PLATFORM),$(REMAKE_TWLSDK_PLATFORM),$(if $(TARGET_PLATFORM),$(TARGET_PLATFORM),$(DEFAULT_TARGET_PLATFORM))) 302TARGET_PLATFORM_LIST = $(strip $(filter $(TWLSDK_PLATFORM_LIST),$(if $(filter ALL,$(TARGET_PLATFORM)),TWL NITRO,$(TARGET_PLATFORM)))) 303 304 305#---------------------------------------------------------------- 306# Temporary operation for TARGET_* compatibility 307# 308 309ifneq ($(filter TWL,$(TARGET_PLATFORM_LIST)),) 310TARGET_PLATFORM_TWL = TRUE 311endif 312ifneq ($(filter NITRO,$(TARGET_PLATFORM_LIST)),) 313TARGET_PLATFORM_NITRO = TRUE 314endif 315 316 317ifdef TARGET_CODEGEN 318NITRO_CODEGEN := $(TARGET_CODEGEN) 319TWL_CODEGEN := $(TARGET_CODEGEN) 320endif 321 322ifdef TARGET_PROC 323NITRO_PROC := $(TARGET_PROC) 324TWL_PROC := $(TARGET_PROC) 325endif 326 327#---------------------------------------------------------------- 328# common setiings 329# 330NITRO_ELF_EXT := nef 331TWL_ELF_EXT := tef 332 333TARGET_ELF ?= $(strip $(sort $(if $(IS_TWL),$(patsubst %.$(NITRO_ELF_EXT),%.$(TWL_ELF_EXT),$(TARGET_NEF)),$(TARGET_NEF)) $(TARGET_TEF))) 334 335FORCE_BUILD ?= $(strip $(TWL_FORCE_BUILD) $(NITRO_FORCE_BUILD) $(TARGET_BIN) $(TARGET_OBJ) $(TARGET_ELF) $(TARGET_LIB) $(TARGET_SIGN_BIN)) 336 337DEFAULT_SRCDIR := ./src 338DEFAULT_INCDIR := ./include 339DEFAULT_ETCDIR := ./etc 340 341 342#---------------------------------------------------------------- 343# 344# Read Private 345# 346-include $(BUILDTOOLSDIR)/@*privatedefs 347-include $(BUILDTOOLSDIR)/_privatedefs 348 349 350#---------------------------------------------------------------------------- 351# Load add-ins' commondefs 352# 353-include $(BUILDTOOLSDIR)/commondefs.add-ins.* 354 355 356#---------------------------------------------------------------- 357# 358# Target Proc 359# 360 361DEFAULT_PROC = ARM9 362 363TARGET_PROC ?= $(TWL_PROC) 364TARGET_PROC ?= $(NITRO_PROC) 365TARGET_PROC ?= $(DEFAULT_PROC) 366 367ifneq ($(TWLSDK_PRIVATE),TRUE) 368TWLSDK_PRIVATE = 369endif 370 371ifneq ($(TWL_PROC),) 372NITRO_PROC := $(TWL_PROC) 373endif 374 375TWL_PROC ?= $(NITRO_PROC) 376 377ifeq ($(NITRO_PROC)$(TWL_PROC),) 378NITRO_PROC = $(DEFAULT_PROC) 379TWL_PROC = $(DEFAULT_PROC) 380TARGET_PROC_LIST = $(DEFAULT_PROC) $(if $(TWLSDK_PRIVATE),ARM7,) 381else 382TARGET_PROC_LIST = $(filter-out $(if $(TWLSDK_PRIVATE),,ARM7),$(if $(filter ALL,$(TARGET_PROC)),ARM7 ARM9,$(TARGET_PROC))) 383endif 384 385 386#---------------------------------------------------------------- 387# 388# Target Codegen 389# 390 391DEFAULT_CODEGEN = ARM 392 393TARGET_CODEGEN ?= $(TWL_CODEGEN) 394TARGET_CODEGEN ?= $(NITRO_CODEGEN) 395TARGET_CODEGEN ?= $(DEFAULT_CODEGEN) 396 397ifneq ($(TWL_CODEGEN),) 398NITRO_CODEGEN := $(TWL_CODEGEN) 399endif 400 401TWL_CODEGEN ?= $(NITRO_CODEGEN) 402 403ifeq ($(NITRO_CODEGEN)$(TWL_CODEGEN),) 404NITRO_CODEGEN := $(DEFAULT_CODEGEN) 405TWL_CODEGEN := $(DEFAULT_CODEGEN) 406endif 407 408CODEGEN_ARCH = $(if $(filter ARM,$(TARGET_CODEGEN)),,.thumb) 409CODEGEN_ARCH_ARM7 ?= $(CODEGEN_ARCH) 410CODEGEN_CC ?= $(TARGET_CODEGEN) 411CODEGEN_AS ?= ARM 412 413 414#---------------------------------------------------------------- 415# 416# Target build type 417# 418 419# The code below is used because the build type is often used in the ifdef conditions within makefiles 420# 421 422ifneq ($(NITRO_DEBUG),) 423ifeq ($(TWL_DEBUG),) 424TWL_DEBUG = $(NITRO_DEBUG) 425endif 426endif 427 428ifeq ($(TARGET_DEBUG),) 429TARGET_DEBUG = $(TWL_DEBUG) 430endif 431 432ifneq ($(NITRO_RELEASE),) 433ifeq ($(TWL_RELEASE),) 434TWL_RELEASE = $(NITRO_RELEASE) 435endif 436endif 437 438ifeq ($(TARGET_RELEASE),) 439TARGET_RELEASE = $(TWL_RELEASE) 440endif 441 442ifneq ($(NITRO_FINALROM),) 443ifeq ($(TWL_FINALROM),) 444TWL_FINALROM = $(NITRO_FINALROM) 445endif 446endif 447 448ifeq ($(TARGET_FINALROM),) 449TARGET_FINALROM = $(TWL_FINALROM) 450endif 451 452 453#---------------------------------------------------------------- 454# 455# GSUBDIRS 456# decided from $(TARGET_PLATFORM_xxx) and $(TWLSDK_PRIVATE) 457# 458 459define IS_TWL 460$(filter TWL,$(TARGET_PLATFORM_LIST)) 461endef 462 463define IS_NITRO 464$(filter NITRO,$(TARGET_PLATFORM_LIST)) 465endef 466 467GSUBDIRS = $(strip $(if $(IS_TWL),$(addsuffix .TWL,$(TARGET_PROC_LIST)),) $(if $(IS_NITRO),$(TARGET_PROC_LIST),)) 468 469 470#---------------------------------------------------------------------------- 471# TWLSDK_INSTALL_ROOT 472# 473 474ifdef TWLSDK_INSTALL_ROOT 475TWLSDK_INSTALL_ROOT_ := $(TWLSDK_INSTALL_ROOT) 476else 477TWLSDK_INSTALL_ROOT_ := $(TWLSDK_ROOT) 478endif 479 480TWL_INSTALL_ROOT := $(subst $(SPACE),\ ,$(subst \,/,$(TWLSDK_INSTALL_ROOT_))) 481TWL_INSTALL_INCDIR := $(TWL_INSTALL_ROOT)/include 482TWL_INSTALL_TOOLSDIR := $(TWL_INSTALL_ROOT)/tools 483TWL_INSTALL_LIBDIR = $(TWL_INSTALL_ROOT)/lib/$(TWL_LIBTYPE) 484TWL_INSTALL_COMPONENTSDIR := $(TWL_INSTALL_ROOT)/components 485TWL_INSTALL_ADDINS := $(TWL_INSTALL_ROOT)/add-ins 486 487#---------------------------------------------------------------------------- 488# NITROSDK_INSTALL_ROOT 489# 490 491NITROSDK_INSTALL_ROOT ?= $(TWLSDK_INSTALL_ROOT) 492NITROSDK_INSTALL_ROOT_ ?= $(TWLSDK_INSTALL_ROOT_) 493 494NITRO_INSTALL_ROOT ?= $(TWL_INSTALL_ROOT) 495NITRO_INSTALL_INCDIR ?= $(TWL_INSTALL_INCDIR) 496NITRO_INSTALL_TOOLSDIR ?= $(TWL_INSTALL_TOOLSDIR) 497NITRO_INSTALL_LIBDIR ?= $(TWL_INSTALL_LIBDIR) 498NITRO_INSTALL_COMPONENTSDIR ?= $(TWL_INSTALL_COMPONENTSDIR) 499NITRO_INSTALL_ADDINS ?= $(TWL_INSTALL_ADDINS) 500 501#---------------------------------------------------------------------------- 502# switch for NIGHTLYBUILD 503# 504ifeq ($(NIGHTLY_TARGET),full) 505SDK_NIGHTLY_BUILD = TRUE 506endif 507 508#---------------------------------------------------------------------------- 509# switch for NIGHTLYTEST 510# 511ifeq ($(NIGHTLY_TARGET),testsrl) 512SDK_NTEST = TRUE 513endif 514ifdef SDK_NTEST 515MACRO_FLAGS += -DSDK_NTEST 516endif 517 518#---------------------------------------------------------------- 519 520NITRO_BUILDTOOLSDIR := $(BUILDTOOLSDIR)/nitro 521TWL_BUILDTOOLSDIR := $(BUILDTOOLSDIR)/twl 522 523ifneq ($(filter TWL,$(TARGET_PLATFORM_LIST)),) 524include $(TWL_BUILDTOOLSDIR)/commondefs 525else 526ifneq ($(filter NITRO,$(TARGET_PLATFORM_LIST)),) 527include $(NITRO_BUILDTOOLSDIR)/commondefs 528else 529include $(BUILDTOOLSDIR)/commondefs.skip 530endif 531endif 532 533# This is a TWL-specific definition but it's also referenced during NITRO builds 534-include $(BUILDTOOLSDIR)/commondefs.compat.pre 535 536#---------------------------------------------------------------- 537# Merge flags 538# 539 540USE_STD_PCHDR = FALSE 541 542#ifeq ($(MAKEFLAGS_ALWAYS),FALSE) 543ifdef NITRO_STD_PCHDR 544ifndef NITRO_NO_STD_PCHDR 545USE_STD_PCHDR = TRUE 546endif 547endif 548 549ifdef TWL_STD_PCHDR 550ifndef TWL_NO_STD_PCHDR 551USE_STD_PCHDR = TRUE 552endif 553endif 554#endif 555 556 557#---------------------------------------------------------------------------- 558# NITRO-WIRELESS path settings 559# 560# libraries should be in 561# $(ROOT)/lib/NitroWireless 562# 563# includes should be in 564# $(ROOT)/include/nitro_wl/ARM7/*.h 565# 566# access by #include <nitro_wl/ARM7/*.h> 567# 568# SDK_VERSION_WL is defined in <nitro_wl/ARM7/version_wl.h> 569# 570 571NITROWIRELESS_VERSION ?= 2.88.00 572NITROWIRELESS_ROOT ?= $(ROOT)/add-ins/NitroWireless/Marionea-$(NITROWIRELESS_VERSION) 573NITROWIRELESS_ROOT_ = $(subst $(SPACE),\ ,$(subst \,/,$(NITROWIRELESS_ROOT))) 574NITROWIRELESS_LIBDIR ?= $(ROOT)/lib/NitroWireless/$(NITRO_LIBTYPE) 575NITROWIRELESS_INCDIR ?= $(ROOT)/include 576 577#---------------------------------------------------------------------------- 578endif # TWLSDK_TOP_COMMONDEFS_ 579#----- End of commondefs ----- 580