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 43ifdef MAKE_ON_CYGWIN 44CLEAN_DEPEND := sed -f "$(REVOLUTION_SDK_ROOT)/build/buildtools/eppccleandepend.sed" 45endif 46 47CYGPATH := sed -e 'sX\/cygdrive\/\([a-zA-Z]\+\)\/X\1:\/Xg' 48 49# first, figure out which directory tree we are in, and set PROJ_ROOT 50# accordingly. 51ifdef CPBUILD 52ifeq ($(DEMO),TRUE) 53PROJ_ROOT = $(CP_DEMO_ROOT) 54endif 55 56ifeq ($(LIB),TRUE) 57PROJ_ROOT = $(CP_LIB_ROOT) 58endif 59 60else # CPBUILD 61ifeq ($(DEMO),TRUE) 62PROJ_ROOT = $(DEMO_ROOT) 63endif 64 65ifeq ($(LIB),TRUE) 66PROJ_ROOT = $(LIB_ROOT) 67endif 68endif # CPBUILD 69 70ifeq ($(TEST), TRUE) 71PROJ_ROOT = $(TEST_ROOT) 72endif 73 74ifeq ($(SAMPLE), TRUE) 75PROJ_ROOT = $(SAMPLE_ROOT) 76endif 77 78ifeq ($(CHAR_PIPELINE), TRUE) 79PROJ_ROOT = $(CHAR_PIPELINE_ROOT) 80endif 81 82ifeq ($(BUILD_TOOL), TRUE) 83PROJ_ROOT = $(MAKE_ROOT) 84endif 85 86# Paths relevant to this module - they are all based off of PROJ_ROOT 87 88# BINOBJ AND BINLIB MUST BE LOCAL BECAUSE OF BUG IN COMPILERS...they 89# cannot take absolute output path 90# however, the dependency code DOES generate full paths, so we need those 91# for pattern matching 92MODULE_ROOT = $(PROJ_ROOT)/$(MODULENAME) 93FULLSRC_ROOT = $(MODULE_ROOT)/src 94 95BINOBJ_ROOT = obj/$(ARCH_TARGET)/$(BUILD_TARGET) 96DEP_ROOT = depend/$(ARCH_TARGET)/$(BUILD_TARGET) 97FULLBINOBJ_ROOT = $(BINOBJ_ROOT) 98FULLDEP_ROOT = $(MODULE_ROOT)/$(DEP_ROOT) 99 100BINLIB_ROOT = lib/$(ARCH_TARGET) 101FULLBINLIB_ROOT = $(MODULE_ROOT)/$(BINLIB_ROOT) 102FULLBIN_ROOT = bin/$(ARCH_TARGET) 103BIN_ROOT = bin/$(ARCH_TARGET) 104VPATH = $(FULLBIN_ROOT):$(FULLBINOBJ_ROOT) 105 106# Suffix rules 107.SUFFIXES: 108.SUFFIXES: .s .h .c .o .cpp 109 110############################################################################### 111# 112# Generate lists of objects to be built 113# 114############################################################################### 115 116ALLCSRCS = $(CSRCS) $(CLIBSRCS) 117ALLCPPSRCS = $(CPPSRCS) $(CPPLIBSRCS) 118ALLASMSRCS = $(ASMSRCS) $(ASMLIBSRCS) 119 120ifdef CSRCS 121OBJECTS += $(addprefix $(FULLBINOBJ_ROOT)/, $(CSRCS:.c=.o)) 122ifdef WADNAMES 123OBJECTS += $(addprefix $(FULLBINOBJ_ROOT)/, $(CSRCS:.c=$(NANDAPPSUFFIX).o)) 124endif 125endif 126ifdef CPPSRCS 127OBJECTS += $(addprefix $(FULLBINOBJ_ROOT)/, $(CPPSRCS:.cpp=.o)) 128ifdef WADNAMES 129OBJECTS += $(addprefix $(FULLBINOBJ_ROOT)/, $(CPPSRCS:.cpp=$(NANDAPPSUFFIX).o)) 130endif 131endif 132ifdef ASMSRCS 133OBJECTS += $(addprefix $(FULLBINOBJ_ROOT)/, $(ASMSRCS:.s=.o)) 134endif 135ifdef CLIBSRCS 136LIBOBJECTS += $(addprefix $(FULLBINOBJ_ROOT)/, $(CLIBSRCS:.c=.o)) 137endif 138ifdef CPPLIBSRCS 139LIBOBJECTS += $(addprefix $(FULLBINOBJ_ROOT)/, $(CPPLIBSRCS:.cpp=.o)) 140endif 141ifdef ASMLIBSRCS 142LIBOBJECTS += $(addprefix $(FULLBINOBJ_ROOT)/, $(ASMLIBSRCS:.s=.o)) 143endif 144 145ALLOBJECTS = $(OBJECTS) $(LIBOBJECTS) 146 147# if we're building debug versions, need to change names of built libs/bins 148ifdef LIBNAME 149TARGET_LIB = $(FULLBINLIB_ROOT)/$(LIBNAME)$(LIBSUFFIX) 150endif 151 152ifdef BINNAMES 153TARGET_BINS = $(addprefix $(FULLBIN_ROOT)/,$(addsuffix $(BINSUFFIX), $(BINNAMES))) 154endif 155 156ifdef WADNAMES 157TARGET_WADS = $(addprefix $(FULLBIN_ROOT)/,$(addsuffix $(WADSUFFIX), $(WADNAMES))) 158endif 159 160ifdef PLFNAMES 161TARGET_PLFS = $(addprefix $(FULLBIN_ROOT)/,$(addsuffix $(PLFSUFFIX), $(PLFNAMES))) 162endif 163 164ifdef RELNAMES 165TARGET_PLFS = $(addprefix $(FULLBIN_ROOT)/,$(addsuffix $(PLFSUFFIX), $(RELNAMES))) 166TARGET_PREPLFS = $(addprefix $(FULLBIN_ROOT)/,$(addsuffix $(PREPLFSUFFIX), $(RELNAMES))) 167endif 168 169ifdef PUBLISHARGS 170PUBLISH_TARGET := $(subst $(comma),$(space),$(PUBLISHARGS)) 171endif 172 173############################################################################### 174# 175# Generic building rules 176# 177############################################################################### 178 179# GENERIC ASM FILE BUILDING 180$(FULLBINOBJ_ROOT)/%.o: src/%.s 181 @if [ ! -d $(@D) ] ; then \ 182 echo ">>> Creating $(@D)" ; \ 183 $(MKDIRP) $(@D) ; \ 184 fi 185 @if [ ! -d $(dir $(FULLDEP_ROOT)/$*) ] ; then \ 186 echo ">>> Creating $(dir $(FULLDEP_ROOT)/$*)" ; \ 187 $(MKDIRP) $(dir $(FULLDEP_ROOT)/$*) ; \ 188 fi 189 @if [ ! -d $(MODULE_ROOT)/include ] ; then \ 190 echo ">>> Creating $(MODULE_ROOT)/include" ;\ 191 $(MKDIRP) $(MODULE_ROOT)/include ; \ 192 fi 193 @echo "" 194 @echo "$< --> $@" 195ifdef EPPC 196 $(AS) $(ASFLAGS) $(INCLUDES) -c $< -o $(subst $(FULLBINOBJ_ROOT)/,$(BINOBJ_ROOT)/,$@) -MD 197ifndef SNSYS 198 @echo -n "$(FULLBINOBJ_ROOT)/$*.o: " > $(FULLDEP_ROOT)/$*.d ;\ 199 $(CLEAN_DEPEND) $(notdir $*).d >> $(FULLDEP_ROOT)/$*.d ;\ 200 rm -f $(notdir $*).d 201else # SNSYS 202endif # SNSYS 203else # EPPC 204endif # EPPC 205 206 207# GENERIC C FILE BUILDING 208$(FULLBINOBJ_ROOT)/%.o: src/%.c 209 @if [ ! -d $(@D) ] ; then \ 210 echo ">>> Creating $(@D)" ; \ 211 $(MKDIRP) $(@D) ; \ 212 fi 213 @if [ ! -d $(dir $(FULLDEP_ROOT)/$*) ] ; then \ 214 echo ">>> Creating $(dir $(FULLDEP_ROOT)/$*)" ; \ 215 $(MKDIRP) $(dir $(FULLDEP_ROOT)/$*) ; \ 216 fi 217 @if [ ! -d $(MODULE_ROOT)/include ] ; then \ 218 echo ">>> Creating $(MODULE_ROOT)/include" ;\ 219 $(MKDIRP) $(MODULE_ROOT)/include ; \ 220 fi 221 @echo "" 222 @echo ">> $< --> $(BINOBJ_ROOT)/$(subst $(FULLBINOBJ_ROOT)/,,$@)" 223ifdef EPPC 224 $(CC) $(CCFLAGS) $(INCLUDES) $(PREFIX_FILE) $(COMPILE) $< \ 225 -o $(subst $(FULLBINOBJ_ROOT)/,$(BINOBJ_ROOT)/,$@) -MD 226ifndef SNSYS 227 @echo -n "$(FULLBINOBJ_ROOT)/$*.o: " > $(FULLDEP_ROOT)/$*.d ;\ 228 $(CLEAN_DEPEND) $(notdir $*).d >> $(FULLDEP_ROOT)/$*.d ;\ 229 rm -f $(notdir $*).d 230else # SNSYS 231endif # SNSYS 232else # EPPC 233endif # EPPC 234 235# GENERIC C FILE BUILDING FOR NANDAPP 236$(FULLBINOBJ_ROOT)/%$(NANDAPPSUFFIX).o: src/%.c 237 @if [ ! -d $(@D) ] ; then \ 238 echo ">>> Creating $(@D)" ; \ 239 $(MKDIRP) $(@D) ; \ 240 fi 241 @if [ ! -d $(dir $(FULLDEP_ROOT)/$*) ] ; then \ 242 echo ">>> Creating $(dir $(FULLDEP_ROOT)/$*)" ; \ 243 $(MKDIRP) $(dir $(FULLDEP_ROOT)/$*) ; \ 244 fi 245 @if [ ! -d $(MODULE_ROOT)/include ] ; then \ 246 echo ">>> Creating $(MODULE_ROOT)/include" ;\ 247 $(MKDIRP) $(MODULE_ROOT)/include ; \ 248 fi 249 @echo "" 250 @echo ">> $< --> $(BINOBJ_ROOT)/$(subst $(FULLBINOBJ_ROOT)/,,$@)" 251ifdef EPPC 252 $(CC) $(CCFLAGS) -DNANDAPP=TRUE $(INCLUDES) $(PREFIX_FILE) $(COMPILE) $< \ 253 -o $(subst $(FULLBINOBJ_ROOT)/,$(BINOBJ_ROOT)/,$@) -MD 254ifndef SNSYS 255 @echo -n "$(FULLBINOBJ_ROOT)/$*.o: " > $(FULLDEP_ROOT)/$*.d ;\ 256 $(CLEAN_DEPEND) $(notdir $*).d >> $(FULLDEP_ROOT)/$*.d ;\ 257 rm -f $(notdir $*).d 258else # SNSYS 259endif # SNSYS 260else # EPPC 261endif # EPPC 262 263# GENERIC CXX FILE BUILDING 264$(FULLBINOBJ_ROOT)/%.o: src/%.cpp 265 @if [ ! -d $(@D) ] ; then \ 266 echo ">>> Creating $(@D)" ; \ 267 $(MKDIRP) $(@D) ; \ 268 fi 269 @if [ ! -d $(dir $(FULLDEP_ROOT)/$*) ] ; then \ 270 echo ">>> Creating $(dir $(FULLDEP_ROOT)/$*)" ; \ 271 $(MKDIRP) $(dir $(FULLDEP_ROOT)/$*) ; \ 272 fi 273 @if [ ! -d $(MODULE_ROOT)/include ] ; then \ 274 echo ">>> Creating $(MODULE_ROOT)/include" ;\ 275 $(MKDIRP) $(MODULE_ROOT)/include ; \ 276 fi 277 @echo "" 278 @echo ">> $< --> $(BINOBJ_ROOT)/$(subst $(FULLBINOBJ_ROOT)/,,$@)" 279ifdef EPPC 280 $(CC) $(CCFLAGS) $(INCLUDES) $(COMPILE) $< \ 281 -o $(subst $(FULLBINOBJ_ROOT)/,$(BINOBJ_ROOT)/,$@) -MD 282ifndef SNSYS 283 @echo -n "$(FULLBINOBJ_ROOT)/$*.o: " > $(FULLDEP_ROOT)/$*.d ;\ 284 $(CLEAN_DEPEND) $(notdir $*).d >> $(FULLDEP_ROOT)/$*.d ;\ 285 rm -f $(notdir $*).d 286else # SNSYS 287endif # SNSYS 288else # EPPC 289endif # EPPC 290 291# GENERIC CXX FILE BUILDING FOR NANDAPP 292$(FULLBINOBJ_ROOT)/%$(NANDAPPSUFFIX).o: src/%.cpp 293 @if [ ! -d $(@D) ] ; then \ 294 echo ">>> Creating $(@D)" ; \ 295 $(MKDIRP) $(@D) ; \ 296 fi 297 @if [ ! -d $(dir $(FULLDEP_ROOT)/$*) ] ; then \ 298 echo ">>> Creating $(dir $(FULLDEP_ROOT)/$*)" ; \ 299 $(MKDIRP) $(dir $(FULLDEP_ROOT)/$*) ; \ 300 fi 301 @if [ ! -d $(MODULE_ROOT)/include ] ; then \ 302 echo ">>> Creating $(MODULE_ROOT)/include" ;\ 303 $(MKDIRP) $(MODULE_ROOT)/include ; \ 304 fi 305 @echo "" 306 @echo ">> $< --> $(BINOBJ_ROOT)/$(subst $(FULLBINOBJ_ROOT)/,,$@)" 307ifdef EPPC 308 $(CC) $(CCFLAGS) -DNANDAPP=TRUE $(INCLUDES) $(COMPILE) $< \ 309 -o $(subst $(FULLBINOBJ_ROOT)/,$(BINOBJ_ROOT)/,$@) -MD 310ifndef SNSYS 311 @echo -n "$(FULLBINOBJ_ROOT)/$*.o: " > $(FULLDEP_ROOT)/$*.d ;\ 312 $(CLEAN_DEPEND) $(notdir $*).d >> $(FULLDEP_ROOT)/$*.d ;\ 313 rm -f $(notdir $*).d 314else # SNSYS 315endif # SNSYS 316else # EPPC 317endif # EPPC 318 319# GENERIC .elf/executable BUILDING 320# linker command file is used whenever LCF_FILE is defined. 321# Note it is only used when linking executables. 322 323ifdef LCF_FILE 324LDFLAGS += -lcf $(LCF_FILE) 325endif # LCF_FILE 326 327$(FULLBIN_ROOT)/%$(BINSUFFIX): 328 @echo "" 329 @echo ">> $(notdir $+) --> $(subst $(FULLBIN_ROOT)/,,$@)" 330ifdef MAKE_ON_CYGWIN 331 $(LD) $(shell echo $(filter-out %.lcf %.dol, $+) |$(CYGPATH)) $(LDFLAGS) -o $(shell echo $@ |$(CYGPATH)) 332else 333 $(LD) $(filter-out %.lcf %.dol, $+) $(LDFLAGS) -o $@ 334endif # MAKE_ON_CYGWIN 335 336# Generate .wad (for NAND application) 337ifdef CNT_IDX 338ifdef MAKE_ON_CYGWIN 339DVD_ROOT = $(shell cygpath -m $(word 2, $(shell getndenv))) 340else 341DVD_ROOT = $(shell echo $(word 2, $(shell getndenv))) 342endif 343ARC_DIR = archives 344CONTENT_INDEX = $(subst $(comma),$(space),$(CNT_IDX)) 345CNT_FILES = $(foreach val,$(CONTENT_INDEX),$(DVD_ROOT)/content$(val)/content$(val).arc) 346WAD_CNT = $(subst $(space),$(comma), \ 347 $(foreach val,$(CONTENT_INDEX),$(DVD_ROOT)/$(ARC_DIR)/content$(val).arc)) 348endif # CNT_IDX 349ifdef CNT_ARG 350CNT_FILES += $(subst $(comma),$(space),$(CNT_ARG)) 351WAD_CNT := $(WAD_CNT)$(comma)$(CNT_ARG) 352endif # CNT_ARG 353 354ifdef NANDAPP 355ifndef NOEXPORT 356NANDAPP_TARGET = $(foreach val, $(BINNAMES), $(val)$(REGION_SUFFIX)$(WADSUFFIX)) 357endif 358endif #NANDAPP 359 360ifdef NANDAPP 361ifdef WAD_APP 362%$(REGION_SUFFIX)$(WADSUFFIX): $(FULLBIN_ROOT)/$(WAD_APP)$(BINSUFFIX) $(CNT_FILES) 363ifdef COUNTRY_REGION 364 setcountrycode $(COUNTRY_REGION) 365endif 366ifdef PARENTAL_CONTROL_ID_LIST 367 setnparentalcontrol $(PARENTAL_CONTROL_ID_LIST) 368endif 369ifndef NOCOMPRESS 370 @if [ ! -f $(ROOT)/X86/bin/makeWad.exe ] ; then \ 371 echo "NADK is not installed. Exiting..."; \ 372 else \ 373 echo ""; \ 374 echo ">> $(WAD_APP)$(BINSUFFIX) $(notdir $(CNT_FILES)) --> $@"; \ 375 echo makedol -f $(FULLBIN_ROOT)/$(WAD_APP)$(BINSUFFIX) -d $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX); \ 376 makedol -f $(FULLBIN_ROOT)/$(WAD_APP)$(BINSUFFIX) -d $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX); \ 377 echo "ntcompress -lex -A32 -o $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)$(LZ77SUFFIX) $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)"; \ 378 ntcompress -lex -A32 -o $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)$(LZ77SUFFIX) $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX); \ 379 echo makeWad -n $(WAD_APP)$(ASUFFIX) -l $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)$(LZ77SUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 380 makeWad -n $(WAD_APP)$(ASUFFIX) -l $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)$(LZ77SUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 381 echo mv $(WAD_APP)$(WADSUFFIX) -> $(FULLBIN_ROOT)/$@; \ 382 mv $(WAD_APP)$(WADSUFFIX) $(FULLBIN_ROOT)/$@; \ 383 fi 384else 385 @if [ ! -f $(ROOT)/X86/bin/makeWad.exe ] ; then \ 386 echo "NADK is not installed. Exiting..."; \ 387 else \ 388 echo ""; \ 389 echo ">> $(WAD_APP)$(BINSUFFIX) $(notdir $(CNT_FILES)) --> $@"; \ 390 echo makedol -f $(FULLBIN_ROOT)/$(WAD_APP)$(BINSUFFIX) -d $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX); \ 391 echo makeWad -n $(WAD_APP)$(ASUFFIX) -l $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 392 makedol -f $(FULLBIN_ROOT)/$(WAD_APP)$(BINSUFFIX) -d $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX); \ 393 makeWad -n $(WAD_APP)$(ASUFFIX) -l $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 394 echo mv $(WAD_APP)$(WADSUFFIX) -> $(FULLBIN_ROOT)/$@; \ 395 mv $(WAD_APP)$(WADSUFFIX) $(FULLBIN_ROOT)/$@; \ 396 fi 397endif # NOCOMPRESS 398else 399%$(REGION_SUFFIX)$(WADSUFFIX): $(FULLBIN_ROOT)/%$(BINSUFFIX) $(CNT_FILES) 400ifdef COUNTRY_REGION 401 setcountrycode $(COUNTRY_REGION) 402endif 403ifdef PARENTAL_CONTROL_ID_LIST 404 setnparentalcontrol $(PARENTAL_CONTROL_ID_LIST) 405endif 406ifndef NOCOMPRESS 407 @if [ ! -f $(ROOT)/X86/bin/makeWad.exe ] ; then \ 408 echo "NADK is not installed. Exiting..."; \ 409 else \ 410 echo ""; \ 411 echo ">> $*$(BINSUFFIX) $(notdir $(CNT_FILES)) --> $@"; \ 412 echo makedol -f $(FULLBIN_ROOT)/$*$(BINSUFFIX) -d $(FULLBIN_ROOT)/$*$(DOLSUFFIX); \ 413 makedol -f $(FULLBIN_ROOT)/$*$(BINSUFFIX) -d $(FULLBIN_ROOT)/$*$(DOLSUFFIX); \ 414 echo "ntcompress -lex -A32 -o $(FULLBIN_ROOT)/$*$(DOLSUFFIX)$(LZ77SUFFIX) $(FULLBIN_ROOT)/$*$(DOLSUFFIX)"; \ 415 ntcompress -lex -A32 -o $(FULLBIN_ROOT)/$*$(DOLSUFFIX)$(LZ77SUFFIX) $(FULLBIN_ROOT)/$*$(DOLSUFFIX); \ 416 echo makeWad -n $*$(ASUFFIX) -l $(FULLBIN_ROOT)/$*$(DOLSUFFIX)$(LZ77SUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 417 makeWad -n $*$(ASUFFIX) -l $(FULLBIN_ROOT)/$*$(DOLSUFFIX)$(LZ77SUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 418 echo mv $*$(WADSUFFIX) -> $(FULLBIN_ROOT)/$@; \ 419 mv $*$(WADSUFFIX) $(FULLBIN_ROOT)/$@; \ 420 fi 421else 422 @if [ ! -f $(ROOT)/X86/bin/makeWad.exe ] ; then \ 423 echo "NADK is not installed. Exiting..."; \ 424 else \ 425 echo ""; \ 426 echo ">> $*$(BINSUFFIX) $(notdir $(CNT_FILES)) --> $@"; \ 427 echo makedol -f $(FULLBIN_ROOT)/$*$(BINSUFFIX) -d $(FULLBIN_ROOT)/$*$(DOLSUFFIX); \ 428 echo makeWad -n $*$(ASUFFIX) -l $(FULLBIN_ROOT)/$*$(DOLSUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 429 makedol -f $(FULLBIN_ROOT)/$*$(BINSUFFIX) -d $(FULLBIN_ROOT)/$*$(DOLSUFFIX); \ 430 makeWad -n $*$(ASUFFIX) -l $(FULLBIN_ROOT)/$*$(DOLSUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 431 echo mv $*$(WADSUFFIX) -> $(FULLBIN_ROOT)/$@; \ 432 mv $*$(WADSUFFIX) $(FULLBIN_ROOT)/$@; \ 433 fi 434endif # NOCOMPRESS 435endif # WAD_APP 436endif # NANDAPP 437 438 439ifndef CNT_IDX 440%.arc: 441else 442$(DVD_ROOT)/content%.arc: 443endif 444 @if [ ! -d $(DVD_ROOT)/$(ARC_DIR) ] ; then \ 445 echo ""; \ 446 echo ">>> Creating $(DVD_ROOT)/$(ARC_DIR)" ;\ 447 echo ""; \ 448 $(MKDIRP) $(DVD_ROOT)/$(ARC_DIR) ; \ 449 fi 450 @if [ ! -d $(@D) ] ; then \ 451 echo "$(@D) is not exist!" ; \ 452 else \ 453 echo "------------------------------------------------------------------" ; \ 454 echo "Archiving $(@D)"; \ 455 cd $(@D); \ 456 darch -c * $(@F); \ 457 darch -t $(@F); \ 458 echo "$(DVD_ROOT)/archives/$(@F)"; \ 459 mv $(@F) $(DVD_ROOT)/$(ARC_DIR); \ 460 fi 461 462 463 464 465# Generate .plf (partial link file) 466ifdef EPPC 467$(FULLBIN_ROOT)/%$(PLFSUFFIX): 468 @echo "" 469 @echo ">> $(notdir $+) --> $(subst $(FULLBIN_ROOT)/,,$@)" 470ifdef MAKE_ON_CYGWIN 471ifdef REL_LCF_FILE 472 $(LD) $(shell echo $(filter-out %.lcf,$+) |$(CYGPATH)) $(REL_LDFLAGS) -lcf $(REL_LCF_FILE) -o $(shell echo $@ |$(CYGPATH)) 473else # REL_LCF_FILE 474# obsolete (for compatibility with 4/3/01 SDK) 475ifdef LCF_FILE 476 $(LD) $(shell echo $(filter-out %.lcf,$+) |$(CYGPATH)) $(REL_LDFLAGS) -lcf $(LCF_FILE) -o $(shell echo $@ |$(CYGPATH)) 477else # LCF_FILE 478 $(LD) $(shell echo $(filter-out %.lcf,$+) |$(CYGPATH)) $(REL_LDFLAGS) -o $(shell echo $@ |$(CYGPATH)) 479endif # LCF_FILE 480endif # REL_LCF_FILE 481else # MAKE_ON_CYGWIN 482ifdef REL_LCF_FILE 483 $(LD) $(filter-out %.lcf,$+) $(REL_LDFLAGS) -lcf $(REL_LCF_FILE) -o $@ 484else # REL_LCF_FILE 485# obsolete (for compatibility with 4/3/01 SDK) 486ifdef LCF_FILE 487 $(LD) $(filter-out %.lcf,$+) $(REL_LDFLAGS) -lcf $(LCF_FILE) -o $@ 488else # LCF_FILE 489 $(LD) $(filter-out %.lcf,$+) $(REL_LDFLAGS) -o $@ 490endif # LCF_FILE 491endif # REL_LCF_FILE 492endif # MAKE_ON_CYGWIN 493endif # EPPC 494 495# Generate .preplf (partial link file) 496ifdef EPPC 497$(FULLBIN_ROOT)/%$(PREPLFSUFFIX): 498 @echo "" 499 @echo ">> $(notdir $+) --> $(subst $(FULLBIN_ROOT)/,,$@)" 500ifdef MAKE_ON_CYGWIN 501ifdef PREREL_LCF_FILE 502 $(LD) $(shell echo $(filter-out %.lcf,$+) |$(CYGPATH)) $(PREREL_LDFLAGS) -lcf $(PREREL_LCF_FILE) -o $(shell echo $@ |$(CYGPATH)) 503else # PREREL_LCF_FILE 504 $(LD) $(shell echo $(filter-out %.lcf,$+) |$(CYGPATH)) $(PREREL_LDFLAGS)) -o $(shell echo $@ |$(CYGPATH)) 505endif # PREREL_LCF_FILE 506else # MAKE_ON_CYGWIN 507ifdef PREREL_LCF_FILE 508 $(LD) $(filter-out %.lcf,$+) $(PREREL_LDFLAGS) -lcf $(PREREL_LCF_FILE) -o $@ 509else # PREREL_LCF_FILE 510 $(LD) $(filter-out %.lcf,$+) $(PREREL_LDFLAGS) -o $@ 511endif # PREREL_LCF_FILE 512endif # MAKE_ON_CYGWIN 513endif # EPPC 514 515# Generate .dol 516ifdef EPPC 517$(FULLBIN_ROOT)/%$(DOLSUFFIX): $(FULLBIN_ROOT)/%$(BINSUFFIX) 518 @echo "" 519 @echo ">> $(notdir $+) --> $(subst $(FULLBIN_ROOT)/,,$@)" 520 "$(ROOT)/X86/bin/makedol.exe" -f $< -d $@ 521endif 522 523# GENERIC dependency building 524ifdef X86 525 526$(FULLDEP_ROOT)/%$(DEPSUFFIX): src/%.c 527 @if [ ! -d $(@D) ] ; then \ 528 echo ">>> Creating $(@D)" ; \ 529 $(MKDIRP) $(@D) ; \ 530 fi 531 @if [ ! -d $(MODULE_ROOT)/include ] ; then \ 532 echo ">>> Creating $(MODULE_ROOT)/include" ;\ 533 $(MKDIRP) $(MODULE_ROOT)/include ; \ 534 fi 535 @echo "Refreshing dependency $@" 536 @rm -f $@ 537 @echo -n "$(FULLBINOBJ_ROOT)/$*.o " > $@ 538 @$(CC) $(CCFLAGS) $(INCLUDES) -MM $(MODULE_ROOT)/$< | tr -d '\r' >> $@ 539 540endif 541 542 543 544# GENERIC LIBRARY LINKING 545$(TARGET_LIB): $(LIBOBJECTS) 546 @echo "" 547 @echo ">> New $(notdir $?) --> linking $@" 548ifdef MAKE_ON_CYGWIN 549 $(AR) $(ARFLAGS) $(LIBOBJECTS) -o $(shell echo $(TARGET_LIB) |$(CYGPATH)) 550else # MAKE_ON_CYGWIN 551 $(AR) $(ARFLAGS) $(LIBOBJECTS) -o $(TARGET_LIB) 552endif # MAKE_ON_CYGWIN 553 554############################################################################### 555# 556# Miscellaneous targets - cleaning and setup 557# 558############################################################################### 559 560SETUP_ROOTS = $(BINOBJ_ROOT) $(INSTALL_ROOT) $(BINLIB_ROOT) $(BIN_ROOT) 561 562setup: $(SETUP_ROOTS) 563 564$(INSTALL_ROOT): 565 @echo "Creating $(INSTALL_ROOT)" ; \ 566 rm -rf $(INSTALL_ROOT) ; \ 567 $(MKDIRP) $(BASEINSTALL_ROOT) ; \ 568 $(MKDIRP) $(BASEINSTALL_ROOT)/$(ARCH_TARGET) ; \ 569 $(MKDIRP) $(INSTALL_ROOT)/include ; \ 570 $(MKDIRP) $(INSTALL_ROOT)/lib ; \ 571 $(MKDIRP) $(INSTALL_ROOT)/bin 572 573$(BINOBJ_ROOT): 574 @echo "Creating $(BINOBJ_ROOT)" ; \ 575 $(MKDIRP) $(MODULE_ROOT)/obj ; \ 576 $(MKDIRP) $(MODULE_ROOT)/obj/$(ARCH_TARGET) ; \ 577 $(MKDIRP) $(MODULE_ROOT)/obj/$(ARCH_TARGET)/DEBUG ; \ 578 $(MKDIRP) $(MODULE_ROOT)/obj/$(ARCH_TARGET)/NDEBUG 579 580$(BINLIB_ROOT): 581 @echo "Creating $(BINLIB_ROOT)" ; \ 582 $(MKDIRP) $(MODULE_ROOT)/lib ; \ 583 $(MKDIRP) $(BINLIB_ROOT) 584 585$(BIN_ROOT): 586 @echo "Creating $(BIN_ROOT)" ; \ 587 $(MKDIRP) $(MODULE_ROOT)/bin ; \ 588 $(MKDIRP) $(BIN_ROOT) 589 590build: setup $(NANDAPP_TARGET) 591# ifdef MULTIPROCESSOR 592# @$(MAKE) -j X86=$(X86) PLATFORM=$(PLATFORM) INCLUDEDEPS=TRUE dobuild 593# else 594 @$(MAKE) X86=$(X86) PLATFORM=$(PLATFORM) INCLUDEDEPS=TRUE dobuild 595#endif 596 597dobuild: $(OBJECTS) $(TARGET_LIB) $(TARGET_BINS) $(TARGET_DOLS) $(TARGET_WADS) $(TARGET_PLFS) $(TARGET_PREPLFS) 598 599cleandep: 600 rm -rf depend/$(ARCH_TARGET)/DEBUG/* 601 rm -rf depend/$(ARCH_TARGET)/NDEBUG/* 602 603cleantilde: 604 rm -f $(addprefix src/, $(ALLCSRCS:.c=.c~)) 605 rm -f $(addprefix src/, $(ALLCSRCS:.c=.BAK)) 606 rm -f *~ *.BAK 607 rm -f include/*~ include/*.BAK 608 609clobberdemoinstall: 610ifdef DEMO 611ifdef MODULENAME 612 rm -rf $(INSTALL_ROOT)/bin/demos/$(MODULENAME)/* 613endif 614endif 615 616clobbertest: 617ifdef TEST 618ifdef MODULENAME 619 rm -rf $(INSTALL_ROOT)/bin/tests/$(MODULENAME)/* 620endif 621endif 622 623clobberlib: 624 rm -rf $(BINLIB_ROOT)/* 625ifdef LIBNAME 626 rm -f $(INSTALL_ROOT)/lib/$(LIBNAME)$(LIBSUFFIX) 627endif 628 629cleanidb: 630ifdef MAC 631# rm -f $(BIN_ROOT)/*.idb 632endif 633 634cleandis: 635 rm -f src/*.c.s 636 637cleanobj: 638 rm -rf obj/$(ARCH_TARGET)/DEBUG/* 639 rm -rf obj/$(ARCH_TARGET)/NDEBUG/* 640 641clobberbin: 642 rm -rf $(BIN_ROOT)/* 643 rm -f *.MAP 644 645cleanuser: 646ifdef CLEANFILES 647 rm -rf $(CLEANFILES) 648endif 649 650clean: cleanobj cleandep cleantilde cleanidb cleandis cleanuser 651 652clobber: clean clobberbin clobberlib clobberdemoinstall clobbertest 653 654superclobber: clobber 655 rm -rf bin 656 rm -rf obj 657 rm -rf lib 658 rm -rf depend 659 660############################################################################### 661# 662# Module installation - copy binaries and libraries to appropriate locations 663# All libraries are installed. 664# Only demo binaries are installed. 665# 666############################################################################### 667 668install: build 669ifndef SNSYS 670 @echo -n "$(MODULE_ROOT) - "; 671 @if [ `ls lib/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \ 672 echo -n "No libs to export..." ; \ 673 else \ 674 echo -n "Exporting libs..." ; \ 675 if [ ! -d $(INSTALL_ROOT)/lib ] ; then \ 676 echo -n "Creating $(INSTALL_ROOT)/lib..." ; \ 677 $(MKDIRP) $(INSTALL_ROOT)/lib ; \ 678 fi ; \ 679 cp -uR lib/$(ARCH_TARGET)/* $(INSTALL_ROOT)/lib ; \ 680 chmod +w $(INSTALL_ROOT)/lib/* ; \ 681 fi 682ifdef DEMO 683 @if [ `ls bin/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \ 684 echo -n "No binaries to export..." ; \ 685 else \ 686 echo -n "Exporting binaries..." ; \ 687 if [ ! -d $(INSTALL_ROOT)/bin/demos/$(MODULENAME) ] ; then \ 688 echo -n "Creating $(INSTALL_ROOT)/bin/demos/$(MODULENAME)..." ; \ 689 $(MKDIRP) $(INSTALL_ROOT)/bin/demos ; \ 690 $(MKDIRP) $(INSTALL_ROOT)/bin/demos/$(MODULENAME) ; \ 691 fi ; \ 692 cp -uR bin/$(ARCH_TARGET)/* $(INSTALL_ROOT)/bin/demos/$(MODULENAME)/ ; \ 693 chmod +w $(INSTALL_ROOT)/bin/demos/$(MODULENAME)/* ; \ 694 fi 695endif 696ifdef TEST 697 @if [ `ls bin/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \ 698 echo -n "No binaries to export..." ; \ 699 else \ 700 echo -n "Exporting binaries..." ; \ 701 if [ ! -d $(INSTALL_ROOT)/bin/tests/$(MODULENAME) ] ; then \ 702 echo -n "Creating $(INSTALL_ROOT)/bin/tests/$(MODULENAME)..." ; \ 703 $(MKDIRP) $(INSTALL_ROOT)/bin/tests ; \ 704 $(MKDIRP) $(INSTALL_ROOT)/bin/tests/$(MODULENAME) ; \ 705 fi ; \ 706 cp -uR bin/$(ARCH_TARGET)/* $(INSTALL_ROOT)/bin/tests/$(MODULENAME)/ ; \ 707 chmod +w $(INSTALL_ROOT)/bin/tests/$(MODULENAME)/* ; \ 708 fi 709endif 710ifdef APPLOADER 711 @if [ `ls bin/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \ 712 echo -n "No binaries to export..." ; \ 713 else \ 714 echo -n "Exporting apploader binaries..." ; \ 715 if [ ! -d $(INSTALL_ROOT)/boot ] ; then \ 716 echo -n "Creating $(INSTALL_ROOT)/boot..." ; \ 717 $(MKDIRP) $(INSTALL_ROOT)/boot ; \ 718 fi ; \ 719 cp -u bin/$(ARCH_TARGET)/apploader$(IMGSUFFIX) $(INSTALL_ROOT)/boot/ ; \ 720 chmod +w $(INSTALL_ROOT)/boot/* ; \ 721 fi 722endif 723ifdef TOOL 724 @if [ `ls bin/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \ 725 echo -n "No binaries to export..." ; \ 726 else \ 727 echo -n "Exporting makedol binaries..." ; \ 728 if [ ! -d $(INSTALL_ROOT)/bin ] ; then \ 729 echo -n "Creating $(INSTALL_ROOT)/bin..." ; \ 730 $(MKDIRP) $(INSTALL_ROOT)/bin ; \ 731 fi ; \ 732 cp -uR bin/$(ARCH_TARGET)/* $(INSTALL_ROOT)/bin/ ; \ 733 chmod +w $(INSTALL_ROOT)/bin/* ; \ 734 fi 735endif 736 @echo "" 737endif # SNSYS 738 739############################################################################### 740# 741# Module autotest - convert binaries to dol/wad and copy to dvdroot 742# 743############################################################################### 744 745ifdef EPPC 746 747AUTOTEST_DVDROOT_MODULE = $(AUTOTEST_DVDROOT_TESTS)/$(MODULENAME) 748AUTOTEST_MODULE_TESTDOLS = $(addprefix $(AUTOTEST_DVDROOT_MODULE)/,$(addsuffix $(DOLSUFFIX), $(BINNAMES_AUTOTEST))) 749AUTOTEST_MODULE_TESTWADS = $(addprefix $(AUTOTEST_DVDROOT_MODULE)/,$(addsuffix $(REGION_SUFFIX)$(WADSUFFIX), $(WADNAMES_AUTOTEST))) 750 751$(FULLBIN_ROOT)/%$(REGION_SUFFIX)$(WADSUFFIX): $(FULLBIN_ROOT)/%$(NANDAPPSUFFIX)$(BINSUFFIX) 752 @$(MAKE) $*$(NANDAPPSUFFIX)$(REGION_SUFFIX)$(WADSUFFIX) NANDAPP=TRUE WAD_OPTION=$(WAD_OPTION_$*) 753 rm -rf $(FULLBIN_ROOT)/$*$(NANDAPPSUFFIX)$(REGION_SUFFIX)$(DOLSUFFIX) $(FULLBIN_ROOT)/$*$(NANDAPPSUFFIX)$(REGION_SUFFIX)$(DOLSUFFIX)$(LZ77SUFFIX) 754 mv $(FULLBIN_ROOT)/$*$(NANDAPPSUFFIX)$(REGION_SUFFIX)$(WADSUFFIX) $@ 755 756.PHONY: autotest_setdvdroot autotest_targets_dvdroot autotest_targets autotest autotest_runone autotest_manual autotest_clean 757 758$(AUTOTEST_DVDROOT_MODULE) $(AUTOTEST_DVDROOT_IMPORT) $(AUTOTEST_DVDROOT_DATA_ARC): 759 @ if [ ! -d $@ ] ; then \ 760 echo ">>> Creating $@" ; \ 761 $(MKDIRP) $@ ; \ 762 fi 763 764$(AUTOTEST_DVDROOT_MODULE)/%$(DOLSUFFIX): $(FULLBIN_ROOT)/%$(DOLSUFFIX) $(AUTOTEST_DVDROOT_MODULE) 765 @ cp -upv $< $@ 766 767$(AUTOTEST_DVDROOT_MODULE)/%$(REGION_SUFFIX)$(WADSUFFIX): $(FULLBIN_ROOT)/%$(REGION_SUFFIX)$(WADSUFFIX) $(AUTOTEST_DVDROOT_MODULE) 768 @ cp -upv $< $@ 769 770ifdef AUTOTEST_DATATITLE_GAMECODE 771CCFLAGS += -DAUTOTEST_DATATITLE_GAMECODE=\"$(AUTOTEST_DATATITLE_GAMECODE)\" 772 773$(AUTOTEST_DVDROOT_IMPORT)/$(AUTOTEST_DATATITLE_GAMECODE).wad: $(AUTOTEST_DVDROOT_IMPORT) $(AUTOTEST_DVDROOT_DATA_ARC) 774 @ if [ -d $(AUTOTEST_DVDROOT_DATA)/$(AUTOTEST_DATATITLE_GAMECODE)/content1 ] ; then \ 775 echo ">>> Packaging files into datatitle" ; \ 776 echo " $(notdir $(AUTOTEST_DVDROOT_DATA))/$(AUTOTEST_DATATITLE_GAMECODE)/content1/* -> $(notdir $(AUTOTEST_DVDROOT_IMPORT))/$(AUTOTEST_DATATITLE_GAMECODE).wad" ; \ 777 cd $(AUTOTEST_DVDROOT_DATA)/$(AUTOTEST_DATATITLE_GAMECODE)/content1; \ 778 darchD -c * $(AUTOTEST_DVDROOT_DATA_ARC)/$(AUTOTEST_DATATITLE_GAMECODE).arc; \ 779 darchD -tv $(AUTOTEST_DVDROOT_DATA_ARC)/$(AUTOTEST_DATATITLE_GAMECODE).arc; \ 780 cd $(AUTOTEST_DVDROOT_DATA_ARC); \ 781 makeWad -f -n $(AUTOTEST_DATATITLE_GAMECODE) -l $(AUTOTEST_DVDROOT_DATA_ARC)/$(AUTOTEST_DATATITLE_GAMECODE).arc -gc $(AUTOTEST_DATATITLE_GAMECODE) -E 0x00000000 -e 0xffffffff; \ 782 mv $(AUTOTEST_DATATITLE_GAMECODE).wad $(AUTOTEST_DVDROOT_IMPORT); \ 783 fi 784 785autotest: $(AUTOTEST_DVDROOT_IMPORT)/$(AUTOTEST_DATATITLE_GAMECODE).wad 786endif 787 788autotest_setdvdroot: 789 @echo "" 790 @setndenv DvdRoot "$(AUTOTEST_DVDROOT)" 791 @ if [ ! -f $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).elf ] || [ ! -f $(AUTOTEST_DVDROOT)/autotest.dol ] ; then \ 792 echo ">>> Building autotest module" ; \ 793 $(MAKE) -C $(AUTOTEST_MAKEPATH) NDEBUG=TRUE; \ 794 fi 795 796autotest_targets_dvdroot: $(AUTOTEST_MODULE_TESTDOLS) $(AUTOTEST_MODULE_TESTWADS) 797 798# This must be 2 separate make commands below. This is so this target works after fresh checkout/superclobber 799autotest_targets: 800 @$(MAKE) build 801 @$(MAKE) autotest_targets_dvdroot 802 @ if [ -e "autotest_config.txt" ] ; then \ 803 cp autotest_config.txt $(AUTOTEST_DVDROOT_MODULE)/autotest_config.txt; \ 804 else \ 805 echo no $(AUTOTEST_DVDROOT_MODULE)/autotest_config.txt; \ 806 fi; \ 807 808# uterm timeout set non-zero so that it can be auto-terminated by EOF "\004" in serial output 809# autotest_stub -> autotest.dol -> test1.dol -> autotest.dol -> test2.dol -> ... 810autotest: autotest_targets autotest_setdvdroot 811 ndrun $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).elf -a -runmodule $(MODULENAME) $(ARGS) 812 @ echo "Opening serial port..."; \ 813 AUTOTEST_LOG=autotest_`date +%y%m%d%H%M`.txt; \ 814 if [ "$(TIMEOUT)" != "" ] ; then \ 815 uterm "" $$AUTOTEST_LOG "" "" $(TIMEOUT); \ 816 else \ 817 uterm "" $$AUTOTEST_LOG "" "" 900; \ 818 fi; \ 819 if [ $$? -ne 0 ] ; then \ 820 ndstop; \ 821 echo error; \ 822 else \ 823 echo ok; \ 824 fi; \ 825 grep -i 'AutoTest: ' $$AUTOTEST_LOG; \ 826 grep -i 'Failed' $$AUTOTEST_LOG; \ 827 echo "Log: $$AUTOTEST_LOG" 828 829autotest_runone: $(addprefix $(AUTOTEST_DVDROOT_MODULE)/, $(TESTDOL)) autotest_setdvdroot 830 ndrun $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).elf -a -runone $(TESTDOL) $(ARGS) 831 @ echo "Opening serial port..."; \ 832 AUTOTEST_LOG=autotest_`date +%y%m%d%H%M`.txt; \ 833 if [ "$(TIMEOUT)" != "" ] ; then \ 834 uterm "" $$AUTOTEST_LOG "" "" $(TIMEOUT); \ 835 else \ 836 uterm "" $$AUTOTEST_LOG "" "" 900; \ 837 fi; \ 838 if [ $$? -ne 0 ] ; then \ 839 ndstop; \ 840 echo error; \ 841 else \ 842 echo ok; \ 843 fi; \ 844 grep -i 'AutoTest: ' $$AUTOTEST_LOG; \ 845 grep -i 'Failed' $$AUTOTEST_LOG; \ 846 echo "Log: $$AUTOTEST_LOG" 847 848autotest_manual: autotest_setdvdroot 849 @ if [ "$(ARGS)" != "" ] ; then \ 850 ndrun $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).elf -a $(ARGS); \ 851 else \ 852 ndrun $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).elf -a -manual; \ 853 fi 854 855autotest_clean: 856 rm -rf $(AUTOTEST_DVDROOT_TESTS) 857 rm -rf $(AUTOTEST_DVDROOT_IMPORT) 858 859endif # EPPC 860 861# Generate dependency files 862ifdef INCLUDEDEPS 863ifneq (,$(firstword $(ALLASMSRCS))) 864-include $(addprefix $(FULLDEP_ROOT)/, $(ALLASMSRCS:.s=$(DEPSUFFIX))) 865endif 866ifneq (,$(firstword $(ALLCSRCS))) 867-include $(addprefix $(FULLDEP_ROOT)/, $(ALLCSRCS:.c=$(DEPSUFFIX))) 868endif 869ifneq (,$(firstword $(ALLCPPSRCS))) 870-include $(addprefix $(FULLDEP_ROOT)/, $(ALLCPPSRCS:.cpp=$(DEPSUFFIX))) 871endif 872endif