#!/usr/bin/env python3 ### # Generates build files for the project. # This file also includes the project configuration, # such as compiler flags and the object matching status. # # Usage: # python3 configure.py # ninja # # Append --help to see available options. ### import argparse import sys from pathlib import Path from typing import Any, Dict, List from tools.project import ( Object, ProgressCategory, ProjectConfig, calculate_progress, generate_build, is_windows, ) # Game versions DEFAULT_VERSION = 0 VERSIONS = [ "GMPE01_00", # USA 1.0 "GMPE01_01", # USA 1.1 "GMPP01_00", # PAL 1.0 "GMPP01_02", # PAL 1.2 "GMPJ01_00", # Japan 1.0 ] parser = argparse.ArgumentParser() parser.add_argument( "mode", choices=["configure", "progress"], default="configure", help="script mode (default: configure)", nargs="?", ) parser.add_argument( "-v", "--version", choices=VERSIONS, type=str.upper, default=VERSIONS[DEFAULT_VERSION], help="version to build", ) parser.add_argument( "--build-dir", metavar="DIR", type=Path, default=Path("build"), help="base build directory (default: build)", ) parser.add_argument( "--binutils", metavar="BINARY", type=Path, help="path to binutils (optional)", ) parser.add_argument( "--compilers", metavar="DIR", type=Path, help="path to compilers (optional)", ) parser.add_argument( "--map", action="store_true", help="generate map file(s)", ) parser.add_argument( "--debug", action="store_true", help="build with debug info (non-matching)", ) if not is_windows(): parser.add_argument( "--wrapper", metavar="BINARY", type=Path, help="path to wibo or wine (optional)", ) parser.add_argument( "--dtk", metavar="BINARY | DIR", type=Path, help="path to decomp-toolkit binary or source (optional)", ) parser.add_argument( "--objdiff", metavar="BINARY | DIR", type=Path, help="path to objdiff-cli binary or source (optional)", ) parser.add_argument( "--sjiswrap", metavar="EXE", type=Path, help="path to sjiswrap.exe (optional)", ) parser.add_argument( "--verbose", action="store_true", help="print verbose output", ) parser.add_argument( "--non-matching", dest="non_matching", action="store_true", help="builds equivalent (but non-matching) or modded objects", ) parser.add_argument( "--warn", dest="warn", type=str, choices=["all", "off", "error"], help="how to handle warnings", ) parser.add_argument( "--no-progress", dest="progress", action="store_false", help="disable progress calculation", ) args = parser.parse_args() config = ProjectConfig() config.version = str(args.version) version_num = VERSIONS.index(config.version) # Apply arguments config.build_dir = args.build_dir config.dtk_path = args.dtk config.objdiff_path = args.objdiff config.binutils_path = args.binutils config.compilers_path = args.compilers config.generate_map = args.map config.non_matching = args.non_matching config.sjiswrap_path = args.sjiswrap config.progress = args.progress if not is_windows(): config.wrapper = args.wrapper # Don't build asm unless we're --non-matching if not config.non_matching: config.asm_dir = None # Tool versions config.binutils_tag = "2.42-1" config.compilers_tag = "20250520" config.dtk_tag = "v1.6.1" config.objdiff_tag = "v3.0.0-beta.8" config.sjiswrap_tag = "v1.2.1" config.wibo_tag = "0.6.16" # Project config.config_path = Path("config") / config.version / "config.yml" config.check_sha_path = Path("config") / config.version / "build.sha1" config.asflags = [ "-mgekko", "--strip-local-absolute", "-I include", f"-I build/{config.version}/include", f"--defsym BUILD_VERSION={version_num}", ] config.ldflags = [ "-fp hardware", "-nodefaults", ] if args.debug: config.ldflags.append("-g") if args.map: config.ldflags.append("-mapunused") # Use for any additional files that should cause a re-configure when modified config.reconfig_deps = [] # Optional numeric ID for decomp.me preset # Can be overridden in libraries or objects config.scratch_preset_id = 82 # Mario Party 4 (DOL) # Base flags, common to most GC/Wii games. # Generally leave untouched, with overrides added below. cflags_base = [ "-nodefaults", "-proc gekko", "-align powerpc", "-enum int", "-fp hardware", "-Cpp_exceptions off", # "-W all", "-O4,p", "-inline auto", '-pragma "cats off"', '-pragma "warn_notinlined off"', "-maxerrors 1", "-nosyspath", "-RTTI off", "-fp_contract on", "-str reuse", "-i include", "-i extern/musyx/include", f"-i build/{config.version}/include", "-multibyte", f"-DVERSION={version_num}", "-DMUSY_TARGET=MUSY_TARGET_DOLPHIN", ] if config.non_matching: cflags_base.append("-DNON_MATCHING") # Debug flags if args.debug: cflags_base.extend(["-sym on", "-DDEBUG=1"]) else: cflags_base.append("-DNDEBUG=1") # Warning flags if args.warn == "all": cflags_base.append("-W all") elif args.warn == "off": cflags_base.append("-W off") elif args.warn == "error": cflags_base.append("-W error") # Metrowerks library flags cflags_runtime = [ *cflags_base, "-use_lmw_stmw on", "-str reuse,readonly", "-common off", "-inline auto,deferred", ] # Dolphin library flags cflags_dolphin = [ *cflags_base, "-fp_contract off", ] cflags_thp = [ *cflags_base, ] # Metrowerks library flags cflags_msl = [ *cflags_base, "-char signed", "-use_lmw_stmw on", "-str reuse,pool,readonly", "-common off", "-inline auto,deferred", ] # Metrowerks library flags cflags_trk = [ *cflags_base, "-use_lmw_stmw on", "-str reuse,readonly", "-common off", "-sdata 0", "-sdata2 0", "-inline auto,deferred", "-enum min", "-sdatathreshold 0" ] cflags_odemuexi = [ *cflags_base, "-inline deferred" ] cflags_amcstub = [ *cflags_base, "-inline auto,deferred", ] cflags_odenotstub = [ *cflags_base, "-inline auto,deferred", ] cflags_musyx = [ "-proc gekko", "-nodefaults", "-nosyspath", "-i include", "-i extern/musyx/include", "-inline auto", "-O4,p", "-fp hard", "-enum int", "-Cpp_exceptions off", "-str reuse,pool,readonly", "-fp_contract off", "-DMUSY_TARGET=MUSY_TARGET_DOLPHIN", "-sym on" ] cflags_musyx_debug = [ "-proc gecko", "-fp hard", "-nodefaults", "-nosyspath", "-i include", "-i extern/musyx/include", "-i libc", "-g", "-sym on", "-D_DEBUG=1", "-fp hard", "-enum int", "-Cpp_exceptions off", "-DMUSY_TARGET=MUSY_TARGET_DOLPHIN", ] # REL flags cflags_rel = [ *cflags_base, "-O0,p", "-char unsigned", "-fp_contract off", "-sdata 0", "-sdata2 0", "-pool off", "-DMATH_EXPORT_CONST", ] # Game flags cflags_game = [ *cflags_base, "-O0,p", "-char unsigned", "-fp_contract off", ] # Game flags cflags_libhu = [ *cflags_base, "-O0,p", "-char unsigned", "-fp_contract off", ] # Game flags cflags_msm = [ *cflags_base, ] config.linker_version = "GC/2.6" config.rel_strip_partial = False config.rel_empty_file = "REL/empty.c" # Helper function for Dolphin libraries def DolphinLib(lib_name, objects): return { "lib": lib_name, "mw_version": "GC/1.2.5n", "cflags": cflags_dolphin, "objects": objects, } def DolphinLibUnpatched(lib_name, objects): return { "lib": lib_name, "mw_version": "GC/1.2.5", "cflags": cflags_dolphin, "objects": objects, } def MusyX(objects, mw_version="GC/1.3.2", debug=False, major=1, minor=5, patch=4): cflags = cflags_musyx if not debug else cflags_musyx_debug return { "lib": "musyx", "mw_version": mw_version, "src_dir": "extern/musyx/src", "cflags": [ *cflags, f"-DMUSY_VERSION_MAJOR={major}", f"-DMUSY_VERSION_MINOR={minor}", f"-DMUSY_VERSION_PATCH={patch}", ], "objects": objects, } # Helper function for REL script objects def Rel(lib_name, objects): return { "lib": lib_name, "mw_version": "GC/1.3.2", "cflags": cflags_rel, "scratch_preset_id": 115, # Mario Party 4 (REL) "objects": objects, } Matching = True # Object matches and should be linked NonMatching = False # Object does not match and should not be linked Equivalent = config.non_matching # Object should be linked when configured with --non-matching # Object is only matching for specific versions def MatchingFor(*versions): return config.version in versions config.warn_missing_config = True config.warn_missing_source = False config.libs = [ { "lib": "Game", "mw_version": config.linker_version, "cflags": cflags_game, "objects": [ Object(Matching, "game/main.c"), Object(Matching, "game/pad.c"), Object(Matching, "game/dvd.c"), Object(Matching, "game/data.c"), Object(Matching, "game/decode.c"), Object(Matching, "game/font.c"), Object(Matching, "game/init.c"), Object(Matching, "game/jmp.c"), Object(Matching, "game/malloc.c"), Object(Matching, "game/memory.c"), Object(Matching, "game/printfunc.c"), Object(Matching, "game/process.c"), Object(Matching, "game/sprman.c"), Object(Matching, "game/sprput.c"), Object(Matching, "game/hsfload.c"), Object(Matching, "game/hsfdraw.c"), Object(Matching, "game/hsfman.c"), Object(Matching, "game/hsfmotion.c"), Object(Matching, "game/hsfanim.c"), Object(Matching, "game/hsfex.c"), Object(Matching, "game/perf.c"), Object(Matching, "game/objmain.c"), Object(Matching, "game/fault.c"), Object(Matching, "game/gamework.c"), Object(Matching, "game/objsysobj.c"), Object(Matching, "game/objdll.c"), Object(Matching, "game/frand.c"), Object(Matching, "game/audio.c"), Object(Matching, "game/EnvelopeExec.c"), Object(Matching, "game/minigame_seq.c"), Object(Matching, "game/ovllist.c"), Object(Matching, "game/esprite.c"), Object(Matching, "game/code_8003FF68.c"), Object(Matching, "game/ClusterExec.c"), Object(Matching, "game/ShapeExec.c"), Object(Matching, "game/wipe.c"), Object(Matching, "game/window.c"), Object(Matching, "game/messdata.c"), Object(Matching, "game/card.c"), Object(Matching, "game/armem.c"), Object(Matching, "game/chrman.c"), Object(Matching, "game/mapspace.c"), Object(Matching, "game/THPSimple.c"), Object(Matching, "game/THPDraw.c"), Object(Matching, "game/thpmain.c"), Object(Matching, "game/objsub.c"), Object(Matching, "game/flag.c"), Object(Matching, "game/saveload.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/sreset.c"), Object(Matching, "game/board/main.c"), Object(Matching, "game/board/player.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/model.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/window.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/audio.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/com.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/view.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/space.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/shop.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/lottery.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/basic_space.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/warp.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/char_wheel.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/mushroom.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/star.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/roll.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/ui.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/block.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/item.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/bowser.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/battle.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/fortune.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/boo.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/mg_setup.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/boo_house.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/start.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/last5.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/pause.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/com_path.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "game/board/tutorial.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "game/kerent.c"), ], }, DolphinLib( "base", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/PPCArch.c"), ], ), DolphinLib( "os", [ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "dolphin/os/OS.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSAlarm.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSAlloc.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSArena.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSAudioSystem.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSCache.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSContext.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSError.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSFont.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSInterrupt.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSLink.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSMessage.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSMemory.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSMutex.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSReboot.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSReset.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSResetSW.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSRtc.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSStopwatch.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSSync.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSThread.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/OSTime.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "dolphin/os/__start.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/os/__ppc_eabi_init.c"), ], ), DolphinLib( "db", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/db.c"), ], ), DolphinLibUnpatched( "mtx", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/mtx/mtx.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/mtx/mtxvec.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/mtx/mtx44.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/mtx/vec.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/mtx/quat.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/mtx/psmtx.c"), ], ), DolphinLib( "dvd", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/dvd/dvdlow.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/dvd/dvdfs.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/dvd/dvd.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/dvd/dvdqueue.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/dvd/dvderror.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/dvd/fstload.c"), ], ), DolphinLib( "vi", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/vi.c"), ], ), DolphinLib( "demo", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/demo/DEMOInit.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/demo/DEMOFont.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/demo/DEMOPuts.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/demo/DEMOStats.c"), ], ), DolphinLib( "pad", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/pad/Padclamp.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/pad/Pad.c"), ], ), DolphinLib( "ai", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/ai.c"), ], ), DolphinLib( "ar", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/ar/ar.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/ar/arq.c"), ], ), DolphinLib( "dsp", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/dsp/dsp.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/dsp/dsp_debug.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/dsp/dsp_task.c"), ], ), DolphinLib( "gx", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXInit.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXFifo.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXAttr.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXMisc.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXGeometry.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXFrameBuf.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXLight.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXTexture.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXBump.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXTev.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXPixel.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXStubs.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXDisplayList.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXTransform.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/gx/GXPerf.c"), ], ), DolphinLib( "card", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDBios.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDUnlock.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDRdwr.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDBlock.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDDir.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDCheck.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDMount.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDFormat.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDOpen.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDCreate.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDRead.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDWrite.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDDelete.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDStat.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/card/CARDNet.c"), ], ), DolphinLib( "exi", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/exi/EXIBios.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/exi/EXIUart.c"), ], ), DolphinLib( "si", [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/si/SIBios.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/si/SISamplingRate.c"), ], ), { "lib": "thp", "mw_version": "GC/1.2.5", "cflags": cflags_thp, "objects": [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/thp/THPDec.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "dolphin/thp/THPAudio.c"), ], }, { "lib": "Runtime.PPCEABI.H", "mw_version": config.linker_version, "cflags": cflags_runtime, "objects": [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/__va_arg.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/global_destructor_chain.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/__mem.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/New.cp", extra_cflags=["-Cpp_exceptions on"]), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/NewMore.cp", extra_cflags=["-Cpp_exceptions on", "-RTTI on"]), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/NMWException.cpp", extra_cflags=["-Cpp_exceptions on"]), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/runtime.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/__init_cpp_exceptions.cpp"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/Gecko_ExceptionPPC.cpp", extra_cflags=["-Cpp_exceptions on", "-RTTI on"], extab_padding=[0x25, 0x00]), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/GCN_Mem_Alloc.c"), ], }, { "lib": "MSL_C.PPCEABI.bare.H", "mw_version": "GC/1.3", "cflags": cflags_msl, "objects": [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/abort_exit.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/alloc.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/errno.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/ansi_files.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/ansi_fp.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/arith.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/buffer_io.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/ctype.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/direct_io.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/file_io.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/FILE_POS.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/mbstring.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/mem.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/mem_funcs.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/misc_io.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/printf.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/float.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/signal.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/string.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/uart_console_io.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/wchar_io.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/e_acos.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/e_asin.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/e_atan2.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/e_fmod.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/e_pow.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/e_rem_pio2.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/k_cos.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/k_rem_pio2.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/k_sin.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/k_tan.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/s_atan.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/s_copysign.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/s_cos.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/s_floor.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/s_frexp.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/s_ldexp.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/s_modf.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/s_sin.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/s_tan.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/w_acos.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/w_asin.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/w_atan2.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/w_fmod.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/w_pow.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "MSL_C.PPCEABI.bare.H/math_ppc.c"), ], }, { "lib": "TRK_MINNOW_DOLPHIN", "mw_version": "GC/1.3", "cflags": cflags_trk, "objects": [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mainloop.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/nubevent.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/nubinit.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/msg.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/msgbuf.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/serpoll.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/usr_put.c", mw_version="GC/1.3.2"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/dispatch.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/msghndlr.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/support.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mutex_TRK.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/notify.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/flush_cache.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mem_TRK.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/targimpl.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/targsupp.s"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/__exception.s"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/dolphin_trk.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mpc_7xx_603e.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/main_TRK.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/targcont.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/target_options.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mslsupp.c"), ], }, MusyX( objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/seq.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/synth.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/seq_api.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/snd_synthapi.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/stream.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/synthdata.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/synthmacros.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/synthvoice.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/synth_ac.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/synth_dbtab.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/synth_adsr.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/synth_vsamples.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/s_data.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/hw_dspctrl.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/hw_volconv.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/snd3d.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/snd_init.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/snd_math.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/snd_midictrl.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/snd_service.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/hardware.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/dsp_import.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/hw_aramdma.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/hw_dolphin.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/hw_memory.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/CheapReverb/creverb_fx.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/CheapReverb/creverb.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/StdReverb/reverb_fx.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/StdReverb/reverb.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/Delay/delay_fx.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "musyx/runtime/Chorus/chorus_fx.c"), } ), { "lib": "OdemuExi2", "mw_version": "GC/1.2.5" if version_num == 0 else "GC/1.2.5n", "cflags": cflags_odemuexi, "objects": [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "OdemuExi2/DebuggerDriver.c"), ], }, { "lib": "amcstubs", "mw_version": config.linker_version, "cflags": cflags_amcstub, "objects": [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "amcstubs/AmcExi2Stubs.c"), ], }, { "lib": "odenotstub", "mw_version": config.linker_version, "cflags": cflags_odenotstub, "objects": [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "odenotstub/odenotstub.c"), ], }, { "lib": "libhu", "mw_version": config.linker_version, "cflags": cflags_libhu, "objects": [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "libhu/setvf.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "libhu/subvf.c"), ], }, { "lib": "msm", "mw_version": "GC/1.2.5", "cflags": cflags_msm, "objects": [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmsys.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmmem.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmfio.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmmus.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmse.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmstream.c"), ], }, { "lib": "REL", "mw_version": config.linker_version, "cflags": cflags_rel, "objects": [ Object(Matching, "REL/executor.c"), Object(Matching, "REL/empty.c"), # Must be marked as matching Object(Matching, "REL/board_executor.c"), ], }, Rel( "_minigameDLL", objects={ Object(Matching, "REL/_minigameDLL/_minigameDLL.c"), }, ), Rel( "bootDll", objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/bootDll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/bootDll/language.c"), }, ), Rel( "E3setupDLL", objects={ Object(Matching, "REL/E3setupDLL/mgselect.c"), Object(Matching, "REL/E3setupDLL/main.c"), }, ), Rel( "instDll", objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/instDll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/instDll/font.c"), }, ), Rel( "m401Dll", # Manta Rings objects={ Object(Matching, "REL/m401Dll/main.c"), Object(Matching, "REL/m401Dll/main_ex.c"), }, ), Rel( "m402Dll", # Slime Time objects={ Object(Matching, "REL/m402Dll/main.c"), }, ), Rel( "m403Dll", # Booksquirm objects={ Object(Matching, "REL/m403Dll/main.c"), Object(Matching, "REL/m403Dll/scene.c"), }, ), Rel( "m404Dll", # Trace Race objects={ Object(Matching, "REL/m404Dll/main.c"), }, ), Rel( "m405Dll", # Mario Medley objects={ Object(Matching, "REL/m405Dll/main.c"), }, ), Rel( "m406Dll", # Avalanche! objects={ Object(Matching, "REL/m406Dll/main.c"), Object(Matching, "REL/m406Dll/map.c"), Object(Matching, "REL/m406Dll/player.c"), }, ), Rel( "m407dll", # Domination objects={ Object(Matching, "REL/m407dll/player.c"), Object(Matching, "REL/m407dll/map.c"), Object(Matching, "REL/m407dll/camera.c"), Object(Matching, "REL/m407dll/whomp.c"), Object(Matching, "REL/m407dll/whomp_score.c"), Object(Matching, "REL/m407dll/effect.c"), Object(Matching, "REL/m407dll/main.c"), Object(Matching, "REL/m407dll/score.c"), }, ), Rel( "m408Dll", # Paratrooper Plunge objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m408Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m408Dll/camera.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m408Dll/stage.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m408Dll/object.c"), }, ), Rel( "m409Dll", # Toad's Quick Draw objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m409Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m409Dll/player.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m409Dll/cursor.c"), }, ), Rel( "m410Dll", # Three Throw objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m410Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m410Dll/stage.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m410Dll/game.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m410Dll/player.c"), }, ), Rel( "m411Dll", # Photo Finish objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m411Dll/main.c"), }, ), Rel( "m412Dll", # Mr. Blizzard's Brigade objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m412Dll/main.c"), }, ), Rel( "m413Dll", # Bob-omb Breakers objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m413Dll/main.c"), }, ), Rel( "m414Dll", # Long Claw of the Law objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m414Dll/main.c"), }, ), Rel( "m415Dll", # Stamp Out! objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m415Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m415Dll/map.c"), }, ), Rel( "m416Dll", # Candlelight Flight objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m416Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m416Dll/map.c"), }, ), Rel( "m417Dll", # Makin' Waves objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m417Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m417Dll/water.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m417Dll/player.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m417Dll/sequence.c"), }, ), Rel( "m418Dll", # Hide and Go BOOM! objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m418Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m418Dll/sequence.c"), }, ), Rel( "m419Dll", # Tree Stomp objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m419Dll/main.c"), }, ), Rel( "m420dll", # Fish n' Drips objects={ Object(Matching, "REL/m420dll/main.c"), Object(Matching, "REL/m420dll/camera.c"), Object(Matching, "REL/m420dll/player.c"), Object(Matching, "REL/m420dll/map.c"), Object(Matching, "REL/m420dll/rand.c"), }, ), Rel( "m421Dll", # Hop or Pop objects={ Object(Matching, "REL/m421Dll/main.c"), Object(Matching, "REL/m421Dll/player.c"), Object(Matching, "REL/m421Dll/map.c"), }, ), Rel( "m422Dll", # Money Belts objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m422Dll/main.c"), }, ), Rel( "m423Dll", # GOOOOOOOAL!! objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m423Dll/main.c"), }, ), Rel( "m424Dll", # Blame it on the Crane objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m424Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m424Dll/map.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m424Dll/ball.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m424Dll/claw.c"), }, ), Rel( "m425Dll", # The Great Deflate objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m425Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m425Dll/thwomp.c"), }, ), Rel( "m426Dll", # Revers-a-Bomb objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/m426Dll/main.c"), }, ), Rel( "m427Dll", # Right Oar Left? objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m427Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m427Dll/map.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m427Dll/player.c"), }, ), Rel( "m428Dll", # Cliffhangers objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m428Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m428Dll/map.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m428Dll/player.c"), }, ), Rel( "m429Dll", # Team Treasure Trek objects={ Object(Matching, "REL/m429Dll/main.c"), }, ), Rel( "m430Dll", # Pair-a-sailing objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m430Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m430Dll/water.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m430Dll/player.c"), }, ), Rel( "m431Dll", # Order Up objects={ Object(Matching, "REL/m431Dll/main.c"), Object(Matching, "REL/m431Dll/object.c"), }, ), Rel( "m432Dll", # Dungeon Duos objects={ Object(Matching, "REL/m432Dll/main.c"), }, ), Rel( "m433Dll", # Beach Volley Folly objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/m433Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/m433Dll/map.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/m433Dll/player.c"), }, ), Rel( "m434Dll", # Cheep Cheep Sweep objects={ Object(Matching, "REL/m434Dll/main.c"), Object(Matching, "REL/m434Dll/map.c"), Object(Matching, "REL/m434Dll/player.c"), Object(Matching, "REL/m434Dll/fish.c"), }, ), Rel( "m435Dll", # Darts of Doom objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m435Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m435Dll/sequence.c"), }, ), Rel( "m436Dll", # Fruits of Doom objects={ Object(Matching, "REL/m436Dll/main.c"), Object(Matching, "REL/m436Dll/sequence.c"), }, ), Rel( "m437Dll", # Balloon of Doom objects={ Object(Matching, "REL/m437Dll/main.c"), Object(Matching, "REL/m437Dll/sequence.c"), }, ), Rel( "m438Dll", # Chain Chomp Fever objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m438Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m438Dll/map.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m438Dll/fire.c"), }, ), Rel( "m439Dll", # Paths of Peril objects={ Object(Matching, "REL/m439Dll/main.c"), }, ), Rel( "m440Dll", # Bowser's Bigger Blast objects={ Object(Matching, "REL/m440Dll/main.c"), Object(Matching, "REL/m440Dll/object.c"), }, ), Rel( "m441Dll", # Butterfly Blitz objects={ Object(Matching, "REL/m441Dll/main.c"), }, ), Rel( "m442Dll", # Barrel Baron objects={ Object(Matching, "REL/m442Dll/main.c"), Object(Matching, "REL/m442Dll/score.c"), }, ), Rel( "m443Dll", # Mario Speedwagons objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m443Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m443Dll/map.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m443Dll/player.c"), }, ), Rel( "m444dll", # Reversal of Fortune objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00", "GMPP01_02"), "REL/m444dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00", "GMPP01_02"), "REL/m444dll/pinball.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00", "GMPP01_02"), "REL/m444dll/datalist.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00", "GMPP01_02"), "REL/m444dll/shadow.c"), }, ), Rel( "m445Dll", # Bowser Bop objects={ Object(Matching, "REL/m445Dll/main.c"), }, ), Rel( "m446dll", # Mystic Match 'Em objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m446Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m446Dll/card.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m446Dll/deck.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m446Dll/table.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m446Dll/player.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m446Dll/camera.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m446Dll/cursor.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m446Dll/stage.c"), }, ), Rel( "m447dll", # Archaeologuess objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m447dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m447dll/stage.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m447dll/camera.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m447dll/player.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m447dll/player_col.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m447dll/block.c"), }, ), Rel( "m448Dll", # Goomba's Chip Flip objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m448Dll/main.c"), }, ), Rel( "m449Dll", # Kareening Koopa objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m449Dll/main.c"), }, ), Rel( "m450Dll", # The Final Battle! objects={ Object(Matching, "REL/m450Dll/main.c"), }, ), Rel( "m451Dll", # Jigsaw Jitters objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m451Dll/m451.c"), }, ), Rel( "m453Dll", # Challenge Booksquirm objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m453Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m453Dll/map.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m453Dll/score.c"), }, ), Rel( "m455Dll", # Rumble Fishing objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m455Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m455Dll/stage.c"), }, ), Rel( "m456Dll", # Take a Breather objects={ Object(Matching, "REL/m456Dll/main.c"), Object(Matching, "REL/m456Dll/stage.c"), }, ), Rel( "m457Dll", # Bowser Wrestling objects={ Object(Matching, "REL/m457Dll/main.c"), }, ), Rel( "m458Dll", # Panels of Doom objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m458Dll/main.c"), }, ), Rel( "m459dll", # Mushroom Medic objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m459dll/main.c"), }, ), Rel( "m460Dll", # Doors of Doom objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m460Dll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m460Dll/player.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m460Dll/map.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m460Dll/score.c"), }, ), Rel( "m461Dll", # Bob-omb X-ing objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/m461Dll/main.c"), }, ), Rel( "m462Dll", # Goomba Stomp objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/m462Dll/main.c"), }, ), Rel( "m463Dll", # Panel Panic 9 Player objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/m463Dll/main.c"), }, ), Rel( "mentDll", objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/mentDll/common.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/mentDll/main.c"), }, ), Rel( "messDll", objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/messDll/main.c"), }, ), Rel( "mgmodedll", objects={ Object(Matching, "REL/mgmodedll/mgmode.c"), Object(Matching, "REL/mgmodedll/free_play.c"), Object(Matching, "REL/mgmodedll/record.c"), Object(Matching, "REL/mgmodedll/battle.c"), Object(Matching, "REL/mgmodedll/tictactoe.c"), Object(Matching, "REL/mgmodedll/main.c"), Object(Matching, "REL/mgmodedll/datalist.c"), Object(Matching, "REL/mgmodedll/minigame.c"), }, ), Rel( "modeltestDll", objects={ Object(Matching, "REL/modeltestDll/main.c"), Object(Matching, "REL/modeltestDll/modeltest00.c"), Object(Matching, "REL/modeltestDll/modeltest01.c"), }, ), Rel( "modeseldll", objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/modeseldll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/modeseldll/modesel.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/modeseldll/filesel.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/modeseldll/datalist.c"), }, ), Rel( "mpexDll", objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/mpexDll/main.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/mpexDll/mpex.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/mpexDll/charsel.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/mpexDll/mgname.c"), }, ), Rel( "mstory2Dll", objects={ Object(Matching, "REL/mstory2Dll/main.c"), Object(Matching, "REL/mstory2Dll/board_entrance.c"), Object(Matching, "REL/mstory2Dll/board_clear.c"), Object(Matching, "REL/mstory2Dll/board_miss.c"), Object(Matching, "REL/mstory2Dll/mg_clear.c"), Object(Matching, "REL/mstory2Dll/mg_miss.c"), Object(Matching, "REL/mstory2Dll/ending.c"), Object(Matching, "REL/mstory2Dll/save.c"), }, ), Rel( "mstory3Dll", objects={ Object(Matching, "REL/mstory3Dll/main.c"), Object(Matching, "REL/mstory3Dll/result_seq.c"), Object(Matching, "REL/mstory3Dll/result.c"), Object(Matching, "REL/mstory3Dll/win_effect.c"), }, ), Rel( "mstory4Dll", objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/mstory4Dll/main.c"), }, ), Rel( "mstoryDll", objects={ Object(Matching, "REL/mstoryDll/main.c"), Object(Matching, "REL/mstoryDll/board_clear.c"), Object(Matching, "REL/mstoryDll/board_miss.c"), Object(Matching, "REL/mstoryDll/mg_clear.c"), Object(Matching, "REL/mstoryDll/mg_miss.c"), Object(Matching, "REL/mstoryDll/save.c"), }, ), Rel( "nisDll", objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/nisDll/main.c") }, ), Rel( "option", objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/option/scene.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/option/camera.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/option/room.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/option/guide.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/option/state.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/option/rumble.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/option/sound.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/option/record.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/option/window.c"), }, ), Rel( "present", objects={ Object(Matching, "REL/present/init.c"), Object(Matching, "REL/present/camera.c"), Object(Matching, "REL/present/present.c"), Object(Matching, "REL/present/main.c"), Object(Matching, "REL/present/common.c"), }, ), Rel( "resultDll", objects={ Object(Matching, "REL/resultDll/main.c"), Object(Matching, "REL/resultDll/battle.c"), Object(Matching, "REL/resultDll/datalist.c"), }, ), Rel( "safDll", objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/safDll/main.c"), }, ), Rel( "selmenuDll", objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/selmenuDll/main.c"), }, ), Rel( "staffDll", objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPP01_00", "GMPP01_02"), "REL/staffDll/main.c"), }, ), Rel( "subchrselDll", objects={ Object(Matching, "REL/subchrselDll/main.c"), }, ), Rel( "w01Dll", # Toad's Midway Madness objects={ Object(Matching, "REL/w01Dll/main.c"), Object(Matching, "REL/w01Dll/mg_coin.c"), Object(Matching, "REL/w01Dll/mg_item.c"), }, ), Rel( "w02Dll", # Goomba's Greedy Gala objects={ Object(Matching, "REL/w02Dll/main.c"), Object(Matching, "REL/w02Dll/gendice.c"), Object(Matching, "REL/w02Dll/gamble.c"), Object(Matching, "REL/w02Dll/mg_coin.c"), Object(Matching, "REL/w02Dll/mg_item.c"), Object(Matching, "REL/w02Dll/shuffleboard.c"), Object(Matching, "REL/w02Dll/roulette.c"), }, ), Rel( "w03Dll", # Shy Guy's Jungle Jam objects={ Object(Matching, "REL/w03Dll/main.c"), Object(Matching, "REL/w03Dll/statue.c"), Object(Matching, "REL/w03Dll/condor.c"), Object(Matching, "REL/w03Dll/river.c"), Object(Matching, "REL/w03Dll/smoke.c"), Object(Matching, "REL/w03Dll/mg_coin.c"), Object(Matching, "REL/w03Dll/mg_item.c"), }, ), Rel( "w04Dll", # Boo's Haunted Bash objects={ Object(Matching, "REL/w04Dll/main.c"), Object(Matching, "REL/w04Dll/bridge.c"), Object(Matching, "REL/w04Dll/boo_event.c"), Object(Matching, "REL/w04Dll/big_boo.c"), Object(Matching, "REL/w04Dll/mg_item.c"), Object(Matching, "REL/w04Dll/mg_coin.c"), }, ), Rel( "w05Dll", # Koopa's Seaside Soiree objects={ Object(Matching, "REL/w05Dll/main.c"), Object(Matching, "REL/w05Dll/hotel.c"), Object(Matching, "REL/w05Dll/monkey.c"), Object(Matching, "REL/w05Dll/dolphin.c"), Object(Matching, "REL/w05Dll/mg_item.c"), Object(Matching, "REL/w05Dll/mg_coin.c"), }, ), Rel( "w06Dll", # Bowser's Gnarly Party objects={ Object(Matching, "REL/w06Dll/main.c"), Object(Matching, "REL/w06Dll/mg_item.c"), Object(Matching, "REL/w06Dll/mg_coin.c"), Object(Matching, "REL/w06Dll/fire.c"), Object(Matching, "REL/w06Dll/bridge.c"), Object(Matching, "REL/w06Dll/bowser.c"), }, ), Rel( "w10Dll", # Tutorial board objects={ Object(Matching, "REL/w10Dll/main.c"), Object(Matching, "REL/w10Dll/host.c"), Object(Matching, "REL/w10Dll/scene.c"), Object(Matching, "REL/w10Dll/tutorial.c"), }, ), Rel( "w20Dll", # Mega Board Mayhem objects={ Object(Matching, "REL/w20Dll/main.c"), }, ), Rel( "w21Dll", # Mini Board Mad Dash objects={ Object(Matching, "REL/w21Dll/main.c"), }, ), Rel( "ztardll", objects={ Object(Matching, "REL/ztardll/main.c"), Object(Matching, "REL/ztardll/font.c"), Object(Matching, "REL/ztardll/select.c"), }, ), ] # Optional extra categories for progress tracking config.progress_categories = [] config.progress_each_module = args.verbose # Optional extra arguments to `objdiff-cli report generate` config.progress_report_args = [ # Marks relocations as mismatching if the target value is different # Default is "functionRelocDiffs=none", which is most lenient # "--config functionRelocDiffs=data_value", ] if args.mode == "configure": # Write build.ninja and objdiff.json generate_build(config) elif args.mode == "progress": # Print progress information calculate_progress(config) else: sys.exit("Unknown mode: " + args.mode)