marioparty4/configure.py

1607 lines
61 KiB
Python

#!/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)