1############################################################################### 2# Top level makefile for build system 3# 4# Copyright 2006 Nintendo. All rights reserved. 5# 6# These coded instructions, statements, and computer programs contain 7# proprietary information of Nintendo of America Inc. and/or Nintendo 8# Company Ltd., and are protected by Federal copyright law. They may 9# not be disclosed to third parties or copied or duplicated in any form, 10# in whole or in part, without the prior written consent of Nintendo. 11############################################################################### 12 13# Valid targets 14# "make" by itself builds and installs everything listed in LIBS, DEMOS and 15# TESTS. Default target is HW1 DEBUG 16# "make clean" cleans everything listed in LIBS, DEMOS and 17# TESTS. Only MACOS DEBUG versions are cleaned 18# "make NDEBUG=TRUE" builds nondebug versions. 19# "make NDEBUG=TRUE clean" cleans only nondebug versions. 20 21include buildtools/commondefs 22 23############################################################################### 24# Dependencies 25############################################################################### 26 27# THE ORDER OF THE LIBRARIES LISTED IS ALSO THE LIBRARY BUILD ORDER 28 29# XXX All libraries that are included in commondefs->REVOLUTION_LIBS must be listed 30# XXX here under $(LIBS), or else executables will fail to link 31 32ifdef EPPC 33################### 34# EPPC BUILDS 35################### 36LIBS = ai \ 37 amcnotstub \ 38 amcstubs \ 39 odemustubs \ 40 odenotstub \ 41 ax \ 42 base \ 43 card \ 44 cx \ 45 dsp \ 46 dvd \ 47 exi \ 48 fa \ 49 faw \ 50 gx \ 51 kmpls \ 52 kpad \ 53 kpadOld \ 54 mem \ 55 midi \ 56 mtx \ 57 os \ 58 pad \ 59 si \ 60 vi \ 61 G2D \ 62 axart \ 63 axfx \ 64 demo \ 65 gd \ 66 mix \ 67 perf \ 68 sample \ 69 seq \ 70 sp \ 71 syn \ 72 thp \ 73 tpl \ 74 nand \ 75 sc \ 76 euart \ 77 ipc \ 78 hio2 \ 79 sdi \ 80 socket \ 81 usb \ 82 arc \ 83 dvdvideo \ 84 wud \ 85 bte \ 86 enc \ 87 cnt \ 88 fnt \ 89 esp \ 90 usbcmn \ 91 scutil \ 92 kbd \ 93 kpr \ 94 darch \ 95 hid \ 96 ga \ 97 pd \ 98 vsm \ 99 wbc \ 100 wpadGtr \ 101 wpadTrn \ 102 wpadDrm \ 103 wpadTbl \ 104 wpadTko \ 105 wpadBlk \ 106 autotest \ 107 lint \ 108 wpad \ 109 ven \ 110 usbmic \ 111 shopsd \ 112 pmic \ 113 cntsd \ 114 ntdtest \ 115 db \ 116 117ifdef RVLDWC_ROOT 118LIBS += vct \ 119 120endif 121 122 123LIBS_INTERNAL = wk \ 124 oslog \ 125 wkmc \ 126 sdwp \ 127 simplekit \ 128 es \ 129 wad \ 130 cunit \ 131 fs \ 132 iprof \ 133 cntcache \ 134 135LIBS += ${LIBS_INTERNAL} 136 137DEMOS = axdemo \ 138 dvddemo \ 139 fademo \ 140 gxdemo \ 141 kpaddemo \ 142 kpadOlddemo \ 143 memdemo \ 144 osdemo \ 145 sample \ 146 spdemo \ 147 videmo \ 148 wpaddemo \ 149 nanddemo \ 150 reldemo \ 151 paddemo \ 152 thpdemo \ 153 scprivatedemo \ 154 scdemo \ 155 carddemo \ 156 gddemo \ 157 hio2demo \ 158 arcdemo \ 159 darchdemo \ 160 encdemo \ 161 cxdemo \ 162 fntdemo \ 163 kbddemo \ 164 kprdemo \ 165 mididemo \ 166 limitdemo \ 167 launchdemo \ 168 discnanddemo \ 169 rsodemo \ 170 hiddemo \ 171 cntdemo \ 172 pddemo \ 173 wbcdemo \ 174 usbmicdemo \ 175 pmicdemo \ 176 cntsddemo \ 177 oslogdemo \ 178 jpegdemo \ 179 180ifdef RVLDWC_ROOT 181DEMOS += vctdemo \ 182 183endif 184 185TESTS = os \ 186 card \ 187 sample \ 188 exi \ 189 sdwp \ 190 nand \ 191 pad \ 192 sc \ 193 dvd \ 194 di \ 195 fs \ 196 es \ 197 sdi \ 198 socket \ 199 usb \ 200 wpad \ 201 abuse \ 202 Nmenu \ 203 enc \ 204 installer \ 205 cx \ 206 updatecheck \ 207 sdkchecker \ 208 autotest \ 209 cntcache \ 210 cntsd \ 211 dummyviewer \ 212 cnt \ 213 deleteSharedCnt \ 214 215AUTOTESTS = fa/fa_sync \ 216 fa/fa_async \ 217 fa/fa_format_test \ 218 fa/valid_test \ 219 sdi \ 220 221TESTS += ${AUTOTESTS} 222 223endif # EPPC 224 225ifdef X86 226 227HOST_LIBS = gd \ 228 hio2Host 229 230HOST_DEMOS = gddemo \ 231 hio2demo 232 233HOST_TOOLS = sample \ 234 dls1wt \ 235 dspadpcm \ 236 dsptool \ 237 sndconv \ 238 soundfile \ 239 thpaudio \ 240 thpcore \ 241 thputilities \ 242 THPConv \ 243 darch \ 244 ntcompress 245 246endif # X86 247 248LIBDIRS = $(addprefix $(LIB_ROOT)/,$(LIBS)) 249TESTDIRS = $(addprefix $(TEST_ROOT)/,$(TESTS)) 250DEMODIRS = $(addprefix $(DEMO_ROOT)/,$(DEMOS)) 251AUTOTESTDIRS = $(addprefix $(TEST_ROOT)/,$(AUTOTESTS)) 252 253HOSTLIBDIRS = $(addprefix $(LIB_ROOT)/,$(HOST_LIBS)) 254HOSTDEMODIRS = $(addprefix $(DEMO_ROOT)/,$(HOST_DEMOS)) 255ADPCMLIBDIRS = $(addprefix $(LIB_ROOT)/,$(ADPCMLIB)) 256SOUNDFILELIBDIRS = $(addprefix $(LIB_ROOT)/,$(SOUNDFILELIB)) 257HOSTTOOLDIRS = $(addprefix $(TOOL_ROOT)/,$(HOST_TOOLS)) 258 259# NOTE: the order of these directories determines build order. 260# In this case, we want libs first, tests second, demos last 261SUBDIRS = $(addprefix $(LIB_ROOT)/,$(LIBS)) \ 262 $(addprefix $(TEST_ROOT)/,$(TESTS)) \ 263 $(addprefix $(DEMO_ROOT)/,$(DEMOS)) \ 264 $(addprefix $(LIB_ROOT)/,$(HOST_LIBS)) \ 265 $(addprefix $(DEMO_ROOT)/,$(HOST_DEMOS)) \ 266 $(addprefix $(LIB_ROOT)/,$(SOUNDFILELIB)) \ 267 $(addprefix $(LIB_ROOT)/,$(ADPCMLIB)) 268 269# The following changes the Makefile include path to include a 270# definition of which architecture we're building for 271ARCH_PATH = $(MAKE_ROOT)/$(ARCH_TARGET) 272 273all: 274 $(MAKE) setup 275 $(MAKE) subdirectories 276 277setup: 278 @if [ ! -d $(INSTALL_ROOT) ] ; then \ 279 echo "Creating $(INSTALL_ROOT)" ; \ 280 rm -rf $(INSTALL_ROOT) ; \ 281 mkdir $(BASEINSTALL_ROOT) ; \ 282 mkdir $(BASEINSTALL_ROOT)/$(ARCH_TARGET) ; \ 283 mkdir $(INSTALL_ROOT)/lib ; \ 284 mkdir $(INSTALL_ROOT)/bin ; \ 285 else \ 286 echo "Install directory ready" ;\ 287 fi 288 289# the following lines build up the flags for the recursive make commands 290BUILDFLAGS = X86=$(X86) PLATFORM=$(PLATFORM) DBREL="$(DBREL)" BUILDTOOLS_ROOT=$(MAKE_ROOT) 291 292ifdef NDEBUG 293BUILDFLAGS += NDEBUG=TRUE 294else 295BUILDFLAGS += DEBUG=TRUE 296endif 297 298ifdef BUILD 299BUILDFLAGS += build 300endif 301 302ifdef INSTALL 303BUILDFLAGS += install 304endif 305 306.PHONY: alllibs libraries demos tests hostlibs hostdemos adpcmlib 307 308subdirectories: 309 @for d in $(SUBDIRS) ; do \ 310 echo "------------------------------------------------------------------" ; \ 311 echo "Building $$d" ; \ 312 if [ ! -d $$d ] ; then \ 313 echo "Module $$d is missing...skipping" ; \ 314 else \ 315 $(MAKE) -C $$d $(BUILDFLAGS) ; \ 316 fi ; \ 317 done ; 318 319alllibs: libraries hostlibs 320 321libraries: 322 @for d in $(LIBDIRS) ; do \ 323 echo "------------------------------------------------------------------" ; \ 324 echo "Building $$d" ; \ 325 if [ ! -d $$d ] ; then \ 326 echo "Module $$d is missing...skipping" ; \ 327 else \ 328 $(MAKE) -C $$d $(BUILDFLAGS) ; \ 329 fi ; \ 330 done ; 331 332libraries.%: 333 @echo "------------------------------------------------------------------" ; \ 334 echo "Building libraries/$*" ; \ 335 $(MAKE) -C $(LIB_ROOT)/$* $(BUILDFLAGS) 336 337hostlibs: 338 @for d in $(HOSTLIBDIRS) ; do \ 339 echo "------------------------------------------------------------------" ; \ 340 echo "Building $$d" ; \ 341 if [ ! -d $$d ] ; then \ 342 echo "Module $$d is missing...skipping" ; \ 343 else \ 344 $(MAKE) -C $$d $(BUILDFLAGS) ; \ 345 fi ; \ 346 done ; 347 348hostlibs.%: 349 @echo "------------------------------------------------------------------" ; \ 350 echo "Building libraries/$*" ; \ 351 $(MAKE) -C $(LIB_ROOT)/$* $(BUILDFLAGS) 352 353demos: 354 @for d in $(DEMODIRS) ; do \ 355 echo "------------------------------------------------------------------" ; \ 356 echo "Building $$d" ; \ 357 if [ ! -d $$d ] ; then \ 358 echo "Module $$d is missing...skipping" ; \ 359 else \ 360 $(MAKE) -C $$d $(BUILDFLAGS) ; \ 361 fi ; \ 362 done ; 363 364demos.%: 365 @echo "------------------------------------------------------------------" ; \ 366 echo "Building demos/$*" ; \ 367 $(MAKE) -C $(DEMO_ROOT)/$* $(BUILDFLAGS) 368 369hostdemos: 370 @for d in $(HOSTDEMODIRS) ; do \ 371 echo "------------------------------------------------------------------" ; \ 372 echo "Building $$d" ; \ 373 if [ ! -d $$d ] ; then \ 374 echo "Module $$d is missing...skipping" ; \ 375 else \ 376 $(MAKE) -C $$d $(BUILDFLAGS) ; \ 377 fi ; \ 378 done ; 379 380hostdemos.%: 381 @echo "------------------------------------------------------------------" ; \ 382 echo "Building demos/$*" ; \ 383 $(MAKE) -C $(DEMO_ROOT)/$* $(BUILDFLAGS) 384 385hosttools: 386 @for d in $(HOSTTOOLDIRS) ; do \ 387 echo "------------------------------------------------------------------" ; \ 388 echo "Building $$d" ; \ 389 if [ ! -d $$d ] ; then \ 390 echo "Module $$d is missing...skipping" ; \ 391 else \ 392 $(MAKE) -C $$d $(BUILDFLAGS) ; \ 393 fi ; \ 394 done ; 395 396hosttools.%: 397 @echo "------------------------------------------------------------------" ; \ 398 echo "Building demos/$*" ; \ 399 $(MAKE) -C $(TOOL_ROOT)/$* $(BUILDFLAGS) 400 401tests: 402 @for d in $(TESTDIRS) ; do \ 403 echo "------------------------------------------------------------------" ; \ 404 echo "Building $$d" ; \ 405 if [ ! -d $$d ] ; then \ 406 echo "Module $$d is missing...skipping" ; \ 407 else \ 408 $(MAKE) -C $$d $(BUILDFLAGS) ; \ 409 fi ; \ 410 done ; 411 412tests.%: 413 @echo "------------------------------------------------------------------" ; \ 414 echo "Building tests/$*" ; \ 415 $(MAKE) -C $(TEST_ROOT)/$* $(BUILDFLAGS) 416 417adpcmlib: 418 @for d in $(ADPCMLIBDIRS) ; do \ 419 echo "------------------------------------------------------------------" ; \ 420 echo "Building $$d" ; \ 421 if [ ! -d $$d ] ; then \ 422 echo "Module $$d is missing...skipping" ; \ 423 else \ 424 $(MAKE) -C $$d $(BUILDFLAGS) ; \ 425 fi ; \ 426 done ; 427 428update: 429 @if [ ! -f $(SS) ] ; then \ 430 echo "SourceSafe is not installed! Please go to \\ntd-pdc\Vss\Dolphin Readme" ; \ 431 exit 1; \ 432 fi 433 @echo "Changing Sourcesafe project to $(SSROOT), performing full GET." 434 @$(SS) cp $(SSROOT) -I-Y -y$(SSUSER) 435 @cd $(ROOT) 436 @$(SS) get \*.\* -R -I-Y -y$(SSUSER) -r -gf 437 438clean clobber superclobber: 439 @echo ">>> Cleaning $(ARCH_TARGET) target" ; 440 @for d in $(SUBDIRS) ; do \ 441 echo "------------------------------------------------------------------" ; \ 442 echo "Cleaning $$d" ; \ 443 if [ ! -d $$d ] ; then \ 444 echo "Module $$d is missing...skipping" ; \ 445 else \ 446 $(MAKE) -C $$d $@ $(BUILDFLAGS) ; \ 447 fi ; \ 448 done ; 449 450clean_libraries: 451 @echo ">>> Cleaning $(ARCH_TARGET) target" ; 452 @for d in $(LIBDIRS) ; do \ 453 echo "------------------------------------------------------------------" ; \ 454 echo "Cleaning $$d" ; \ 455 if [ ! -d $$d ] ; then \ 456 echo "Module $$d is missing...skipping" ; \ 457 else \ 458 $(MAKE) -C $$d clean $(BUILDFLAGS) ; \ 459 fi ; \ 460 done ; 461 462autotest_setdvdroot: 463 @echo "" 464 @setndenv DvdRoot "$(AUTOTEST_DVDROOT)" 465 @ if [ ! -f $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).elf ] || [ ! -f $(AUTOTEST_DVDROOT)/autotest.dol ] ; then \ 466 echo ">>> Building autotest module" ; \ 467 make -C $(AUTOTEST_MAKEPATH) NDEBUG=TRUE; \ 468 fi 469 470autotest_targets: 471 @for d in $(AUTOTESTDIRS) ; do \ 472 echo "------------------------------------------------------------------" ; \ 473 echo "Installing $$d for autotest" ; \ 474 if [ ! -d $$d ] ; then \ 475 echo "Module $$d is missing...skipping" ; \ 476 else \ 477 $(MAKE) -C $$d autotest_targets $(BUILDFLAGS) ; \ 478 fi ; \ 479 done ; 480 481autotest: autotest_targets autotest_setdvdroot 482 @ if [ -e "$(ROOT)/build/tests/autotest_modules.txt" ] ; then \ 483 cp $(ROOT)/build/tests/autotest_modules.txt $(AUTOTEST_DVDROOT_TESTS)/autotest_modules.txt; \ 484 else \ 485 echo no $(ROOT)/build/tests/autotest_modules.txt; \ 486 fi 487 @ if [ "$(ARGS)" != "" ] ; then \ 488 ndrun $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).elf -a $(ARGS); \ 489 else \ 490 ndrun $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).elf; \ 491 fi 492 @ echo "Opening serial port..."; \ 493 AUTOTEST_LOG=autotest_`date +%y%m%d%H%M`.txt; \ 494 if [ "$(TIMEOUT)" != "" ] ; then \ 495 uterm "" $$AUTOTEST_LOG "" "" $(TIMEOUT); \ 496 else \ 497 uterm "" $$AUTOTEST_LOG "" "" 900; \ 498 fi; \ 499 if [ $$? -ne 0 ] ; then \ 500 ndstop; \ 501 echo error; \ 502 else \ 503 echo ok; \ 504 fi; \ 505 grep -i 'AutoTest: ' $$AUTOTEST_LOG; \ 506 grep -i 'Failed' $$AUTOTEST_LOG; \ 507 echo "Log: $$AUTOTEST_LOG" 508 509autotest_rvm: autotest_targets autotest_setdvdroot 510 @ if [ -e "$(ROOT)/build/tests/autotest_modules.txt" ] ; then \ 511 cp $(ROOT)/build/tests/autotest_modules.txt $(AUTOTEST_DVDROOT_TESTS)/autotest_modules.txt; \ 512 else \ 513 echo no $(ROOT)/build/tests/autotest_modules.txt; \ 514 fi 515 @ setsmem2size 64 516# @ setcountrycode jp # developer must set up country code manually 517# @ setfirmware 53 # developer must set up firmware version manually 518 @ ndrun $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).elf -a -manual 519 @ makemasterNF $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).dlf $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).rvm 520 521# Below does not build and install the $(TESTDOL) because we don't know what module it is in. 522# It is better to call this from module's makefile to run one so $(TESTDOL) is dependent on build + install 523autotest_runone: autotest_setdvdroot 524 ndrun $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).elf -a -runone $(TESTDOL) $(ARGS) 525 @ echo "Opening serial port..."; \ 526 AUTOTEST_LOG=autotest_`date +%y%m%d%H%M`.txt; \ 527 if [ "$(TIMEOUT)" != "" ] ; then \ 528 uterm "" $$AUTOTEST_LOG "" "" $(TIMEOUT); \ 529 else \ 530 uterm "" $$AUTOTEST_LOG "" "" 900; \ 531 fi; \ 532 if [ $$? -ne 0 ] ; then \ 533 ndstop; \ 534 echo error; \ 535 else \ 536 echo ok; \ 537 fi; \ 538 grep -i 'AutoTest: ' $$AUTOTEST_LOG; \ 539 grep -i 'Failed' $$AUTOTEST_LOG; \ 540 echo "Log: $$AUTOTEST_LOG" 541 542autotest_manual: autotest_setdvdroot 543 @ if [ "$(ARGS)" != "" ] ; then \ 544 ndrun $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).elf -a $(ARGS); \ 545 else \ 546 ndrun $(AUTOTEST_STUB_PATH)/$(AUTOTEST_STUB).elf -a -manual; \ 547 fi 548 549autotest_clean: 550 rm -rf $(AUTOTEST_DVDROOT_TESTS); \ 551 rm -rf $(AUTOTEST_DVDROOT_IMPORT) 552