1###############################################################################
2# Top level makefile for build system
3#
4# Copyright 2006 Nintendo. All rights reserved.
5#
6# These coded instructions, statements, and computer programs contain
7# proprietary information of Nintendo of America Inc. and/or Nintendo
8# Company Ltd., and are protected by Federal copyright law. They may
9# not be disclosed to third parties or copied or duplicated in any form,
10# in whole or in part, without the prior written consent of Nintendo.
11###############################################################################
12
13# Valid targets
14# "make" by itself builds and installs everything listed in LIBS, DEMOS and
15# TESTS.  Default target is HW1 DEBUG
16# "make clean" cleans everything listed in LIBS, DEMOS and
17# TESTS.  Only MACOS DEBUG versions are cleaned
18# "make NDEBUG=TRUE" builds non-debug versions.
19# "make NDEBUG=TRUE clean" cleans only non-debug versions.
20
21include buildtools/commondefs
22
23###############################################################################
24# Dependencies
25###############################################################################
26
27# THE ORDER OF THE LIBRARIES LISTED IS ALSO THE LIBRARY BUILD ORDER
28
29# XXX All libraries that are included in commondefs->REVOLUTION_LIBS must be listed
30# XXX here under $(LIBS), or else executables will fail to link
31
32ifdef EPPC
33###################
34# EPPC BUILDS
35###################
36LIBS     =  ai           \
37            amcnotstub   \
38            amcstubs     \
39            odemustubs   \
40            odenotstub   \
41            ax           \
42            base         \
43            card         \
44            cx           \
45            db           \
46            dsp          \
47            dvd          \
48            exi          \
49            fa           \
50            gx           \
51            kpad         \
52            kpadOld      \
53            mem          \
54            midi         \
55            mtx          \
56            os           \
57            pad          \
58            si           \
59            vi           \
60            wpad         \
61            G2D          \
62            axart        \
63            axfx         \
64            demo         \
65            gd           \
66            mix          \
67            perf         \
68            sample       \
69            seq          \
70            sp           \
71            syn          \
72            thp          \
73            tpl          \
74            nand         \
75            sc           \
76            euart        \
77            ipc          \
78            hio2         \
79            sdi          \
80            socket       \
81            usb          \
82            arc          \
83            dvdvideo     \
84            wud          \
85            bte          \
86            cx           \
87            enc          \
88            cnt          \
89            fnt          \
90            esp          \
91            usbcmn       \
92            scutil       \
93            usbkbd       \
94            kbd          \
95            kpr          \
96            darch        \
97            hid          \
98            wfs          \
99            wfsdev       \
100            ga           \
101            wfa          \
102            pd           \
103            wbc          \
104            wpadGtr      \
105            wpadTrn      \
106
107
108LIBS_INTERNAL = wk        \
109                wkmc      \
110                sdwp      \
111                simplekit \
112                es        \
113                wad       \
114                cunit     \
115                fs        \
116                iprof
117
118LIBS += ${LIBS_INTERNAL}
119
120DEMOS    =  axdemo        \
121            dvddemo       \
122            fademo        \
123            gxdemo        \
124            kpaddemo      \
125            kpadOlddemo   \
126            memdemo       \
127            osdemo        \
128            sample        \
129            spdemo        \
130            videmo        \
131            wpaddemo      \
132            nanddemo      \
133            reldemo       \
134            paddemo       \
135            thpdemo       \
136            scprivatedemo \
137            scdemo        \
138            carddemo      \
139            gddemo        \
140            hio2demo      \
141            arcdemo       \
142            darchdemo     \
143            encdemo       \
144            cxdemo        \
145            fntdemo       \
146            kbddemo       \
147            kprdemo       \
148            mididemo      \
149            limitdemo     \
150            launchdemo    \
151            installdemo   \
152            rsodemo       \
153            hiddemo       \
154            cntdemo       \
155            wfademo       \
156            pddemo        \
157            wbcdemo
158
159
160TESTS    =  os        \
161            card      \
162            sample    \
163            exi       \
164            sdwp      \
165            nand      \
166            pad       \
167            sc        \
168            dvd       \
169            di        \
170            fs        \
171            es        \
172            sdi       \
173            socket    \
174            usb       \
175            wpad      \
176            abuse     \
177            Nmenu     \
178            enc       \
179            installer \
180            cx        \
181            updatecheck \
182            wfsdev    \
183            wfa
184
185endif # EPPC
186
187ifdef X86
188
189HOST_LIBS =  gd         \
190             hio2Host   \
191             wfsdev
192
193HOST_DEMOS = gddemo     \
194             hio2demo
195
196HOST_TOOLS = sample       \
197             dls1wt       \
198             dspadpcm     \
199             dsptool      \
200             sndconv      \
201             soundfile    \
202             thpaudio     \
203             thpcore      \
204             thputilities \
205             THPConv      \
206             darch        \
207             ntcompress   \
208             wfsdev
209
210endif # X86
211
212LIBDIRS     = $(addprefix $(LIB_ROOT)/,$(LIBS))
213TESTDIRS    = $(addprefix $(TEST_ROOT)/,$(TESTS))
214DEMODIRS    = $(addprefix $(DEMO_ROOT)/,$(DEMOS))
215
216HOSTLIBDIRS  = $(addprefix $(LIB_ROOT)/,$(HOST_LIBS))
217HOSTDEMODIRS = $(addprefix $(DEMO_ROOT)/,$(HOST_DEMOS))
218ADPCMLIBDIRS = $(addprefix $(LIB_ROOT)/,$(ADPCMLIB))
219SOUNDFILELIBDIRS = $(addprefix $(LIB_ROOT)/,$(SOUNDFILELIB))
220HOSTTOOLDIRS = $(addprefix $(TOOL_ROOT)/,$(HOST_TOOLS))
221
222# NOTE: the order of these directories determines build order.
223# In this case, we want libs first, tests second, demos last
224SUBDIRS     = $(addprefix $(LIB_ROOT)/,$(LIBS)) 	\
225              $(addprefix $(TEST_ROOT)/,$(TESTS))	\
226              $(addprefix $(DEMO_ROOT)/,$(DEMOS))	\
227              $(addprefix $(LIB_ROOT)/,$(HOST_LIBS))	\
228              $(addprefix $(DEMO_ROOT)/,$(HOST_DEMOS))	\
229              $(addprefix $(LIB_ROOT)/,$(SOUNDFILELIB))	\
230              $(addprefix $(LIB_ROOT)/,$(ADPCMLIB))
231
232# The following changes the Makefile include path to include a
233# definition of which architecture we're building for
234ARCH_PATH	= $(MAKE_ROOT)/$(ARCH_TARGET)
235
236all: setup subdirectories
237
238setup:
239	@if [ ! -d $(INSTALL_ROOT) ] ; then \
240		echo "Creating $(INSTALL_ROOT)" ; \
241		rm -rf $(INSTALL_ROOT) ; \
242		mkdir $(BASEINSTALL_ROOT) ; \
243		mkdir $(BASEINSTALL_ROOT)/$(ARCH_TARGET) ; \
244		mkdir $(INSTALL_ROOT)/lib ; \
245		mkdir $(INSTALL_ROOT)/bin ; \
246	else \
247		echo "Install directory ready" ;\
248	fi
249
250# the following lines build up the flags for the recursive make commands
251BUILDFLAGS	= X86=$(X86) PLATFORM=$(PLATFORM) DBREL="$(DBREL)" BUILDTOOLS_ROOT=$(MAKE_ROOT)
252
253ifdef NDEBUG
254BUILDFLAGS	+= NDEBUG=TRUE
255else
256BUILDFLAGS	+= DEBUG=TRUE
257endif
258
259ifdef BUILD
260BUILDFLAGS	+= build
261endif
262
263ifdef INSTALL
264BUILDFLAGS	+= install
265endif
266
267.PHONY: alllibs libraries demos tests hostlibs hostdemos adpcmlib
268
269subdirectories:
270	@for d in $(SUBDIRS) ; do \
271		echo "------------------------------------------------------------------" ; \
272		echo "Building $$d" ; \
273		if [ ! -d $$d ] ; then \
274			echo "Module $$d is missing...skipping" ; \
275		else \
276			$(MAKE) -C $$d $(BUILDFLAGS) ; \
277		fi ; \
278	done ;
279
280alllibs: libraries hostlibs
281
282libraries:
283	@for d in $(LIBDIRS) ; do \
284		echo "------------------------------------------------------------------" ; \
285		echo "Building $$d" ; \
286		if [ ! -d $$d ] ; then \
287			echo "Module $$d is missing...skipping" ; \
288		else \
289			$(MAKE) -C $$d $(BUILDFLAGS) ; \
290		fi ; \
291	done ;
292
293libraries.%:
294	@echo "------------------------------------------------------------------" ; \
295	echo "Building libraries/$*" ; \
296	$(MAKE) -C $(LIB_ROOT)/$* $(BUILDFLAGS)
297
298hostlibs:
299	@for d in $(HOSTLIBDIRS) ; do \
300		echo "------------------------------------------------------------------" ; \
301		echo "Building $$d" ; \
302		if [ ! -d $$d ] ; then \
303			echo "Module $$d is missing...skipping" ; \
304		else \
305			$(MAKE) -C $$d $(BUILDFLAGS) ; \
306		fi ; \
307	done ;
308
309hostlibs.%:
310	@echo "------------------------------------------------------------------" ; \
311	echo "Building libraries/$*" ; \
312	$(MAKE) -C $(LIB_ROOT)/$* $(BUILDFLAGS)
313
314demos:
315	@for d in $(DEMODIRS) ; do \
316		echo "------------------------------------------------------------------" ; \
317		echo "Building $$d" ; \
318		if [ ! -d $$d ] ; then \
319			echo "Module $$d is missing...skipping" ; \
320		else \
321			$(MAKE) -C $$d $(BUILDFLAGS) ; \
322		fi ; \
323	done ;
324
325demos.%:
326	@echo "------------------------------------------------------------------" ; \
327	echo "Building demos/$*" ; \
328	$(MAKE) -C $(DEMO_ROOT)/$* $(BUILDFLAGS)
329
330hostdemos:
331	@for d in $(HOSTDEMODIRS) ; do \
332		echo "------------------------------------------------------------------" ; \
333		echo "Building $$d" ; \
334		if [ ! -d $$d ] ; then \
335			echo "Module $$d is missing...skipping" ; \
336		else \
337			$(MAKE) -C $$d $(BUILDFLAGS) ; \
338		fi ; \
339	done ;
340
341hostdemos.%:
342	@echo "------------------------------------------------------------------" ; \
343	echo "Building demos/$*" ; \
344	$(MAKE) -C $(DEMO_ROOT)/$* $(BUILDFLAGS)
345
346hosttools:
347	@for d in $(HOSTTOOLDIRS) ; do \
348		echo "------------------------------------------------------------------" ; \
349		echo "Building $$d" ; \
350		if [ ! -d $$d ] ; then \
351			echo "Module $$d is missing...skipping" ; \
352		else \
353			$(MAKE) -C $$d $(BUILDFLAGS) ; \
354		fi ; \
355	done ;
356
357hosttools.%:
358	@echo "------------------------------------------------------------------" ; \
359	echo "Building demos/$*" ; \
360	$(MAKE) -C $(TOOL_ROOT)/$* $(BUILDFLAGS)
361
362tests:
363	@for d in $(TESTDIRS) ; do \
364		echo "------------------------------------------------------------------" ; \
365		echo "Building $$d" ; \
366		if [ ! -d $$d ] ; then \
367			echo "Module $$d is missing...skipping" ; \
368		else \
369			$(MAKE) -C $$d $(BUILDFLAGS) ; \
370		fi ; \
371	done ;
372
373tests.%:
374	@echo "------------------------------------------------------------------" ; \
375	echo "Building tests/$*" ; \
376	$(MAKE) -C $(TEST_ROOT)/$* $(BUILDFLAGS)
377
378adpcmlib:
379	@for d in $(ADPCMLIBDIRS) ; do \
380		echo "------------------------------------------------------------------" ; \
381		echo "Building $$d" ; \
382		if [ ! -d $$d ] ; then \
383			echo "Module $$d is missing...skipping" ; \
384		else \
385			$(MAKE) -C $$d $(BUILDFLAGS) ; \
386		fi ; \
387	done ;
388
389update:
390	@if [ ! -f $(SS) ] ; then \
391		echo "SourceSafe is not installed!  Please go to \\ntd-pdc\Vss\Dolphin Readme" ; \
392		exit 1; \
393	fi
394	@echo "Changing Sourcesafe project to $(SSROOT), performing full GET."
395	@$(SS) cp $(SSROOT) -I-Y -y$(SSUSER)
396	@cd $(ROOT)
397	@$(SS) get \*.\* -R -I-Y -y$(SSUSER) -r -gf
398
399clean clobber superclobber:
400	@echo ">>> Cleaning $(ARCH_TARGET) target" ;
401	@for d in $(SUBDIRS) ; do \
402		echo "------------------------------------------------------------------" ; \
403		echo "Cleaning $$d" ; \
404		if [ ! -d $$d ] ; then \
405			echo "Module $$d is missing...skipping" ; \
406		else \
407			$(MAKE) -C $$d $@ $(BUILDFLAGS) ; \
408		fi ; \
409	done ;
410
411clean_libraries:
412	@echo ">>> Cleaning $(ARCH_TARGET) target" ;
413	@for d in $(LIBDIRS) ; do \
414		echo "------------------------------------------------------------------" ; \
415		echo "Cleaning $$d" ; \
416		if [ ! -d $$d ] ; then \
417			echo "Module $$d is missing...skipping" ; \
418		else \
419			$(MAKE) -C $$d clean $(BUILDFLAGS) ; \
420		fi ; \
421	done ;
422