1###############################################################################
2# Makefile for modules - building and installing
3#
4# Copyright 2005 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###############################################################################
14#
15# This makefile can support one library per module, and any number of
16# executables.
17# The library is specified by the following variables in the module makefile:
18#   LIBNAME     - name of the library, with no suffix
19#   CLIBSRCS    - c sources to be included in library
20#   ASMLIBSRCS	- assembly sources to be included in library
21#
22# Executables rely on the following:
23#   BINNAMES    - names of all executables, with no suffix
24#   CSRCS       - all c sources to be built
25#   ASMSRCS     - all assembly sources to be built
26# Finally to show dependencies, each BINNAME should have its own rule at the
27# bottom of the module makefile, such as :
28# $(FULLBIN_ROOT)/cachedemo$(BINSUFFIX): cachedemo.o \
29#		      	$(REVOLUTION_LIBS)
30# If a linker command file is required, define the variable:
31#   LCF_FILE = myLCFfile.lcf
32#
33# The following pre-defined variables are relied upon :
34# FULLBIN_ROOT - a pointer to the binary directory of this module
35# BINSUFFIX    - the suffix of the binary (e.g. "D" if debug version, ".elf" if
36#                an EPPC binary
37# REVOLUTION_LIBS  - list of all Dolphin libraries appropriate for this target.
38#
39###############################################################################
40
41MKDIRP := mkdir -p
42
43# first, figure out which directory tree we are in, and set PROJ_ROOT
44# accordingly.
45ifdef CPBUILD
46ifeq ($(DEMO),TRUE)
47PROJ_ROOT	= $(CP_DEMO_ROOT)
48endif
49
50ifeq ($(LIB),TRUE)
51PROJ_ROOT	= $(CP_LIB_ROOT)
52endif
53
54else # CPBUILD
55ifeq ($(DEMO),TRUE)
56PROJ_ROOT	= $(DEMO_ROOT)
57endif
58
59ifeq ($(LIB),TRUE)
60PROJ_ROOT	= $(LIB_ROOT)
61endif
62endif # CPBUILD
63
64ifeq ($(TEST), TRUE)
65PROJ_ROOT	= $(TEST_ROOT)
66endif
67
68ifeq ($(SAMPLE), TRUE)
69PROJ_ROOT	= $(SAMPLE_ROOT)
70endif
71
72ifeq ($(CHAR_PIPELINE), TRUE)
73PROJ_ROOT	= $(CHAR_PIPELINE_ROOT)
74endif
75
76ifeq ($(BUILD_TOOL), TRUE)
77PROJ_ROOT	= $(MAKE_ROOT)
78endif
79
80# Paths relevant to this module - they are all based off of PROJ_ROOT
81
82# BINOBJ AND BINLIB MUST BE LOCAL BECAUSE OF BUG IN COMPILERS...they
83# cannot take absolute output path
84# however, the dependency code DOES generate full paths, so we need those
85# for pattern matching
86MODULE_ROOT	    = $(PROJ_ROOT)/$(MODULENAME)
87FULLSRC_ROOT    = $(MODULE_ROOT)/src
88
89BINOBJ_ROOT     = obj/$(ARCH_TARGET)/$(BUILD_TARGET)
90DEP_ROOT        = depend/$(ARCH_TARGET)/$(BUILD_TARGET)
91#FULLBINOBJ_ROOT = $(MODULE_ROOT)/$(BINOBJ_ROOT)
92FULLBINOBJ_ROOT = $(BINOBJ_ROOT)
93FULLDEP_ROOT    = $(MODULE_ROOT)/$(DEP_ROOT)
94
95BINLIB_ROOT     = lib/$(ARCH_TARGET)
96FULLBINLIB_ROOT = $(MODULE_ROOT)/$(BINLIB_ROOT)
97#FULLBIN_ROOT    = $(MODULE_ROOT)/bin/$(ARCH_TARGET)
98FULLBIN_ROOT    = bin/$(ARCH_TARGET)
99BIN_ROOT        = bin/$(ARCH_TARGET)
100VPATH           = $(FULLBIN_ROOT):$(FULLBINOBJ_ROOT)
101
102# Suffix rules
103.SUFFIXES:
104.SUFFIXES: .s .h .c .o .cpp
105
106###############################################################################
107#
108#   Generate lists of objects to be built
109#
110###############################################################################
111
112ALLCSRCS    = $(CSRCS) $(CLIBSRCS)
113ALLCPPSRCS  = $(CPPSRCS) $(CPPLIBSRCS)
114ALLASMSRCS  = $(ASMSRCS) $(ASMLIBSRCS)
115
116ifdef CSRCS
117OBJECTS     += $(addprefix $(FULLBINOBJ_ROOT)/, $(CSRCS:.c=.o))
118endif
119ifdef CPPSRCS
120OBJECTS     += $(addprefix $(FULLBINOBJ_ROOT)/, $(CPPSRCS:.cpp=.o))
121endif
122ifdef ASMSRCS
123OBJECTS     += $(addprefix $(FULLBINOBJ_ROOT)/, $(ASMSRCS:.s=.o))
124endif
125ifdef CLIBSRCS
126LIBOBJECTS  += $(addprefix $(FULLBINOBJ_ROOT)/, $(CLIBSRCS:.c=.o))
127endif
128ifdef CPPLIBSRCS
129LIBOBJECTS  += $(addprefix $(FULLBINOBJ_ROOT)/, $(CPPLIBSRCS:.cpp=.o))
130endif
131ifdef ASMLIBSRCS
132LIBOBJECTS  += $(addprefix $(FULLBINOBJ_ROOT)/, $(ASMLIBSRCS:.s=.o))
133endif
134
135ALLOBJECTS  = $(OBJECTS) $(LIBOBJECTS)
136
137# if we're building debug versions, need to change names of built libs/bins
138ifdef LIBNAME
139TARGET_LIB	= $(FULLBINLIB_ROOT)/$(LIBNAME)$(LIBSUFFIX)
140endif
141
142ifdef BINNAMES
143TARGET_BINS	= $(addprefix $(FULLBIN_ROOT)/,$(addsuffix $(BINSUFFIX), $(BINNAMES)))
144endif
145
146ifdef PLFNAMES
147TARGET_PLFS     = $(addprefix $(FULLBIN_ROOT)/,$(addsuffix $(PLFSUFFIX), $(PLFNAMES)))
148endif
149
150ifdef RELNAMES
151TARGET_PLFS     = $(addprefix $(FULLBIN_ROOT)/,$(addsuffix $(PLFSUFFIX), $(RELNAMES)))
152TARGET_PREPLFS  = $(addprefix $(FULLBIN_ROOT)/,$(addsuffix $(PREPLFSUFFIX), $(RELNAMES)))
153endif
154
155ifdef PUBLISHARGS
156PUBLISH_TARGET	:= $(subst $(comma),$(space),$(PUBLISHARGS))
157endif
158
159###############################################################################
160#
161#   Generic building rules
162#
163###############################################################################
164
165# GENERIC ASM FILE BUILDING
166$(FULLBINOBJ_ROOT)/%.o: src/%.s
167	@if [ ! -d $(@D) ] ; then \
168		echo ">>> Creating $(@D)" ; \
169		$(MKDIRP) $(@D) ; \
170	fi
171	@if [ ! -d $(dir $(FULLDEP_ROOT)/$*) ] ; then \
172		echo ">>> Creating $(dir $(FULLDEP_ROOT)/$*)" ; \
173		$(MKDIRP) $(dir $(FULLDEP_ROOT)/$*) ; \
174	fi
175	@if [ ! -d $(MODULE_ROOT)/include ] ; then \
176	    echo ">>> Creating $(MODULE_ROOT)/include" ;\
177		$(MKDIRP) $(MODULE_ROOT)/include ; \
178	fi
179	@echo ""
180	@echo "$< --> $@"
181ifdef EPPC
182	$(AS) $(ASFLAGS) $(INCLUDES) -c $< -o $(subst $(FULLBINOBJ_ROOT)/,$(BINOBJ_ROOT)/,$@) -MD
183ifndef SNSYS
184	@echo -n "$(FULLBINOBJ_ROOT)/$*.o: " > $(FULLDEP_ROOT)/$*.d
185	@sed -f "$(REVOLUTION_SDK_ROOT)/build/buildtools/eppccleandepend.sed" $(notdir $*).d >> $(FULLDEP_ROOT)/$*.d
186	@rm -f $(notdir $*).d
187else # SNSYS
188# 	@echo -n "$(FULLBINOBJ_ROOT)/$*.o: " > $(FULLDEP_ROOT)/$*.d
189endif # SNSYS
190else # EPPC
191# 	$(AS) $(ASFLAGS) $(INCLUDES) -c $< -o $(subst $(FULLBINOBJ_ROOT)/,$(BINOBJ_ROOT)/,$@)
192endif # EPPC
193
194
195# GENERIC C FILE BUILDING
196$(FULLBINOBJ_ROOT)/%.o: src/%.c
197	@if [ ! -d $(@D) ] ; then \
198		echo ">>> Creating $(@D)" ; \
199		$(MKDIRP) $(@D) ; \
200	fi
201	@if [ ! -d $(dir $(FULLDEP_ROOT)/$*) ] ; then \
202		echo ">>> Creating $(dir $(FULLDEP_ROOT)/$*)" ; \
203		$(MKDIRP) $(dir $(FULLDEP_ROOT)/$*) ; \
204	fi
205	@if [ ! -d $(MODULE_ROOT)/include ] ; then \
206	    echo ">>> Creating $(MODULE_ROOT)/include" ;\
207		$(MKDIRP) $(MODULE_ROOT)/include ; \
208	fi
209	@echo ""
210	@echo ">> $< --> $(BINOBJ_ROOT)/$(subst $(FULLBINOBJ_ROOT)/,,$@)"
211ifdef EPPC
212	$(CC) $(CCFLAGS) $(INCLUDES) $(COMPILE) $< \
213		-o $(subst $(FULLBINOBJ_ROOT)/,$(BINOBJ_ROOT)/,$@) -MD
214ifndef SNSYS
215	@echo -n "$(FULLBINOBJ_ROOT)/$*.o: " > $(FULLDEP_ROOT)/$*.d
216	@sed -f "$(REVOLUTION_SDK_ROOT)/build/buildtools/eppccleandepend.sed" $(notdir $*).d >> $(FULLDEP_ROOT)/$*.d
217	@rm -f $(notdir $*).d
218else # SNSYS
219# 	@echo "$(FULLBINOBJ_ROOT)/$*.o: " > $(FULLDEP_ROOT)/$*.d
220endif # SNSYS
221else # EPPC
222# 	$(CC) $(CCFLAGS) $(INCLUDES) $(COMPILE) $< \
223# 		-o $(subst $(FULLBINOBJ_ROOT)/,$(BINOBJ_ROOT)/,$@)
224endif # EPPC
225
226
227# GENERIC CXX FILE BUILDING
228$(FULLBINOBJ_ROOT)/%.o: src/%.cpp
229	@if [ ! -d $(@D) ] ; then \
230		echo ">>> Creating $(@D)" ; \
231		$(MKDIRP) $(@D) ; \
232	fi
233	@if [ ! -d $(dir $(FULLDEP_ROOT)/$*) ] ; then \
234		echo ">>> Creating $(dir $(FULLDEP_ROOT)/$*)" ; \
235		$(MKDIRP) $(dir $(FULLDEP_ROOT)/$*) ; \
236	fi
237	@if [ ! -d $(MODULE_ROOT)/include ] ; then \
238	    echo ">>> Creating $(MODULE_ROOT)/include" ;\
239		$(MKDIRP) $(MODULE_ROOT)/include ; \
240	fi
241	@echo ""
242	@echo ">> $< --> $(BINOBJ_ROOT)/$(subst $(FULLBINOBJ_ROOT)/,,$@)"
243ifdef EPPC
244	$(CC) $(CCFLAGS) $(INCLUDES) $(COMPILE) $< \
245		-o $(subst $(FULLBINOBJ_ROOT)/,$(BINOBJ_ROOT)/,$@) -MD
246ifndef SNSYS
247	@echo -n "$(FULLBINOBJ_ROOT)/$*.o: " > $(FULLDEP_ROOT)/$*.d
248	@sed -f "$(REVOLUTION_SDK_ROOT)/build/buildtools/eppccleandepend.sed" $(notdir $*).d >> $(FULLDEP_ROOT)/$*.d
249	@rm -f $(notdir $*).d
250else # SNSYS
251# 		echo "$(FULLBINOBJ_ROOT)/$*.o: " > $(FULLDEP_ROOT)/$*.d
252endif # SNSYS
253else # EPPC
254# 	$(CC) $(CCFLAGS) $(INCLUDES) $(COMPILE) $< \
255# 		-o $(subst $(FULLBINOBJ_ROOT)/,$(BINOBJ_ROOT)/,$@)
256endif # EPPC
257
258# GENERIC .elf/executable BUILDING
259# linker command file is used whenever LCF_FILE is defined.
260# Note it is only used when linking executables.
261
262ifdef LCF_FILE
263LDFLAGS += -lcf $(LCF_FILE)
264endif # LCF_FILE
265
266$(FULLBIN_ROOT)/%$(BINSUFFIX):
267	@echo ""
268	@echo ">> $(notdir $+) --> $(subst $(FULLBIN_ROOT)/,,$@)"
269	$(LD) $(filter-out %.lcf %.dol, $+) $(LDFLAGS) -o $@
270
271
272# Generate .wad (for NAND application)
273ifdef CNT_IDX
274DVD_ROOT = $(ROOT)/dvddata
275ARC_DIR = archives
276CONTENT_INDEX = $(subst $(comma),$(space),$(CNT_IDX))
277CNT_FILES = $(foreach val,$(CONTENT_INDEX),$(DVD_ROOT)/content$(val)/content$(val).arc)
278WAD_CNT = $(subst $(space),$(comma), \
279			$(foreach val,$(CONTENT_INDEX),$(DVD_ROOT)/$(ARC_DIR)/content$(val).arc))
280endif # CNT_IDX
281ifdef CNT_ARG
282CNT_FILES += $(subst $(comma),$(space),$(CNT_ARG))
283WAD_CNT := $(WAD_CNT)$(comma)$(CNT_ARG)
284endif # CNT_ARG
285
286
287
288ifdef NANDAPP
289CCFLAGS += -DNANDAPP
290ifdef WAD_APP
291%$(WADSUFFIX): $(FULLBIN_ROOT)/$(WAD_APP)$(BINSUFFIX) $(CNT_FILES)
292	@if [ ! -f $(ROOT)/X86/bin/makeWad.exe ] ; then \
293		echo "NADK is not installed. Exiting..."; \
294	else \
295		echo ""; \
296		echo ">> $(WAD_APP)$(BINSUFFIX) $(CNT_FILES) --> $@"; \
297		makedol -f $(FULLBIN_ROOT)/$(WAD_APP)$(BINSUFFIX) -d $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX); \
298		makeWad -n $*$(ASUFFIX) -l $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)$(WAD_CNT) $(WAD_OPTION); \
299		mv $*$(WADSUFFIX) $(FULLBIN_ROOT)/; \
300	fi
301else
302%$(WADSUFFIX): $(FULLBIN_ROOT)/%$(BINSUFFIX) $(CNT_FILES)
303	@if [ ! -f $(ROOT)/X86/bin/makeWad.exe ] ; then \
304		echo "NADK is not installed. Exiting..."; \
305	else \
306		echo ""; \
307		echo ">> $*$(BINSUFFIX) $(notdir $(CNT_FILES)) --> $@"; \
308		makedol -f $(FULLBIN_ROOT)/$*$(BINSUFFIX) -d $(FULLBIN_ROOT)/$*$(DOLSUFFIX); \
309		makeWad -n $*$(ASUFFIX) -l $(FULLBIN_ROOT)/$*$(DOLSUFFIX)$(WAD_CNT) $(WAD_OPTION); \
310		mv $*$(WADSUFFIX) $(FULLBIN_ROOT)/; \
311	fi
312endif # WAD_APP
313endif # NANDAPP
314
315
316ifndef CNT_IDX
317%.arc:
318else
319$(DVD_ROOT)/content%.arc:
320endif
321	@if [ ! -d $(DVD_ROOT)/$(ARC_DIR) ] ; then \
322		echo ""; \
323	    echo ">>> Creating $(DVD_ROOT)/$(ARC_DIR)" ;\
324		echo ""; \
325		$(MKDIRP) $(DVD_ROOT)/$(ARC_DIR) ; \
326	fi
327	@if [ ! -d $(@D) ] ; then \
328	    echo "$(@D) is not exist!" ; \
329	else \
330		echo "------------------------------------------------------------------" ; \
331		echo "Archiving $(@D)"; \
332		cd $(@D); \
333		darchD -c . $(@F); \
334		darchD -t $(@F); \
335		echo "$(DVD_ROOT)/archives/$(@F)"; \
336		mv $(@F) $(DVD_ROOT)/$(ARC_DIR); \
337	fi
338
339
340# Generate .plf (partial link file)
341ifdef EPPC
342$(FULLBIN_ROOT)/%$(PLFSUFFIX):
343	@echo ""
344	@echo ">> $(notdir $+) --> $(subst $(FULLBIN_ROOT)/,,$@)"
345ifdef SNSYS
346# 	$(LD) $+ -Wl,-r  -o $@
347else # SNSYS
348ifdef REL_LCF_FILE
349	$(LD) $(filter-out %.lcf,$+) $(REL_LDFLAGS) -lcf $(REL_LCF_FILE) -o $@
350else # REL_LCF_FILE
351# obsolete (for compatibility with 4/3/01 SDK)
352ifdef LCF_FILE
353	$(LD) $(filter-out %.lcf,$+) $(REL_LDFLAGS) -lcf $(LCF_FILE)     -o $@
354else # LCF_FILE
355	$(LD) $(filter-out %.lcf,$+) $(REL_LDFLAGS)                      -o $@
356endif # LCF_FILE
357endif # REL_LCF_FILE
358endif # SNSYS
359endif # EPPC
360
361# Generate .preplf (partial link file)
362ifdef EPPC
363$(FULLBIN_ROOT)/%$(PREPLFSUFFIX):
364	@echo ""
365	@echo ">> $(notdir $+) --> $(subst $(FULLBIN_ROOT)/,,$@)"
366ifdef SNSYS
367# 	$(LD) $+ -Wl,-r  -o $@
368else # SNSYS
369ifdef PREREL_LCF_FILE
370	$(LD) $(filter-out %.lcf,$+) $(PREREL_LDFLAGS) -lcf $(PREREL_LCF_FILE) -o $@
371else # PREREL_LCF_FILE
372	$(LD) $(filter-out %.lcf,$+) $(PREREL_LDFLAGS) -o $@
373endif # PREREL_LCF_FILE
374endif # SNSYS
375endif # EPPC
376
377# Generate .dol
378ifdef EPPC
379$(FULLBIN_ROOT)/%$(DOLSUFFIX): $(FULLBIN_ROOT)/%$(BINSUFFIX)
380	@echo ""
381	@echo ">> $(notdir $+) --> $(subst $(FULLBIN_ROOT)/,,$@)"
382	"$(ROOT)/X86/bin/makedolD.exe" -f $< -d $@
383endif
384
385# GENERIC dependency building
386ifdef X86
387
388$(FULLDEP_ROOT)/%$(DEPSUFFIX): src/%.c
389	@if [ ! -d $(@D) ] ; then \
390		echo ">>> Creating $(@D)" ; \
391		$(MKDIRP) $(@D) ; \
392	fi
393	@if [ ! -d $(MODULE_ROOT)/include ] ; then \
394	    echo ">>> Creating $(MODULE_ROOT)/include" ;\
395		$(MKDIRP) $(MODULE_ROOT)/include ; \
396	fi
397	@echo "Refreshing dependency $@"
398	@rm -f $@
399	@echo -n "$(FULLBINOBJ_ROOT)/$*.o " > $@
400	@$(CC) $(CCFLAGS) $(INCLUDES) -MM $(MODULE_ROOT)/$< | tr -d '\r' >> $@
401
402endif
403
404
405
406# GENERIC LIBRARY LINKING
407$(TARGET_LIB): $(LIBOBJECTS)
408	@echo ""
409	@echo ">> New $(notdir $?) --> linking $@"
410ifdef SNSYS
411# 	$(AR) $(ARFLAGS) $(TARGET_LIB) $(LIBOBJECTS)
412else # SNSYS
413	$(AR) $(ARFLAGS) $(LIBOBJECTS) -o $(TARGET_LIB)
414endif # SNSYS
415
416###############################################################################
417#
418#   Miscellaneous targets - cleaning and setup
419#
420###############################################################################
421
422SETUP_ROOTS = $(BINOBJ_ROOT) $(INSTALL_ROOT) $(BINLIB_ROOT) $(BIN_ROOT)
423
424setup:	$(SETUP_ROOTS)
425
426$(INSTALL_ROOT):
427	@echo "Creating $(INSTALL_ROOT)" ; \
428	rm -rf $(INSTALL_ROOT) ; \
429	$(MKDIRP) $(BASEINSTALL_ROOT) ; \
430	$(MKDIRP) $(BASEINSTALL_ROOT)/$(ARCH_TARGET) ; \
431	$(MKDIRP) $(INSTALL_ROOT)/include ; \
432	$(MKDIRP) $(INSTALL_ROOT)/lib ; \
433	$(MKDIRP) $(INSTALL_ROOT)/bin
434
435$(BINOBJ_ROOT):
436ifndef NANDAPP
437	@echo "Creating $(BINOBJ_ROOT)" ; \
438	$(MKDIRP) $(MODULE_ROOT)/obj ; \
439	$(MKDIRP)  $(MODULE_ROOT)/obj/$(ARCH_TARGET) ; \
440	$(MKDIRP)  $(MODULE_ROOT)/obj/$(ARCH_TARGET)/DEBUG ; \
441	$(MKDIRP)  $(MODULE_ROOT)/obj/$(ARCH_TARGET)/NDEBUG
442else
443	@echo "Creating $(BINOBJ_ROOT)" ; \
444	$(MKDIRP) $(MODULE_ROOT)/obj ; \
445	$(MKDIRP)  $(MODULE_ROOT)/obj/NANDAPP ; \
446	$(MKDIRP)  $(MODULE_ROOT)/obj/NANDAPP/DEBUG ; \
447	$(MKDIRP)  $(MODULE_ROOT)/obj/NANDAPP/NDEBUG
448endif
449
450$(BINLIB_ROOT):
451	@echo "Creating $(BINLIB_ROOT)" ; \
452	$(MKDIRP) $(MODULE_ROOT)/lib ; \
453	$(MKDIRP) $(BINLIB_ROOT)
454
455$(BIN_ROOT):
456	@echo "Creating $(BIN_ROOT)" ; \
457	$(MKDIRP) $(MODULE_ROOT)/bin ; \
458	$(MKDIRP) $(BIN_ROOT)
459
460ifdef NANDAPP
461build:	setup $(foreach val, $(BINNAMES), $(val)$(WADSUFFIX))
462else
463build:	setup
464endif
465ifdef MULTIPROCESSOR
466	@$(MAKE) -j X86=$(X86) PLATFORM=$(PLATFORM) INCLUDEDEPS=TRUE dobuild
467else
468	@$(MAKE) X86=$(X86) PLATFORM=$(PLATFORM) INCLUDEDEPS=TRUE dobuild
469endif
470
471dobuild: $(OBJECTS) $(TARGET_LIB) $(TARGET_BINS) $(TARGET_DOLS) $(TARGET_PLFS) $(TARGET_PREPLFS)
472
473cleandep:
474	rm -rf depend/$(ARCH_TARGET)/DEBUG/*
475	rm -rf depend/$(ARCH_TARGET)/NDEBUG/*
476
477cleantilde:
478	rm -f $(addprefix src/, $(ALLCSRCS:.c=.c~))
479	rm -f $(addprefix src/, $(ALLCSRCS:.c=.BAK))
480	rm -f *~ *.BAK
481	rm -f include/*~ include/*.BAK
482
483clobberdemoinstall:
484ifdef DEMO
485ifdef MODULENAME
486	rm -rf $(INSTALL_ROOT)/bin/demos/$(MODULENAME)/*
487endif
488endif
489
490clobbertest:
491ifdef TEST
492ifdef MODULENAME
493	rm -rf $(INSTALL_ROOT)/bin/tests/$(MODULENAME)/*
494endif
495endif
496
497clobberlib:
498	rm -rf $(BINLIB_ROOT)/*
499ifdef LIBNAME
500	rm -f $(INSTALL_ROOT)/lib/$(LIBNAME)$(LIBSUFFIX)
501endif
502
503cleanidb:
504ifdef MAC
505# 	rm -f $(BIN_ROOT)/*.idb
506endif
507
508cleandis:
509	rm -f src/*.c.s
510
511cleanobj:
512	rm -rf obj/$(ARCH_TARGET)/DEBUG/*
513	rm -rf obj/$(ARCH_TARGET)/NDEBUG/*
514
515clobberbin:
516	rm -rf $(BIN_ROOT)/*
517	rm -f *.MAP
518
519cleanuser:
520ifdef CLEANFILES
521	rm -rf $(CLEANFILES)
522endif
523
524clean:		cleanobj cleandep cleantilde cleanidb cleandis cleanuser
525
526clobber:	clean clobberbin clobberlib clobberdemoinstall clobbertest
527
528superclobber: clobber
529	rm -rf bin
530	rm -rf obj
531	rm -rf lib
532	rm -rf depend
533
534###############################################################################
535#
536# Module installation - copy binaries and libraries to appropriate locations
537# All libraries are installed.
538# Only demo binaries are installed.
539#
540###############################################################################
541
542install: build
543ifndef SNSYS
544	@echo -n "$(MODULE_ROOT) - ";
545	@if [ `ls lib/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \
546		echo -n "No libs to export..." ; \
547	else \
548		echo -n "Exporting libs..." ; \
549		if [ ! -d $(INSTALL_ROOT)/lib ] ; then \
550			echo -n "Creating $(INSTALL_ROOT)/lib..." ; \
551			$(MKDIRP) $(INSTALL_ROOT)/lib ; \
552		fi ; \
553		cp -uR lib/$(ARCH_TARGET)/* $(INSTALL_ROOT)/lib ; \
554		chmod +w $(INSTALL_ROOT)/lib/*  ; \
555	fi
556ifdef DEMO
557	@if [ `ls bin/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \
558		echo -n "No binaries to export..." ; \
559	else \
560		echo -n "Exporting binaries..." ; \
561		if [ ! -d $(INSTALL_ROOT)/bin/demos/$(MODULENAME) ] ; then \
562			echo -n "Creating $(INSTALL_ROOT)/bin/demos/$(MODULENAME)..." ; \
563			$(MKDIRP) $(INSTALL_ROOT)/bin/demos ; \
564			$(MKDIRP) $(INSTALL_ROOT)/bin/demos/$(MODULENAME) ; \
565		fi ; \
566		cp -uR bin/$(ARCH_TARGET)/* $(INSTALL_ROOT)/bin/demos/$(MODULENAME)/ ; \
567		chmod +w $(INSTALL_ROOT)/bin/demos/$(MODULENAME)/*  ; \
568	fi
569endif
570ifdef TEST
571	@if [ `ls bin/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \
572		echo -n "No binaries to export..." ; \
573	else \
574		echo -n "Exporting binaries..." ; \
575		if [ ! -d $(INSTALL_ROOT)/bin/tests/$(MODULENAME) ] ; then \
576			echo -n "Creating $(INSTALL_ROOT)/bin/tests/$(MODULENAME)..." ; \
577			$(MKDIRP) $(INSTALL_ROOT)/bin/tests ; \
578			$(MKDIRP) $(INSTALL_ROOT)/bin/tests/$(MODULENAME) ; \
579		fi ; \
580		cp -uR bin/$(ARCH_TARGET)/* $(INSTALL_ROOT)/bin/tests/$(MODULENAME)/ ; \
581		chmod +w $(INSTALL_ROOT)/bin/tests/$(MODULENAME)/*  ; \
582	fi
583endif
584ifdef APPLOADER
585	@if [ `ls bin/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \
586		echo -n "No binaries to export..." ; \
587	else \
588		echo -n "Exporting apploader binaries..." ; \
589		if [ ! -d $(INSTALL_ROOT)/boot ] ; then \
590			echo -n "Creating $(INSTALL_ROOT)/boot..." ; \
591			$(MKDIRP) $(INSTALL_ROOT)/boot ; \
592		fi ; \
593		cp -u bin/$(ARCH_TARGET)/apploader$(IMGSUFFIX) $(INSTALL_ROOT)/boot/ ; \
594		chmod +w $(INSTALL_ROOT)/boot/*  ; \
595	fi
596endif
597ifdef TOOL
598	@if [ `ls bin/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \
599		echo -n "No binaries to export..." ; \
600	else \
601		echo -n "Exporting makedol binaries..." ; \
602		if [ ! -d $(INSTALL_ROOT)/bin ] ; then \
603			echo -n "Creating $(INSTALL_ROOT)/bin..." ; \
604			$(MKDIRP) $(INSTALL_ROOT)/bin ; \
605		fi ; \
606		cp -uR bin/$(ARCH_TARGET)/* $(INSTALL_ROOT)/bin/ ; \
607		chmod +w $(INSTALL_ROOT)/bin/*  ; \
608	fi
609endif
610	@echo ""
611endif # SNSYS
612
613# Generate dependency files
614ifdef INCLUDEDEPS
615ifneq (,$(firstword $(ALLASMSRCS)))
616-include $(addprefix $(FULLDEP_ROOT)/, $(ALLASMSRCS:.s=$(DEPSUFFIX)))
617endif
618ifneq (,$(firstword $(ALLCSRCS)))
619-include $(addprefix $(FULLDEP_ROOT)/, $(ALLCSRCS:.c=$(DEPSUFFIX)))
620endif
621ifneq (,$(firstword $(ALLCPPSRCS)))
622-include $(addprefix $(FULLDEP_ROOT)/, $(ALLCPPSRCS:.cpp=$(DEPSUFFIX)))
623endif
624endif
625
626