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