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) $(PREFIX_FILE) $(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 273# Generate .wad (for NAND application) 274ifdef CNT_IDX 275DVD_ROOT = $(shell cygpath -m $(word 2, $(shell getndenv))) 276ARC_DIR = archives 277CONTENT_INDEX = $(subst $(comma),$(space),$(CNT_IDX)) 278CNT_FILES = $(foreach val,$(CONTENT_INDEX),$(DVD_ROOT)/content$(val)/content$(val).arc) 279WAD_CNT = $(subst $(space),$(comma), \ 280 $(foreach val,$(CONTENT_INDEX),$(DVD_ROOT)/$(ARC_DIR)/content$(val).arc)) 281endif # CNT_IDX 282ifdef CNT_ARG 283CNT_FILES += $(subst $(comma),$(space),$(CNT_ARG)) 284WAD_CNT := $(WAD_CNT)$(comma)$(CNT_ARG) 285endif # CNT_ARG 286 287ifdef NANDAPP 288ifndef NOEXPORT 289NANDAPP_TARGET = $(foreach val, $(BINNAMES), $(val)$(REGION_SUFFIX)$(WADSUFFIX)) 290endif 291endif #NANDAPP 292 293ifdef NANDAPP 294ifdef WAD_APP 295%$(REGION_SUFFIX)$(WADSUFFIX): $(FULLBIN_ROOT)/$(WAD_APP)$(BINSUFFIX) $(CNT_FILES) 296ifdef COUNTRY_REGION 297 setncountrycode $(COUNTRY_REGION) 298endif 299ifdef PARENTAL_CONTROL_ID_LIST 300 setnparentalcontrol $(PARENTAL_CONTROL_ID_LIST) 301endif 302ifndef NOCOMPRESS 303 @if [ ! -f $(ROOT)/X86/bin/makeWad.exe ] ; then \ 304 echo "NADK is not installed. Exiting..."; \ 305 else \ 306 echo ""; \ 307 echo ">> $(WAD_APP)$(BINSUFFIX) $(notdir $(CNT_FILES)) --> $@"; \ 308 echo makedol -f $(FULLBIN_ROOT)/$(WAD_APP)$(BINSUFFIX) -d $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX); \ 309 makedol -f $(FULLBIN_ROOT)/$(WAD_APP)$(BINSUFFIX) -d $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX); \ 310 echo "ntcompress -lex -A32 -o $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)$(LZ77SUFFIX) $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)"; \ 311 ntcompress -lex -A32 -o $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)$(LZ77SUFFIX) $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX); \ 312 echo makeWad -n $(WAD_APP)$(ASUFFIX) -l $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)$(LZ77SUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 313 makeWad -n $(WAD_APP)$(ASUFFIX) -l $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)$(LZ77SUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 314 echo mv $(WAD_APP)$(WADSUFFIX) -> $(FULLBIN_ROOT)/$@; \ 315 mv $(WAD_APP)$(WADSUFFIX) $(FULLBIN_ROOT)/$@; \ 316 fi 317else 318 @if [ ! -f $(ROOT)/X86/bin/makeWad.exe ] ; then \ 319 echo "NADK is not installed. Exiting..."; \ 320 else \ 321 echo ""; \ 322 echo ">> $(WAD_APP)$(BINSUFFIX) $(notdir $(CNT_FILES)) --> $@"; \ 323 echo makedol -f $(FULLBIN_ROOT)/$(WAD_APP)$(BINSUFFIX) -d $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX); \ 324 echo makeWad -n $(WAD_APP)$(ASUFFIX) -l $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 325 makedol -f $(FULLBIN_ROOT)/$(WAD_APP)$(BINSUFFIX) -d $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX); \ 326 makeWad -n $(WAD_APP)$(ASUFFIX) -l $(FULLBIN_ROOT)/$(WAD_APP)$(DOLSUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 327 echo mv $(WAD_APP)$(WADSUFFIX) -> $(FULLBIN_ROOT)/$@; \ 328 mv $(WAD_APP)$(WADSUFFIX) $(FULLBIN_ROOT)/$@; \ 329 fi 330endif # NOCOMPRESS 331else 332%$(REGION_SUFFIX)$(WADSUFFIX): $(FULLBIN_ROOT)/%$(BINSUFFIX) $(CNT_FILES) 333ifdef COUNTRY_REGION 334 setncountrycode $(COUNTRY_REGION) 335endif 336ifdef PARENTAL_CONTROL_ID_LIST 337 setnparentalcontrol $(PARENTAL_CONTROL_ID_LIST) 338endif 339ifndef NOCOMPRESS 340 @if [ ! -f $(ROOT)/X86/bin/makeWad.exe ] ; then \ 341 echo "NADK is not installed. Exiting..."; \ 342 else \ 343 echo ""; \ 344 echo ">> $*$(BINSUFFIX) $(notdir $(CNT_FILES)) --> $@"; \ 345 echo makedol -f $(FULLBIN_ROOT)/$*$(BINSUFFIX) -d $(FULLBIN_ROOT)/$*$(DOLSUFFIX); \ 346 makedol -f $(FULLBIN_ROOT)/$*$(BINSUFFIX) -d $(FULLBIN_ROOT)/$*$(DOLSUFFIX); \ 347 echo "ntcompress -lex -A32 -o $(FULLBIN_ROOT)/$*$(DOLSUFFIX)$(LZ77SUFFIX) $(FULLBIN_ROOT)/$*$(DOLSUFFIX)"; \ 348 ntcompress -lex -A32 -o $(FULLBIN_ROOT)/$*$(DOLSUFFIX)$(LZ77SUFFIX) $(FULLBIN_ROOT)/$*$(DOLSUFFIX); \ 349 echo makeWad -n $*$(ASUFFIX) -l $(FULLBIN_ROOT)/$*$(DOLSUFFIX)$(LZ77SUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 350 makeWad -n $*$(ASUFFIX) -l $(FULLBIN_ROOT)/$*$(DOLSUFFIX)$(LZ77SUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 351 echo mv $*$(WADSUFFIX) -> $(FULLBIN_ROOT)/$@; \ 352 mv $*$(WADSUFFIX) $(FULLBIN_ROOT)/$@; \ 353 fi 354else 355 @if [ ! -f $(ROOT)/X86/bin/makeWad.exe ] ; then \ 356 echo "NADK is not installed. Exiting..."; \ 357 else \ 358 echo ""; \ 359 echo ">> $*$(BINSUFFIX) $(notdir $(CNT_FILES)) --> $@"; \ 360 echo makedol -f $(FULLBIN_ROOT)/$*$(BINSUFFIX) -d $(FULLBIN_ROOT)/$*$(DOLSUFFIX); \ 361 echo makeWad -n $*$(ASUFFIX) -l $(FULLBIN_ROOT)/$*$(DOLSUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 362 makedol -f $(FULLBIN_ROOT)/$*$(BINSUFFIX) -d $(FULLBIN_ROOT)/$*$(DOLSUFFIX); \ 363 makeWad -n $*$(ASUFFIX) -l $(FULLBIN_ROOT)/$*$(DOLSUFFIX)$(WAD_CNT) $(WAD_OPTION); \ 364 echo mv $*$(WADSUFFIX) -> $(FULLBIN_ROOT)/$@; \ 365 mv $*$(WADSUFFIX) $(FULLBIN_ROOT)/$@; \ 366 fi 367endif # NOCOMPRESS 368endif # WAD_APP 369endif # NANDAPP 370 371 372ifndef CNT_IDX 373%.arc: 374else 375$(DVD_ROOT)/content%.arc: 376endif 377 @if [ ! -d $(DVD_ROOT)/$(ARC_DIR) ] ; then \ 378 echo ""; \ 379 echo ">>> Creating $(DVD_ROOT)/$(ARC_DIR)" ;\ 380 echo ""; \ 381 $(MKDIRP) $(DVD_ROOT)/$(ARC_DIR) ; \ 382 fi 383 @if [ ! -d $(@D) ] ; then \ 384 echo "$(@D) is not exist!" ; \ 385 else \ 386 echo "------------------------------------------------------------------" ; \ 387 echo "Archiving $(@D)"; \ 388 cd $(@D); \ 389 darchD -c * $(@F); \ 390 darchD -t $(@F); \ 391 echo "$(DVD_ROOT)/archives/$(@F)"; \ 392 mv $(@F) $(DVD_ROOT)/$(ARC_DIR); \ 393 fi 394 395 396 397 398# Generate .plf (partial link file) 399ifdef EPPC 400$(FULLBIN_ROOT)/%$(PLFSUFFIX): 401 @echo "" 402 @echo ">> $(notdir $+) --> $(subst $(FULLBIN_ROOT)/,,$@)" 403ifdef SNSYS 404# $(LD) $+ -Wl,-r -o $@ 405else # SNSYS 406ifdef REL_LCF_FILE 407 $(LD) $(filter-out %.lcf,$+) $(REL_LDFLAGS) -lcf $(REL_LCF_FILE) -o $@ 408else # REL_LCF_FILE 409# obsolete (for compatibility with 4/3/01 SDK) 410ifdef LCF_FILE 411 $(LD) $(filter-out %.lcf,$+) $(REL_LDFLAGS) -lcf $(LCF_FILE) -o $@ 412else # LCF_FILE 413 $(LD) $(filter-out %.lcf,$+) $(REL_LDFLAGS) -o $@ 414endif # LCF_FILE 415endif # REL_LCF_FILE 416endif # SNSYS 417endif # EPPC 418 419# Generate .preplf (partial link file) 420ifdef EPPC 421$(FULLBIN_ROOT)/%$(PREPLFSUFFIX): 422 @echo "" 423 @echo ">> $(notdir $+) --> $(subst $(FULLBIN_ROOT)/,,$@)" 424ifdef SNSYS 425# $(LD) $+ -Wl,-r -o $@ 426else # SNSYS 427ifdef PREREL_LCF_FILE 428 $(LD) $(filter-out %.lcf,$+) $(PREREL_LDFLAGS) -lcf $(PREREL_LCF_FILE) -o $@ 429else # PREREL_LCF_FILE 430 $(LD) $(filter-out %.lcf,$+) $(PREREL_LDFLAGS) -o $@ 431endif # PREREL_LCF_FILE 432endif # SNSYS 433endif # EPPC 434 435# Generate .dol 436ifdef EPPC 437$(FULLBIN_ROOT)/%$(DOLSUFFIX): $(FULLBIN_ROOT)/%$(BINSUFFIX) 438 @echo "" 439 @echo ">> $(notdir $+) --> $(subst $(FULLBIN_ROOT)/,,$@)" 440 "$(ROOT)/X86/bin/makedolD.exe" -f $< -d $@ 441endif 442 443# GENERIC dependency building 444ifdef X86 445 446$(FULLDEP_ROOT)/%$(DEPSUFFIX): src/%.c 447 @if [ ! -d $(@D) ] ; then \ 448 echo ">>> Creating $(@D)" ; \ 449 $(MKDIRP) $(@D) ; \ 450 fi 451 @if [ ! -d $(MODULE_ROOT)/include ] ; then \ 452 echo ">>> Creating $(MODULE_ROOT)/include" ;\ 453 $(MKDIRP) $(MODULE_ROOT)/include ; \ 454 fi 455 @echo "Refreshing dependency $@" 456 @rm -f $@ 457 @echo -n "$(FULLBINOBJ_ROOT)/$*.o " > $@ 458 @$(CC) $(CCFLAGS) $(INCLUDES) -MM $(MODULE_ROOT)/$< | tr -d '\r' >> $@ 459 460endif 461 462 463 464# GENERIC LIBRARY LINKING 465$(TARGET_LIB): $(LIBOBJECTS) 466 @echo "" 467 @echo ">> New $(notdir $?) --> linking $@" 468ifdef SNSYS 469# $(AR) $(ARFLAGS) $(TARGET_LIB) $(LIBOBJECTS) 470else # SNSYS 471 $(AR) $(ARFLAGS) $(LIBOBJECTS) -o $(TARGET_LIB) 472endif # SNSYS 473 474############################################################################### 475# 476# Miscellaneous targets - cleaning and setup 477# 478############################################################################### 479 480SETUP_ROOTS = $(BINOBJ_ROOT) $(INSTALL_ROOT) $(BINLIB_ROOT) $(BIN_ROOT) 481 482setup: $(SETUP_ROOTS) 483 484$(INSTALL_ROOT): 485 @echo "Creating $(INSTALL_ROOT)" ; \ 486 rm -rf $(INSTALL_ROOT) ; \ 487 $(MKDIRP) $(BASEINSTALL_ROOT) ; \ 488 $(MKDIRP) $(BASEINSTALL_ROOT)/$(ARCH_TARGET) ; \ 489 $(MKDIRP) $(INSTALL_ROOT)/include ; \ 490 $(MKDIRP) $(INSTALL_ROOT)/lib ; \ 491 $(MKDIRP) $(INSTALL_ROOT)/bin 492 493$(BINOBJ_ROOT): 494 @echo "Creating $(BINOBJ_ROOT)" ; \ 495 $(MKDIRP) $(MODULE_ROOT)/obj ; \ 496 $(MKDIRP) $(MODULE_ROOT)/obj/$(ARCH_TARGET) ; \ 497 $(MKDIRP) $(MODULE_ROOT)/obj/$(ARCH_TARGET)/DEBUG ; \ 498 $(MKDIRP) $(MODULE_ROOT)/obj/$(ARCH_TARGET)/NDEBUG 499 500$(BINLIB_ROOT): 501 @echo "Creating $(BINLIB_ROOT)" ; \ 502 $(MKDIRP) $(MODULE_ROOT)/lib ; \ 503 $(MKDIRP) $(BINLIB_ROOT) 504 505$(BIN_ROOT): 506 @echo "Creating $(BIN_ROOT)" ; \ 507 $(MKDIRP) $(MODULE_ROOT)/bin ; \ 508 $(MKDIRP) $(BIN_ROOT) 509 510build: setup $(NANDAPP_TARGET) 511 512ifdef MULTIPROCESSOR 513 @$(MAKE) -j X86=$(X86) PLATFORM=$(PLATFORM) INCLUDEDEPS=TRUE dobuild 514else 515 @$(MAKE) X86=$(X86) PLATFORM=$(PLATFORM) INCLUDEDEPS=TRUE dobuild 516endif 517 518dobuild: $(OBJECTS) $(TARGET_LIB) $(TARGET_BINS) $(TARGET_DOLS) $(TARGET_PLFS) $(TARGET_PREPLFS) 519 520cleandep: 521 rm -rf depend/$(ARCH_TARGET)/DEBUG/* 522 rm -rf depend/$(ARCH_TARGET)/NDEBUG/* 523 524cleantilde: 525 rm -f $(addprefix src/, $(ALLCSRCS:.c=.c~)) 526 rm -f $(addprefix src/, $(ALLCSRCS:.c=.BAK)) 527 rm -f *~ *.BAK 528 rm -f include/*~ include/*.BAK 529 530clobberdemoinstall: 531ifdef DEMO 532ifdef MODULENAME 533 rm -rf $(INSTALL_ROOT)/bin/demos/$(MODULENAME)/* 534endif 535endif 536 537clobbertest: 538ifdef TEST 539ifdef MODULENAME 540 rm -rf $(INSTALL_ROOT)/bin/tests/$(MODULENAME)/* 541endif 542endif 543 544clobberlib: 545 rm -rf $(BINLIB_ROOT)/* 546ifdef LIBNAME 547 rm -f $(INSTALL_ROOT)/lib/$(LIBNAME)$(LIBSUFFIX) 548endif 549 550cleanidb: 551ifdef MAC 552# rm -f $(BIN_ROOT)/*.idb 553endif 554 555cleandis: 556 rm -f src/*.c.s 557 558cleanobj: 559 rm -rf obj/$(ARCH_TARGET)/DEBUG/* 560 rm -rf obj/$(ARCH_TARGET)/NDEBUG/* 561 562clobberbin: 563 rm -rf $(BIN_ROOT)/* 564 rm -f *.MAP 565 566cleanuser: 567ifdef CLEANFILES 568 rm -rf $(CLEANFILES) 569endif 570 571clean: cleanobj cleandep cleantilde cleanidb cleandis cleanuser 572 573clobber: clean clobberbin clobberlib clobberdemoinstall clobbertest 574 575superclobber: clobber 576 rm -rf bin 577 rm -rf obj 578 rm -rf lib 579 rm -rf depend 580 581############################################################################### 582# 583# Module installation - copy binaries and libraries to appropriate locations 584# All libraries are installed. 585# Only demo binaries are installed. 586# 587############################################################################### 588 589install: build 590ifndef SNSYS 591 @echo -n "$(MODULE_ROOT) - "; 592 @if [ `ls lib/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \ 593 echo -n "No libs to export..." ; \ 594 else \ 595 echo -n "Exporting libs..." ; \ 596 if [ ! -d $(INSTALL_ROOT)/lib ] ; then \ 597 echo -n "Creating $(INSTALL_ROOT)/lib..." ; \ 598 $(MKDIRP) $(INSTALL_ROOT)/lib ; \ 599 fi ; \ 600 cp -uR lib/$(ARCH_TARGET)/* $(INSTALL_ROOT)/lib ; \ 601 chmod +w $(INSTALL_ROOT)/lib/* ; \ 602 fi 603ifdef DEMO 604 @if [ `ls bin/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \ 605 echo -n "No binaries to export..." ; \ 606 else \ 607 echo -n "Exporting binaries..." ; \ 608 if [ ! -d $(INSTALL_ROOT)/bin/demos/$(MODULENAME) ] ; then \ 609 echo -n "Creating $(INSTALL_ROOT)/bin/demos/$(MODULENAME)..." ; \ 610 $(MKDIRP) $(INSTALL_ROOT)/bin/demos ; \ 611 $(MKDIRP) $(INSTALL_ROOT)/bin/demos/$(MODULENAME) ; \ 612 fi ; \ 613 cp -uR bin/$(ARCH_TARGET)/* $(INSTALL_ROOT)/bin/demos/$(MODULENAME)/ ; \ 614 chmod +w $(INSTALL_ROOT)/bin/demos/$(MODULENAME)/* ; \ 615 fi 616endif 617ifdef TEST 618 @if [ `ls bin/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \ 619 echo -n "No binaries to export..." ; \ 620 else \ 621 echo -n "Exporting binaries..." ; \ 622 if [ ! -d $(INSTALL_ROOT)/bin/tests/$(MODULENAME) ] ; then \ 623 echo -n "Creating $(INSTALL_ROOT)/bin/tests/$(MODULENAME)..." ; \ 624 $(MKDIRP) $(INSTALL_ROOT)/bin/tests ; \ 625 $(MKDIRP) $(INSTALL_ROOT)/bin/tests/$(MODULENAME) ; \ 626 fi ; \ 627 cp -uR bin/$(ARCH_TARGET)/* $(INSTALL_ROOT)/bin/tests/$(MODULENAME)/ ; \ 628 chmod +w $(INSTALL_ROOT)/bin/tests/$(MODULENAME)/* ; \ 629 fi 630endif 631ifdef APPLOADER 632 @if [ `ls bin/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \ 633 echo -n "No binaries to export..." ; \ 634 else \ 635 echo -n "Exporting apploader binaries..." ; \ 636 if [ ! -d $(INSTALL_ROOT)/boot ] ; then \ 637 echo -n "Creating $(INSTALL_ROOT)/boot..." ; \ 638 $(MKDIRP) $(INSTALL_ROOT)/boot ; \ 639 fi ; \ 640 cp -u bin/$(ARCH_TARGET)/apploader$(IMGSUFFIX) $(INSTALL_ROOT)/boot/ ; \ 641 chmod +w $(INSTALL_ROOT)/boot/* ; \ 642 fi 643endif 644ifdef TOOL 645 @if [ `ls bin/$(ARCH_TARGET) 2> /dev/null | wc -l` = "0" ] ; then \ 646 echo -n "No binaries to export..." ; \ 647 else \ 648 echo -n "Exporting makedol binaries..." ; \ 649 if [ ! -d $(INSTALL_ROOT)/bin ] ; then \ 650 echo -n "Creating $(INSTALL_ROOT)/bin..." ; \ 651 $(MKDIRP) $(INSTALL_ROOT)/bin ; \ 652 fi ; \ 653 cp -uR bin/$(ARCH_TARGET)/* $(INSTALL_ROOT)/bin/ ; \ 654 chmod +w $(INSTALL_ROOT)/bin/* ; \ 655 fi 656endif 657 @echo "" 658endif # SNSYS 659 660# Generate dependency files 661ifdef INCLUDEDEPS 662ifneq (,$(firstword $(ALLASMSRCS))) 663-include $(addprefix $(FULLDEP_ROOT)/, $(ALLASMSRCS:.s=$(DEPSUFFIX))) 664endif 665ifneq (,$(firstword $(ALLCSRCS))) 666-include $(addprefix $(FULLDEP_ROOT)/, $(ALLCSRCS:.c=$(DEPSUFFIX))) 667endif 668ifneq (,$(firstword $(ALLCPPSRCS))) 669-include $(addprefix $(FULLDEP_ROOT)/, $(ALLCPPSRCS:.cpp=$(DEPSUFFIX))) 670endif 671endif 672 673