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