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