From cf7bf47dc0b3145362849cf83d330556e1a44ba5 Mon Sep 17 00:00:00 2001 From: Colin Miller Date: Thu, 20 Nov 2025 17:54:25 -0500 Subject: [PATCH 1/3] Tooling update pr --- configure.py | 65 ++++++++++++++++++++++++++++++++++++------ tools/download_tool.py | 28 +++++++++++------- tools/project.py | 31 ++++++++++++++++++-- 3 files changed, 103 insertions(+), 21 deletions(-) diff --git a/configure.py b/configure.py index d503bbeff..11693091b 100644 --- a/configure.py +++ b/configure.py @@ -102,6 +102,12 @@ type=Path, help="path to sjiswrap.exe (optional)", ) +parser.add_argument( + "--ninja", + metavar="BINARY", + type=Path, + help="path to ninja binary (optional)", +) parser.add_argument( "--verbose", action="store_true", @@ -113,6 +119,13 @@ 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", @@ -134,6 +147,7 @@ config.generate_map = args.map config.non_matching = args.non_matching config.sjiswrap_path = args.sjiswrap +config.ninja_path = args.ninja config.progress = args.progress if not is_windows(): config.wrapper = args.wrapper @@ -143,14 +157,13 @@ # Tool versions config.binutils_tag = "2.42-1" -config.compilers_tag = "20240706" -config.dtk_tag = "v1.4.1" -config.objdiff_tag = "v3.3.1" -config.sjiswrap_tag = "v1.2.0" -config.wibo_tag = "0.6.11" +config.compilers_tag = "20250812" +config.dtk_tag = "v1.7.0" +config.objdiff_tag = "v3.4.1" +config.sjiswrap_tag = "v1.2.2" +config.wibo_tag = "1.0.0-beta.5" # Project -config.shift_jis = False config.config_path = Path("config") / config.version / "config.yml" config.check_sha_path = Path("config") / config.version / "build.sha1" config.asflags = [ @@ -159,7 +172,6 @@ "-I include", f"-I build/{config.version}/include", f"--defsym BUILD_VERSION={version_num}", - f"--defsym VERSION_={config.version}", ] config.ldflags = [ "-fp hardware", @@ -216,6 +228,14 @@ 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, @@ -239,6 +259,33 @@ #"-requireprotos" ] +cflags_trk = [ + *cflags_base, + "-O4,p", + "-sdata 0", + "-sdata2 0", + "-inline auto,deferred", + "-rostr", + "-char signed", + "-use_lmw_stmw on" +] + +# Bink was compiled with ProDG +cflags_bink = [ + "-O3", + "-mcpu=750", + "-fno-exceptions", + "-Wno-inline", + "-nostdinc", + "-I src/dolphin/src", + "-I include", + "-I src/dolphin/include", + "-D__GEKKO__", + "-I src/bink/include", + "-I src/PowerPC_EABI_Support/include", + "-G0", +] + # Renderware library flags cflags_renderware = [ *cflags_base, @@ -587,8 +634,8 @@ def MatchingFor(*versions): }, { "lib": "binkngc", - "mw_version": "GC/1.3.2", - "cflags": cflags_runtime, + "mw_version": "ProDG/3.5", + "cflags": cflags_bink, "progress_category": "bink", "objects": [ Object(NonMatching, "bink/src/sdk/decode/ngc/binkngc.c"), diff --git a/tools/download_tool.py b/tools/download_tool.py index eecb7ab53..22465267a 100644 --- a/tools/download_tool.py +++ b/tools/download_tool.py @@ -78,12 +78,14 @@ def sjiswrap_url(tag: str) -> str: def wibo_url(tag: str) -> str: - repo = "https://github.com/decompals/wibo" - return f"{repo}/releases/download/{tag}/wibo" + uname = platform.uname() + arch = uname.machine.lower() + system = uname.system.lower() + if system == "darwin": + arch = "macos" -def ok_url(tag: str) -> str: - repo = "https://github.com/bfbbdecomp/OK" - return f"{repo}/releases/download/{tag}/OK-linux-x86_64" + repo = "https://github.com/decompals/wibo" + return f"{repo}/releases/download/{tag}/wibo-{arch}" TOOLS: Dict[str, Callable[[str], str]] = { @@ -93,9 +95,9 @@ def ok_url(tag: str) -> str: "objdiff-cli": objdiff_cli_url, "sjiswrap": sjiswrap_url, "wibo": wibo_url, - "OK": ok_url } + def download(url, response, output) -> None: if url.endswith(".zip"): data = io.BytesIO(response.read()) @@ -112,6 +114,7 @@ def download(url, response, output) -> None: st = os.stat(output) os.chmod(output, st.st_mode | stat.S_IEXEC) + def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("tool", help="Tool name") @@ -133,12 +136,17 @@ def main() -> None: try: import certifi import ssl - except: - print("\"certifi\" module not found. Please install it using \"python -m pip install certifi\".") + except ImportError: + print( + '"certifi" module not found. Please install it using "python -m pip install certifi".' + ) return - - with urllib.request.urlopen(req, context=ssl.create_default_context(cafile=certifi.where())) as response: + + with urllib.request.urlopen( + req, context=ssl.create_default_context(cafile=certifi.where()) + ) as response: download(url, response, output) + if __name__ == "__main__": main() diff --git a/tools/project.py b/tools/project.py index f5144a223..811b57c6a 100644 --- a/tools/project.py +++ b/tools/project.py @@ -606,6 +606,17 @@ def write_cargo_rule(): ### compiler_path = compilers / "$mw_version" + # NGCCC + ngccc = compiler_path / "ngccc.exe" + if is_windows(): + ngccc_cmd = f"cmd /c \"set SN_NGC_PATH={os.path.abspath(compiler_path)}&& {ngccc} $cflags -c -o $out $in\"" + else: + ngccc_cmd = f"env SN_NGC_PATH={os.path.abspath(compiler_path)} {wrapper_cmd}{ngccc} $cflags -c -o $out $in" + ngccc_implicit: List[Optional[Path]] = [ + compilers_implicit or ngccc, + wrapper_implicit, + ] + # MWCC mwcc = compiler_path / "mwcceppc.exe" mwcc_cmd = f"{wrapper_cmd}{mwcc} $cflags -MMD -c $in -o $basedir" @@ -663,6 +674,16 @@ def write_cargo_rule(): ) n.newline() + n.comment("ProDG build") + n.rule( + name="prodg", + command=ngccc_cmd, + description="ProDG $out", + depfile="$basefile.d", + deps="gcc", + ) + n.newline() + n.comment("MWCC build (with UTF-8 to Shift JIS wrapper)") n.rule( name="mwcc_sjis", @@ -877,12 +898,18 @@ def c_build(obj: Object, src_path: Path) -> Optional[Path]: cflags_str = make_flags_str(all_cflags) used_compiler_versions.add(obj.options["mw_version"]) + # Add MWCC build rule + fakerule = "mwcc_sjis" if obj.options["shift_jis"] else "mwcc" + fakeimplicit = mwcc_sjis_implicit if obj.options["shift_jis"] else mwcc_implicit + if ("prodg" in obj.options["mw_version"].lower()): + fakerule = "prodg" + fakeimplicit = ngccc_implicit lib_name = obj.options["lib"] n.comment(f"{obj.name}: {lib_name} (linked {obj.completed})") n.build( outputs=obj.src_obj_path, - rule="mwcc_sjis" if obj.options["shift_jis"] else "mwcc", + rule=fakerule, inputs=src_path, variables={ "mw_version": Path(obj.options["mw_version"]), @@ -891,7 +918,7 @@ def c_build(obj: Object, src_path: Path) -> Optional[Path]: "basefile": obj.src_obj_path.with_suffix(""), }, implicit=( - mwcc_sjis_implicit if obj.options["shift_jis"] else mwcc_implicit + fakeimplicit ), order_only="pre-compile", ) From d99ee72d5a9f2aeea9c2bc8d9bbd4d226ca7eaa2 Mon Sep 17 00:00:00 2001 From: Colin Miller Date: Thu, 20 Nov 2025 21:30:14 -0500 Subject: [PATCH 2/3] download_tool update pt2 --- tools/download_tool.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/download_tool.py b/tools/download_tool.py index 22465267a..d9b9f2564 100644 --- a/tools/download_tool.py +++ b/tools/download_tool.py @@ -87,6 +87,10 @@ def wibo_url(tag: str) -> str: repo = "https://github.com/decompals/wibo" return f"{repo}/releases/download/{tag}/wibo-{arch}" +def ok_url(tag: str) -> str: + repo = "https://github.com/bfbbdecomp/OK" + return f"{repo}/releases/download/{tag}/OK-linux-x86_64" + TOOLS: Dict[str, Callable[[str], str]] = { "binutils": binutils_url, @@ -95,6 +99,7 @@ def wibo_url(tag: str) -> str: "objdiff-cli": objdiff_cli_url, "sjiswrap": sjiswrap_url, "wibo": wibo_url, + "OK": ok_url } From b268924b84b699a0ee3b4ad7ab4b19ce8271c599 Mon Sep 17 00:00:00 2001 From: Colin Miller Date: Thu, 20 Nov 2025 21:49:12 -0500 Subject: [PATCH 3/3] Beginning of Bink SDK --- configure.py | 2 +- src/bink/include/popmal.h | 6 ++++++ src/bink/shared/time/radcb.c | 0 src/bink/src/sdk/bitplane.c | 0 src/bink/src/sdk/dct.c | 0 src/bink/src/sdk/decode/binkacd.c | 0 src/bink/src/sdk/decode/binkread.c | 0 src/bink/src/sdk/decode/expand.c | 0 src/bink/src/sdk/decode/ngc/binkngc.c | 0 src/bink/src/sdk/decode/ngc/ngcfile.c | 0 src/bink/src/sdk/decode/ngc/ngcrgb.c | 0 src/bink/src/sdk/decode/ngc/ngcsnd.c | 0 src/bink/src/sdk/decode/ngc/ngcyuy2.c | 0 src/bink/src/sdk/decode/yuv.cpp | 0 src/bink/src/sdk/fft.c | 0 src/bink/src/sdk/popmal.c | 8 ++++++++ src/bink/src/sdk/varbits.c | 0 17 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 src/bink/include/popmal.h create mode 100644 src/bink/shared/time/radcb.c create mode 100644 src/bink/src/sdk/bitplane.c create mode 100644 src/bink/src/sdk/dct.c create mode 100644 src/bink/src/sdk/decode/binkacd.c create mode 100644 src/bink/src/sdk/decode/binkread.c create mode 100644 src/bink/src/sdk/decode/expand.c create mode 100644 src/bink/src/sdk/decode/ngc/binkngc.c create mode 100644 src/bink/src/sdk/decode/ngc/ngcfile.c create mode 100644 src/bink/src/sdk/decode/ngc/ngcrgb.c create mode 100644 src/bink/src/sdk/decode/ngc/ngcsnd.c create mode 100644 src/bink/src/sdk/decode/ngc/ngcyuy2.c create mode 100644 src/bink/src/sdk/decode/yuv.cpp create mode 100644 src/bink/src/sdk/fft.c create mode 100644 src/bink/src/sdk/popmal.c create mode 100644 src/bink/src/sdk/varbits.c diff --git a/configure.py b/configure.py index 11693091b..c8946e7b9 100644 --- a/configure.py +++ b/configure.py @@ -283,7 +283,7 @@ "-D__GEKKO__", "-I src/bink/include", "-I src/PowerPC_EABI_Support/include", - "-G0", + "-G4", ] # Renderware library flags diff --git a/src/bink/include/popmal.h b/src/bink/include/popmal.h new file mode 100644 index 000000000..230bc03ae --- /dev/null +++ b/src/bink/include/popmal.h @@ -0,0 +1,6 @@ +#ifndef POPMAL_H +#define POPMAL_H + +#include "types.h" + +#endif diff --git a/src/bink/shared/time/radcb.c b/src/bink/shared/time/radcb.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/bink/src/sdk/bitplane.c b/src/bink/src/sdk/bitplane.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/bink/src/sdk/dct.c b/src/bink/src/sdk/dct.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/bink/src/sdk/decode/binkacd.c b/src/bink/src/sdk/decode/binkacd.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/bink/src/sdk/decode/binkread.c b/src/bink/src/sdk/decode/binkread.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/bink/src/sdk/decode/expand.c b/src/bink/src/sdk/decode/expand.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/bink/src/sdk/decode/ngc/binkngc.c b/src/bink/src/sdk/decode/ngc/binkngc.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/bink/src/sdk/decode/ngc/ngcfile.c b/src/bink/src/sdk/decode/ngc/ngcfile.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/bink/src/sdk/decode/ngc/ngcrgb.c b/src/bink/src/sdk/decode/ngc/ngcrgb.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/bink/src/sdk/decode/ngc/ngcsnd.c b/src/bink/src/sdk/decode/ngc/ngcsnd.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/bink/src/sdk/decode/ngc/ngcyuy2.c b/src/bink/src/sdk/decode/ngc/ngcyuy2.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/bink/src/sdk/decode/yuv.cpp b/src/bink/src/sdk/decode/yuv.cpp new file mode 100644 index 000000000..e69de29bb diff --git a/src/bink/src/sdk/fft.c b/src/bink/src/sdk/fft.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/bink/src/sdk/popmal.c b/src/bink/src/sdk/popmal.c new file mode 100644 index 000000000..d3ce45f80 --- /dev/null +++ b/src/bink/src/sdk/popmal.c @@ -0,0 +1,8 @@ +#include "popmal.h" + +u32 pushtot = NULL; + +u32 popmalloctotal() +{ + return pushtot; +} diff --git a/src/bink/src/sdk/varbits.c b/src/bink/src/sdk/varbits.c new file mode 100644 index 000000000..e69de29bb