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 builtin rules
45#	-R			no builtin 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# �f�o�b�O�p�t���O
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			    # /bin/true �̑���� builtin �Ő^��Ԃ��R�}���h���g��
112TRUE			?= test true
113
114ifdef USE_ASH
115export SHELL=ash
116endif
117
118#----------------------------------------------------------------
119#
120# cygpath
121#
122
123CYGPATH					?= cygpath
124
125# ���� cygpath �͕W���ł͖��� (make 3.80 �ł� eval �֐��ɕs������蓮�삵�Ȃ�����)
126CYGPATH_NOCMD			?= FALSE
127
128# �������ʂ���ꍇ�͏�̒�`������(���얢�m�F)
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# 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# ���S
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# �ŏ����ő���
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# ���ʂ��܂܂�Ă���R���p�C���̃p�X�ɑΉ����邽�߂� "" �ň͂�ł���
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# Utililty 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# TARGET_* �݊��̂��߂̈ꎞ�I����
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# build type �� Makefile ���� ifdef �̏����Ɏg�p�����ꍇ���������߁A
421# �ȉ��̂悤�ȏ��������Ă��܂��B
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# TWL �ŗL�̒�`���� NITRO �r���h���ɂ��Q�Ƃ���
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