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