diff --git a/.gitignore b/.gitignore index 19a8313dde..3b936751de 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,7 @@ build/ /include/sprite/ /include/map /tools/permuter_settings.toml +/tools/build/first_ok # Assets /assets/* diff --git a/Jenkinsfile b/Jenkinsfile index 5704c7ca20..e7f33aa306 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -8,6 +8,8 @@ pipeline { steps { sh 'cp /usr/local/etc/roms/papermario.us.z64 ver/us/baserom.z64' sh 'cp /usr/local/etc/roms/papermario.jp.z64 ver/jp/baserom.z64' + sh 'curl -L "https://github.com/pmret/gcc-papermario/releases/download/master/linux.tar.gz" | tar zx -C tools/build/cc/gcc' + sh 'curl -L "https://github.com/pmret/binutils-papermario/releases/download/master/linux.tar.gz" | tar zx -C tools/build/cc/gcc' sh './configure' } } diff --git a/include/common_structs.h b/include/common_structs.h index d8adefb14c..5b9ec15736 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -967,7 +967,7 @@ typedef struct { // Assume they return an Effect*, and this struct is accessed at unk_0C, // but this struct differs from EffectInstanceData // Search for "struct N(temp)" for examples -typedef struct { +typedef struct EffectInstanceDataThing { char unk_00[0x4]; f32 unk_04; f32 unk_08; diff --git a/include/enums.h b/include/enums.h index bd5c9e75ac..56f6c35305 100644 --- a/include/enums.h +++ b/include/enums.h @@ -1426,8 +1426,7 @@ enum NpcIDs { NPC_BTL_MERLEE = -10, }; -typedef UNK_TYPE TriggerFlag; -enum TriggerFlags { +enum { TRIGGER_WALL_PUSH = 0x00000040, TRIGGER_FLOOR_TOUCH = 0x00000080, TRIGGER_WALL_PRESS_A = 0x00000100, diff --git a/include/macros.h b/include/macros.h index a59bc60241..68183a011a 100644 --- a/include/macros.h +++ b/include/macros.h @@ -94,4 +94,8 @@ #define ASCII_TO_U32(a, b, c, d) ((u32)((a << 24) | (b << 16) | (c << 8) | (d << 0))) +#ifdef PERMUTER +#define SCRIPT(...) {} +#endif + #endif diff --git a/include/map.h b/include/map.h index 28167b46eb..a96fe31cca 100644 --- a/include/map.h +++ b/include/map.h @@ -44,7 +44,7 @@ typedef struct Map { /* 0x14 */ char* bgName; /* 0x18 */ MapInit init; ///< Return TRUE to skip normal asset (shape/hit/bg/tex) loading. /* 0x1C */ union { - u32 u32; + u32 word; struct { char unk_1C[0x2]; s8 songVariation; ///< 0 or 1. @see bgm_get_map_default_variation diff --git a/install.sh b/install.sh index 2fcd5d69d2..aef5da333e 100755 --- a/install.sh +++ b/install.sh @@ -8,6 +8,10 @@ fi uname=`uname` if [[ "$uname" == "Darwin" ]]; then + echo "Downloading gcc/binutils for macOS" + curl -L "https://github.com/pmret/gcc-papermario/releases/download/master/mac.tar.gz" | tar zx -C tools/build/cc/gcc + curl -L "https://github.com/pmret/binutils-papermario/releases/download/master/mac.tar.gz" | tar zx -C tools/build/cc/gcc + echo "Installing packages for macOS" if ! command -v brew >/dev/null 2>&1; then @@ -28,6 +32,10 @@ if [[ "$uname" == "Darwin" ]]; then exit fi +echo "Downloading gcc/binutils for Linux" +curl -L "https://github.com/pmret/gcc-papermario/releases/download/master/linux.tar.gz" | tar zx -C tools/build/cc/gcc +curl -L "https://github.com/pmret/binutils-papermario/releases/download/master/linux.tar.gz" | tar zx -C tools/build/cc/gcc + # Debian and derivatives (apt) if cat /etc/os-release | grep -E 'ID=debian|ID_LIKE=debian' &> /dev/null; then echo "Installing packages for Debian or derivative (apt)" diff --git a/src/world/world.c b/src/world/world.c index 5a7806dd3e..9414b86c0f 100644 --- a/src/world/world.c +++ b/src/world/world.c @@ -151,7 +151,7 @@ void load_map_by_IDs(s16 areaID, s16 mapID, s16 loadType) { gPlayerStatus.targetYaw = gPlayerStatus.currentYaw; - func_801497FC(D_8008FF60[map->unk_1C.u32 % 4]); + func_801497FC(D_8008FF60[map->unk_1C.word % 4]); sfx_reset_door_sounds(); if (initStatus == 0) { diff --git a/tools/build/arm/cc1 b/tools/build/arm/cc1 deleted file mode 100755 index 9278b36b1b..0000000000 Binary files a/tools/build/arm/cc1 and /dev/null differ diff --git a/tools/build/arm/mips-nintendo-nu64-as b/tools/build/arm/mips-nintendo-nu64-as deleted file mode 100755 index cfb7ac94dc..0000000000 Binary files a/tools/build/arm/mips-nintendo-nu64-as and /dev/null differ diff --git a/tools/build/cc/gcc/.gitignore b/tools/build/cc/gcc/.gitignore new file mode 100644 index 0000000000..d6b7ef32c8 --- /dev/null +++ b/tools/build/cc/gcc/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tools/build/configure.py b/tools/build/configure.py index bc2250b6dd..6a349a787b 100755 --- a/tools/build/configure.py +++ b/tools/build/configure.py @@ -2,6 +2,7 @@ from typing import List, Dict, Set, Union from pathlib import Path +import subprocess import sys import ninja_syntax from glob import glob @@ -9,11 +10,7 @@ from glob import glob # Configuration: VERSIONS = ["us", "jp"] DO_SHA1_CHECK = True - -CPPFLAGS = "-w -Iver/$version/build/include -Iinclude -Isrc -Iassets/$version -D _LANGUAGE_C -D _FINALROM -D VERSION=$version " \ - "-ffreestanding -DF3DEX_GBI_2 -D_MIPS_SZLONG=32" -CFLAGS = "-G0 -O2 -quiet -fno-common -Wuninitialized -Wmissing-braces" -ASFLAGS = "-G0" +DO_FIRST_OK = True # Paths: ROOT = Path(__file__).parent.parent.parent @@ -32,34 +29,34 @@ def rm_recursive(path: Path): path.unlink() def exec_shell(command: List[str]) -> str: - import subprocess - ret = subprocess.run(command, stdout=subprocess.PIPE, text=True) return ret.stdout def write_ninja_rules(ninja: ninja_syntax.Writer, cpp: str, cppflags: str, extra_cflags: str): # platform-specific if sys.platform == "darwin": - os_dir = "mac" iconv = "tools/iconv.py UTF-8 SHIFT-JIS" elif sys.platform == "linux": - from os import uname - - if uname()[4] == "aarch64": - os_dir = "arm" - else: - os_dir = "linux" - iconv = "iconv --from UTF-8 --to SHIFT-JIS" else: raise Exception(f"unsupported platform {sys.platform}") + ccache = "" + + try: + subprocess.call(["ccache"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + except FileNotFoundError: + ccache = "" + cross = "mips-linux-gnu-" + cc = f"{ccache}{BUILD_TOOLS}/cc/gcc/gcc" + cxx = f"{ccache}{BUILD_TOOLS}/cc/gcc/g++" + compile_script = f"$python {BUILD_TOOLS}/cc_dsl/compile_script.py" - cc1 = f"{BUILD_TOOLS}/{os_dir}/cc1" - nu64as = f"{BUILD_TOOLS}/{os_dir}/mips-nintendo-nu64-as" + CPPFLAGS = "-w -Iver/$version/build/include -Iinclude -Isrc -Iassets/$version -D_LANGUAGE_C -D_FINALROM -DVERSION=$version " \ + "-ffreestanding -DF3DEX_GBI_2 -D_MIPS_SZLONG=32" - cflags = CFLAGS + " " + extra_cflags + cflags = f"-c -G0 -O2 -fno-common -Wuninitialized -Wmissing-braces -B {BUILD_TOOLS}/cc/gcc/ {extra_cflags}" ninja.variable("python", sys.executable) @@ -75,7 +72,7 @@ def write_ninja_rules(ninja: ninja_syntax.Writer, cpp: str, cppflags: str, extra ninja.rule("sha1sum", description="check $in", - command="sha1sum -c $in && touch $out" if DO_SHA1_CHECK else "touch $out", + command="sha1sum -c $in && touch $out" + ("&& bash tools/build/first_ok.sh" if DO_FIRST_OK else "") if DO_SHA1_CHECK else "touch $out", ) ninja.rule("cpp", @@ -84,15 +81,22 @@ def write_ninja_rules(ninja: ninja_syntax.Writer, cpp: str, cppflags: str, extra ) ninja.rule("cc", - description="cc($version) $in $cflags", - command=f"bash -o pipefail -c '{cpp} {CPPFLAGS} {cppflags} -MD -MF $out.d $in -o - | {iconv} | {cc1} {cflags} $cflags -o - | {nu64as} {ASFLAGS} - -o $out'", + description="cc $in", + command=f"bash -o pipefail -c '{cpp} {CPPFLAGS} {cppflags} -MD -MF $out.d $in -o - | {iconv} > $out.i && {cc} {cflags} $cflags $out.i -o $out'", depfile="$out.d", deps="gcc", ) ninja.rule("cc_dsl", - description="cc_dsl($version) $in $cflags", - command=f"bash -o pipefail -c '{cpp} {CPPFLAGS} {cppflags} -MD -MF $out.d $in -o - | $python {BUILD_TOOLS}/cc_dsl/compile_script.py | {iconv} | {cc1} {cflags} $cflags -o - | {nu64as} {ASFLAGS} - -o $out'", + description="cc $in $cflags", + command=f"bash -o pipefail -c '{cpp} {CPPFLAGS} {cppflags} -MD -MF $out.d $in -o - | {compile_script} | {iconv} > $out.i && {cc} {cflags} $cflags $out.i -o $out'", + depfile="$out.d", + deps="gcc", + ) + + ninja.rule("cxx", + description="cxx $in", + command=f"bash -o pipefail -c '{cpp} {CPPFLAGS} {cppflags} -MD -MF $out.d $in -o - | {iconv} > $out.i && {cxx} {cflags} $cflags $out.i -o $out'", depfile="$out.d", deps="gcc", ) @@ -169,7 +173,7 @@ def write_ninja_rules(ninja: ninja_syntax.Writer, cpp: str, cppflags: str, extra ninja.rule("pm_charset_palettes", command=f"$python {BUILD_TOOLS}/pm_charset_palettes.py $out $in") with Path("tools/permuter_settings.toml").open("w") as f: - f.write(f"compiler_command = \"{cpp} {CPPFLAGS} {cppflags} -DPERMUTER | {iconv} | {cc1} {cflags} -o - | {nu64as} {ASFLAGS}\"\n") + f.write(f"compiler_command = \"{cc} {CPPFLAGS.replace('$version', 'us')} {cflags} -DPERMUTER -fforce-addr\"\n") f.write(f"assembler_command = \"{cross}as -EB -march=vr4300 -mtune=vr4300 -Iinclude\"\n") f.write( """ @@ -268,7 +272,8 @@ class Configure: def write_ninja(self, ninja: ninja_syntax.Writer, skip_outputs: Set[str]): import segtypes - import segtypes.n64.data # Doesn't get imported on jp for some odd reason (should maybe be a * import?) + import segtypes.n64.data + import segtypes.n64.Yay0 assert self.linker_entries is not None @@ -300,7 +305,7 @@ class Configure: if task == "yay0": implicit.append(YAY0_COMPRESS_TOOL) - elif task in ["cc", "cc_dsl"]: + elif task in ["cc", "cc_dsl", "cxx"]: order_only.append("generated_headers_" + self.version) ninja.build( @@ -338,6 +343,8 @@ class Configure: # check for dsl task = "cc" + if entry.src_paths[0].suffixes[-1] == ".cpp": + task = "cxx" with entry.src_paths[0].open() as f: s = f.read() if "SCRIPT(" in s or "#pragma SCRIPT" in s or "#include \"world/common/foliage.inc.c\"" in s: diff --git a/tools/build/first_ok.sh b/tools/build/first_ok.sh new file mode 100644 index 0000000000..d5e8d49b89 --- /dev/null +++ b/tools/build/first_ok.sh @@ -0,0 +1,54 @@ +if [ -f "tools/build/first_ok" ]; then + exit +fi +touch tools/build/first_ok + +printf "\e[48;5;0m \e[48;5;3m \e[48;5;58m \e[48;5;237m \e[48;5;235m \e[48;5;236m \e[48;5;3m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;236m \e[48;5;235m \e[48;5;234m \e[48;5;52m \e[48;5;234m \e[48;5;236m \e[48;5;235m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;234m \e[48;5;235m \e[48;5;52m \e[48;5;1m \e[48;5;52m \e[48;5;234m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;234m \e[48;5;235m \e[48;5;52m \e[48;5;124m \e[48;5;52m \e[48;5;234m \e[48;5;235m \e[48;5;233m \e[48;5;52m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;52m \e[48;5;235m \e[48;5;234m \e[48;5;52m \e[48;5;124m \e[48;5;1m \e[48;5;52m \e[48;5;235m \e[48;5;234m \e[48;5;236m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;236m \e[48;5;233m \e[48;5;52m \e[48;5;1m \e[48;5;88m \e[48;5;124m \e[48;5;88m \e[48;5;138m \e[48;5;131m \e[48;5;88m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;234m \e[48;5;232m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;234m \e[48;5;236m \e[48;5;234m \e[48;5;52m \e[48;5;88m \e[48;5;124m \e[48;5;125m \e[48;5;95m \e[48;5;246m \e[48;5;248m \e[48;5;145m \e[48;5;247m \e[48;5;138m \e[48;5;95m \e[48;5;124m \e[48;5;1m \e[48;5;52m \e[48;5;234m \e[48;5;52m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;233m \e[48;5;234m \e[48;5;52m \e[48;5;124m \e[48;5;138m \e[48;5;248m \e[48;5;52m \e[48;5;243m \e[48;5;249m \e[48;5;52m \e[48;5;181m \e[48;5;125m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;234m \e[48;5;237m \e[48;5;9m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;236m \e[48;5;233m \e[48;5;52m \e[48;5;1m \e[48;5;124m \e[48;5;138m \e[48;5;248m \e[48;5;52m \e[48;5;249m \e[48;5;125m \e[48;5;124m \e[48;5;88m \e[48;5;124m \e[48;5;52m \e[48;5;237m \e[48;5;52m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;233m \e[48;5;236m \e[48;5;52m \e[48;5;1m \e[48;5;88m \e[48;5;124m \e[48;5;138m \e[48;5;248m \e[48;5;52m \e[48;5;95m \e[48;5;236m \e[48;5;52m \e[48;5;95m \e[48;5;236m \e[48;5;52m \e[48;5;250m \e[48;5;89m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;236m \e[48;5;238m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;235m \e[48;5;52m \e[48;5;88m \e[48;5;124m \e[48;5;138m \e[48;5;248m \e[48;5;52m \e[48;5;138m \e[48;5;238m \e[48;5;52m \e[48;5;245m \e[48;5;238m \e[48;5;52m \e[48;5;250m \e[48;5;124m \e[48;5;52m \e[48;5;233m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;234m \e[48;5;52m \e[48;5;88m \e[48;5;124m \e[48;5;125m \e[48;5;138m \e[48;5;249m \e[48;5;233m \e[48;5;234m \e[48;5;7m \e[48;5;89m \e[48;5;124m \e[48;5;125m \e[48;5;124m \e[48;5;52m \e[48;5;233m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;52m \e[48;5;233m \e[48;5;52m \e[48;5;124m \e[48;5;88m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;52m \e[48;5;125m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;233m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;52m \e[48;5;233m \e[48;5;52m \e[48;5;124m \e[48;5;52m \e[48;5;234m \e[48;5;233m \e[48;5;234m \e[48;5;233m \e[48;5;52m \e[48;5;1m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;235m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;52m \e[48;5;233m \e[48;5;52m \e[48;5;124m \e[48;5;88m \e[48;5;233m \e[48;5;234m \e[48;5;52m \e[48;5;235m \e[48;5;233m \e[48;5;234m \e[48;5;88m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;235m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;52m \e[48;5;233m \e[48;5;52m \e[48;5;125m \e[48;5;124m \e[48;5;1m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;233m \e[48;5;235m \e[48;5;94m \e[48;5;131m \e[48;5;95m \e[48;5;137m \e[48;5;94m \e[48;5;131m \e[48;5;52m \e[48;5;234m \e[48;5;235m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;235m \e[48;5;0m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;52m \e[48;5;233m \e[48;5;234m \e[48;5;52m \e[48;5;124m \e[48;5;1m \e[48;5;52m \e[48;5;233m \e[48;5;235m \e[48;5;95m \e[48;5;137m \e[48;5;234m \e[48;5;235m \e[48;5;52m \e[48;5;137m \e[48;5;52m \e[48;5;234m \e[48;5;239m \e[48;5;137m \e[48;5;131m \e[48;5;234m \e[48;5;233m \e[48;5;52m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;235m \e[48;5;0m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;232m \e[48;5;233m \e[48;5;124m \e[48;5;52m \e[48;5;233m \e[48;5;95m \e[48;5;131m \e[48;5;137m \e[48;5;233m \e[48;5;234m \e[48;5;233m \e[48;5;137m \e[48;5;233m \e[48;5;234m \e[48;5;58m \e[48;5;137m \e[48;5;95m \e[48;5;239m \e[48;5;233m \e[48;5;52m \e[48;5;88m \e[48;5;1m \e[48;5;233m \e[48;5;234m \e[48;5;0m \e[48;5;233m \e[48;5;237m \e[48;5;240m \e[48;5;243m \e[48;5;239m \e[48;5;237m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;232m \e[48;5;88m \e[48;5;234m \e[48;5;233m \e[48;5;234m \e[48;5;137m \e[48;5;232m \e[48;5;233m \e[48;5;137m \e[48;5;233m \e[48;5;237m \e[48;5;137m \e[48;5;95m \e[48;5;234m \e[48;5;233m \e[48;5;236m \e[48;5;235m \e[48;5;232m \e[48;5;0m \e[48;5;233m \e[48;5;240m \e[48;5;8m \e[48;5;248m \e[48;5;145m \e[48;5;8m \e[48;5;240m \e[48;5;233m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;233m \e[48;5;232m \e[48;5;234m \e[48;5;233m \e[48;5;52m \e[48;5;137m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;131m \e[48;5;94m \e[48;5;95m \e[48;5;232m \e[48;5;233m \e[48;5;238m \e[48;5;137m \e[48;5;95m \e[48;5;234m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[48;5;233m \e[48;5;240m \e[48;5;8m \e[48;5;145m \e[48;5;249m \e[48;5;246m \e[48;5;237m \e[48;5;233m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;232m \e[48;5;233m \e[48;5;235m \e[48;5;94m \e[48;5;137m \e[48;5;234m \e[48;5;235m \e[48;5;52m \e[48;5;131m \e[48;5;137m \e[48;5;95m \e[48;5;234m \e[48;5;235m \e[48;5;239m \e[48;5;137m \e[48;5;95m \e[48;5;233m \e[48;5;0m \e[48;5;233m \e[48;5;237m \e[48;5;241m \e[48;5;145m \e[48;5;249m \e[48;5;247m \e[48;5;242m \e[48;5;232m \e[48;5;233m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;233m \e[48;5;235m \e[48;5;239m \e[48;5;234m \e[48;5;58m \e[48;5;137m \e[48;5;52m \e[48;5;239m \e[48;5;95m \e[48;5;137m \e[48;5;95m \e[48;5;52m \e[48;5;94m \e[48;5;137m \e[48;5;131m \e[48;5;58m \e[48;5;234m \e[48;5;235m \e[48;5;239m \e[48;5;234m \e[48;5;0m \e[48;5;232m \e[48;5;233m \e[48;5;237m \e[48;5;241m \e[48;5;248m \e[48;5;145m \e[48;5;247m \e[48;5;242m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;233m \e[48;5;234m \e[48;5;58m \e[48;5;131m \e[48;5;52m \e[48;5;234m \e[48;5;52m \e[48;5;137m \e[48;5;52m \e[48;5;95m \e[48;5;137m \e[48;5;52m \e[48;5;238m \e[48;5;137m \e[48;5;95m \e[48;5;52m \e[48;5;234m \e[48;5;235m \e[48;5;58m \e[48;5;95m \e[48;5;234m \e[48;5;233m \e[48;5;237m \e[48;5;241m \e[48;5;248m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;242m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m +\e[48;5;233m \e[48;5;235m \e[48;5;137m \e[48;5;238m \e[48;5;236m \e[48;5;95m \e[48;5;137m \e[48;5;52m \e[48;5;137m \e[48;5;95m \e[48;5;235m \e[48;5;137m \e[48;5;95m \e[48;5;52m \e[48;5;137m \e[48;5;234m \e[48;5;233m \e[48;5;240m \e[48;5;8m \e[48;5;145m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;242m \e[48;5;233m \e[48;5;234m \e[48;5;0m \e[0m +\e[48;5;233m \e[48;5;235m \e[48;5;131m \e[48;5;137m \e[48;5;238m \e[48;5;58m \e[48;5;137m \e[48;5;233m \e[48;5;234m \e[48;5;137m \e[48;5;95m \e[48;5;235m \e[48;5;233m \e[48;5;237m \e[48;5;137m \e[48;5;52m \e[48;5;137m \e[48;5;234m \e[48;5;233m \e[48;5;245m \e[48;5;145m \e[48;5;8m \e[48;5;242m \e[48;5;235m \e[48;5;234m \e[48;5;232m \e[48;5;0m \e[0m +\e[48;5;233m \e[48;5;235m \e[48;5;131m \e[48;5;58m \e[48;5;137m \e[48;5;131m \e[48;5;95m \e[48;5;237m \e[48;5;232m \e[48;5;233m \e[48;5;137m \e[48;5;239m \e[48;5;234m \e[48;5;233m \e[48;5;234m \e[48;5;237m \e[48;5;95m \e[48;5;137m \e[48;5;94m \e[48;5;137m \e[48;5;234m \e[48;5;233m \e[48;5;232m \e[48;5;8m \e[48;5;248m \e[48;5;145m \e[48;5;249m \e[48;5;8m \e[48;5;246m \e[48;5;8m \e[48;5;243m \e[48;5;239m \e[48;5;233m \e[48;5;235m \e[48;5;3m \e[0m +\e[48;5;233m \e[48;5;235m \e[48;5;131m \e[48;5;95m \e[48;5;234m \e[48;5;137m \e[48;5;95m \e[48;5;234m \e[48;5;233m \e[48;5;95m \e[48;5;137m \e[48;5;94m \e[48;5;238m \e[48;5;233m \e[48;5;137m \e[48;5;95m \e[48;5;52m \e[48;5;137m \e[48;5;234m \e[48;5;233m \e[48;5;250m \e[48;5;145m \e[48;5;249m \e[48;5;241m \e[48;5;247m \e[48;5;145m \e[48;5;248m \e[48;5;249m \e[48;5;145m \e[48;5;248m \e[48;5;242m \e[48;5;234m \e[48;5;233m \e[48;5;232m \e[48;5;233m \e[0m +\e[48;5;233m \e[48;5;235m \e[48;5;131m \e[48;5;95m \e[48;5;52m \e[48;5;137m \e[48;5;95m \e[48;5;233m \e[48;5;235m \e[48;5;94m \e[48;5;131m \e[48;5;137m \e[48;5;131m \e[48;5;235m \e[48;5;234m \e[48;5;233m \e[48;5;137m \e[48;5;95m \e[48;5;52m \e[48;5;131m \e[48;5;234m \e[48;5;236m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;241m \e[48;5;247m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;242m \e[48;5;235m \e[48;5;233m \e[0m +\e[48;5;233m \e[48;5;235m \e[48;5;94m \e[48;5;131m \e[48;5;137m \e[48;5;131m \e[48;5;232m \e[48;5;233m \e[48;5;234m \e[48;5;52m \e[48;5;95m \e[48;5;131m \e[48;5;130m \e[48;5;95m \e[48;5;58m \e[48;5;52m \e[48;5;232m \e[48;5;233m \e[48;5;236m \e[48;5;131m \e[48;5;137m \e[48;5;95m \e[48;5;233m \e[48;5;237m \e[48;5;241m \e[48;5;145m \e[48;5;249m \e[48;5;241m \e[48;5;242m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;145m \e[48;5;241m \e[48;5;237m \e[48;5;233m \e[0m +\e[48;5;0m \e[48;5;234m \e[48;5;237m \e[48;5;238m \e[48;5;239m \e[48;5;137m \e[48;5;58m \e[48;5;235m \e[48;5;234m \e[48;5;233m \e[48;5;237m \e[48;5;235m \e[48;5;234m \e[48;5;233m \e[48;5;239m \e[48;5;95m \e[48;5;137m \e[48;5;95m \e[48;5;238m \e[48;5;233m \e[48;5;236m \e[48;5;95m \e[48;5;102m \e[48;5;249m \e[48;5;145m \e[48;5;248m \e[48;5;245m \e[48;5;248m \e[48;5;249m \e[48;5;59m \e[48;5;237m \e[48;5;233m \e[0m +\e[48;5;0m \e[48;5;232m \e[48;5;234m \e[48;5;137m \e[48;5;95m \e[48;5;137m \e[48;5;238m \e[48;5;235m \e[48;5;233m \e[48;5;235m \e[48;5;137m \e[48;5;131m \e[48;5;95m \e[48;5;52m \e[48;5;88m \e[48;5;95m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;242m \e[48;5;247m \e[48;5;145m \e[48;5;248m \e[48;5;240m \e[48;5;237m \e[48;5;233m \e[0m +\e[48;5;0m \e[48;5;232m \e[48;5;233m \e[48;5;234m \e[48;5;52m \e[48;5;137m \e[48;5;234m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;233m \e[48;5;234m \e[48;5;173m \e[48;5;131m \e[48;5;94m \e[48;5;234m \e[48;5;52m \e[48;5;124m \e[48;5;95m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;242m \e[48;5;250m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;250m \e[48;5;242m \e[48;5;235m \e[48;5;233m \e[0m +\e[48;5;0m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;233m \e[48;5;52m \e[48;5;137m \e[48;5;239m \e[48;5;235m \e[48;5;233m \e[48;5;234m \e[48;5;235m \e[48;5;233m \e[48;5;234m \e[48;5;137m \e[48;5;52m \e[48;5;234m \e[48;5;232m \e[48;5;52m \e[48;5;1m \e[48;5;124m \e[48;5;95m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;242m \e[48;5;237m \e[48;5;240m \e[48;5;243m \e[48;5;145m \e[48;5;248m \e[48;5;241m \e[48;5;237m \e[48;5;234m \e[48;5;232m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;232m \e[48;5;0m \e[48;5;233m \e[48;5;234m \e[48;5;238m \e[48;5;95m \e[48;5;94m \e[48;5;238m \e[48;5;239m \e[48;5;95m \e[48;5;239m \e[48;5;238m \e[48;5;95m \e[48;5;94m \e[48;5;239m \e[48;5;233m \e[48;5;52m \e[48;5;88m \e[48;5;124m \e[48;5;95m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;242m \e[48;5;8m \e[48;5;245m \e[48;5;246m \e[48;5;249m \e[48;5;145m \e[48;5;246m \e[48;5;238m \e[48;5;234m \e[48;5;232m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;235m \e[48;5;236m \e[48;5;233m \e[48;5;235m \e[48;5;239m \e[48;5;95m \e[48;5;137m \e[48;5;95m \e[48;5;235m \e[48;5;234m \e[48;5;52m \e[48;5;232m \e[48;5;52m \e[48;5;1m \e[48;5;52m \e[48;5;124m \e[48;5;95m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;241m \e[48;5;145m \e[48;5;238m \e[48;5;234m \e[48;5;232m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;233m \e[48;5;234m \e[48;5;235m \e[48;5;233m \e[48;5;234m \e[48;5;52m \e[48;5;234m \e[48;5;52m \e[48;5;234m \e[48;5;233m \e[48;5;52m \e[48;5;124m \e[48;5;95m \e[48;5;59m \e[48;5;249m \e[48;5;247m \e[48;5;241m \e[48;5;247m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;238m \e[48;5;234m \e[48;5;232m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;233m \e[48;5;234m \e[48;5;238m \e[48;5;237m \e[48;5;235m \e[48;5;234m \e[48;5;235m \e[48;5;61m \e[48;5;234m \e[48;5;235m \e[48;5;89m \e[48;5;124m \e[48;5;88m \e[48;5;124m \e[48;5;88m \e[48;5;234m \e[48;5;60m \e[48;5;61m \e[48;5;235m \e[48;5;124m \e[48;5;88m \e[48;5;241m \e[48;5;247m \e[48;5;145m \e[48;5;250m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m +\e[48;5;232m \e[48;5;233m \e[48;5;235m \e[48;5;237m \e[48;5;243m \e[48;5;242m \e[48;5;238m \e[48;5;234m \e[48;5;235m \e[48;5;4m \e[48;5;235m \e[48;5;53m \e[48;5;88m \e[48;5;124m \e[48;5;125m \e[48;5;124m \e[48;5;88m \e[48;5;238m \e[48;5;4m \e[48;5;25m \e[48;5;26m \e[48;5;19m \e[48;5;4m \e[48;5;236m \e[48;5;1m \e[48;5;125m \e[48;5;124m \e[48;5;88m \e[48;5;95m \e[48;5;8m \e[48;5;245m \e[48;5;246m \e[48;5;239m \e[48;5;241m \e[48;5;242m \e[48;5;245m \e[48;5;249m \e[48;5;145m \e[48;5;245m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m +\e[48;5;233m \e[48;5;237m \e[48;5;241m \e[48;5;145m \e[48;5;248m \e[48;5;247m \e[48;5;241m \e[48;5;234m \e[48;5;18m \e[48;5;19m \e[48;5;234m \e[48;5;88m \e[48;5;124m \e[48;5;88m \e[48;5;237m \e[48;5;17m \e[48;5;26m \e[48;5;25m \e[48;5;26m \e[48;5;55m \e[48;5;234m \e[48;5;89m \e[48;5;124m \e[48;5;88m \e[48;5;124m \e[48;5;95m \e[48;5;59m \e[48;5;242m \e[48;5;237m \e[48;5;59m \e[48;5;243m \e[48;5;145m \e[48;5;249m \e[48;5;145m \e[48;5;248m \e[48;5;242m \e[48;5;233m \e[48;5;0m \e[0m +\e[48;5;233m \e[48;5;238m \e[48;5;246m \e[48;5;145m \e[48;5;249m \e[48;5;59m \e[48;5;238m \e[48;5;236m \e[48;5;234m \e[48;5;56m \e[48;5;55m \e[48;5;234m \e[48;5;88m \e[48;5;124m \e[48;5;234m \e[48;5;18m \e[48;5;26m \e[48;5;20m \e[48;5;19m \e[48;5;234m \e[48;5;89m \e[48;5;124m \e[48;5;1m \e[48;5;52m \e[48;5;235m \e[48;5;242m \e[48;5;237m \e[48;5;59m \e[48;5;243m \e[48;5;249m \e[48;5;145m \e[48;5;238m \e[48;5;233m \e[48;5;0m \e[0m +\e[48;5;233m \e[48;5;238m \e[48;5;246m \e[48;5;145m \e[48;5;248m \e[48;5;145m \e[48;5;245m \e[48;5;234m \e[48;5;143m \e[48;5;239m \e[48;5;236m \e[48;5;235m \e[48;5;55m \e[48;5;96m \e[48;5;137m \e[48;5;236m \e[48;5;54m \e[48;5;25m \e[48;5;235m \e[48;5;89m \e[48;5;124m \e[48;5;52m \e[48;5;233m \e[48;5;234m \e[48;5;238m \e[48;5;235m \e[48;5;233m \e[48;5;102m \e[48;5;0m \e[0m +\e[48;5;233m \e[48;5;238m \e[48;5;246m \e[48;5;145m \e[48;5;248m \e[48;5;243m \e[48;5;241m \e[48;5;94m \e[48;5;143m \e[48;5;136m \e[48;5;95m \e[48;5;18m \e[48;5;4m \e[48;5;60m \e[48;5;137m \e[48;5;136m \e[48;5;172m \e[48;5;94m \e[48;5;60m \e[48;5;61m \e[48;5;4m \e[48;5;236m \e[48;5;88m \e[48;5;124m \e[48;5;52m \e[48;5;234m \e[48;5;0m \e[48;5;232m \e[48;5;0m \e[48;5;232m \e[48;5;234m \e[48;5;235m \e[48;5;234m \e[48;5;232m \e[48;5;59m \e[48;5;0m \e[0m +\e[48;5;232m \e[48;5;238m \e[48;5;247m \e[48;5;145m \e[48;5;239m \e[48;5;237m \e[48;5;137m \e[48;5;136m \e[48;5;137m \e[48;5;20m \e[48;5;26m \e[48;5;20m \e[48;5;25m \e[48;5;137m \e[48;5;136m \e[48;5;60m \e[48;5;20m \e[48;5;26m \e[48;5;234m \e[48;5;236m \e[48;5;88m \e[48;5;124m \e[48;5;234m \e[48;5;0m \e[48;5;232m \e[48;5;234m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;233m \e[48;5;240m \e[48;5;243m \e[48;5;249m \e[48;5;240m \e[48;5;237m \e[48;5;137m \e[48;5;136m \e[48;5;137m \e[48;5;20m \e[48;5;26m \e[48;5;25m \e[48;5;20m \e[48;5;19m \e[48;5;137m \e[48;5;173m \e[48;5;137m \e[48;5;136m \e[48;5;137m \e[48;5;60m \e[48;5;26m \e[48;5;25m \e[48;5;56m \e[48;5;4m \e[48;5;234m \e[48;5;124m \e[48;5;235m \e[48;5;234m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;233m \e[48;5;237m \e[48;5;59m \e[48;5;145m \e[48;5;248m \e[48;5;239m \e[48;5;235m \e[48;5;54m \e[48;5;143m \e[48;5;94m \e[48;5;237m \e[48;5;20m \e[48;5;26m \e[48;5;25m \e[48;5;20m \e[48;5;26m \e[48;5;61m \e[48;5;95m \e[48;5;136m \e[48;5;52m \e[48;5;237m \e[48;5;20m \e[48;5;26m \e[48;5;20m \e[48;5;25m \e[48;5;24m \e[48;5;236m \e[48;5;235m \e[48;5;239m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;233m \e[48;5;235m \e[48;5;237m \e[48;5;102m \e[48;5;145m \e[48;5;239m \e[48;5;235m \e[48;5;19m \e[48;5;60m \e[48;5;239m \e[48;5;237m \e[48;5;26m \e[48;5;20m \e[48;5;26m \e[48;5;61m \e[48;5;243m \e[48;5;60m \e[48;5;237m \e[48;5;54m \e[48;5;20m \e[48;5;26m \e[48;5;20m \e[48;5;26m \e[48;5;25m \e[48;5;4m \e[48;5;235m \e[48;5;234m \e[48;5;238m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;233m \e[48;5;235m \e[48;5;241m \e[48;5;249m \e[48;5;239m \e[48;5;235m \e[48;5;19m \e[48;5;26m \e[48;5;55m \e[48;5;26m \e[48;5;20m \e[48;5;61m \e[48;5;26m \e[48;5;19m \e[48;5;20m \e[48;5;25m \e[48;5;26m \e[48;5;20m \e[48;5;4m \e[48;5;235m \e[48;5;234m \e[48;5;238m \e[48;5;0m \e[0m +\e[48;5;0m \e[48;5;232m \e[48;5;234m \e[48;5;237m \e[48;5;236m \e[48;5;235m \e[48;5;19m \e[48;5;26m \e[48;5;20m \e[48;5;26m \e[48;5;20m \e[48;5;4m \e[48;5;235m \e[48;5;234m \e[48;5;238m \e[48;5;0m \e[0m +"; diff --git a/tools/build/linux/cc1 b/tools/build/linux/cc1 deleted file mode 100755 index f5d40e8157..0000000000 Binary files a/tools/build/linux/cc1 and /dev/null differ diff --git a/tools/build/linux/mips-nintendo-nu64-as b/tools/build/linux/mips-nintendo-nu64-as deleted file mode 100755 index d365cb32c3..0000000000 Binary files a/tools/build/linux/mips-nintendo-nu64-as and /dev/null differ diff --git a/tools/build/mac/cc1 b/tools/build/mac/cc1 deleted file mode 100755 index 1b8038eecc..0000000000 Binary files a/tools/build/mac/cc1 and /dev/null differ diff --git a/tools/build/mac/mips-nintendo-nu64-as b/tools/build/mac/mips-nintendo-nu64-as deleted file mode 100755 index 8955737d84..0000000000 Binary files a/tools/build/mac/mips-nintendo-nu64-as and /dev/null differ diff --git a/tools/splat/.gitrepo b/tools/splat/.gitrepo index c3db5e5181..6a9c75039f 100644 --- a/tools/splat/.gitrepo +++ b/tools/splat/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/ethteck/splat.git branch = master - commit = 25b848a230458b50c0d9124cf9af872cebb44ef2 - parent = 08f58ae5d9d266caf805fdee477008f88e84f1f9 + commit = 09a5715405e8eaedad8923b9b7ae80d73d4e7c41 + parent = 5d055900eb9f590595b5628e665f419b8bde8508 method = merge cmdver = 0.4.3 diff --git a/tools/splat/CHANGELOG.md b/tools/splat/CHANGELOG.md index 5f938bac6d..ce2d50e293 100644 --- a/tools/splat/CHANGELOG.md +++ b/tools/splat/CHANGELOG.md @@ -1,5 +1,12 @@ # splat Release Notes +### 0.7.6 + +* Fixed a bug involving detection of defined functions in c files for GLOBAL_ASM-using projects +* Added options to disable the creation of undefined_funcs/syms_auto.txt files +* Add a Vtx segment type for creating c files containg model vertex data in the n64 libultra Vtx format +* Added a `cpp` segment type which is identical to `c` but looks for a file with the extension ".cpp" instead of ".c". + ### 0.7.5: all_ types and auto_all_sections If you have a group segment with multiple c files and want splat to automatically create linker entries at a given position for each code object (c, asm, hasm) in the segment, you can use an `all_` type for that section. For example, you can add `[auto, all_bss]` as the last subsegment in a segment. This will direct splat to create a linker entry for each code object in the segment. This saves a lot of time when it comes to manually adding .bss subsegments for bss support, for example. The same thing can be done for data and rodata sections, but note this should probably be done later into a project when all data / rodata is migrated to c files, as the `all_` types lose the rom positioning information that's necessary for splat to do proper disassembly. diff --git a/tools/splat/segtypes/n64/c.py b/tools/splat/segtypes/n64/c.py index 79599780b9..d08be146bf 100644 --- a/tools/splat/segtypes/n64/c.py +++ b/tools/splat/segtypes/n64/c.py @@ -71,6 +71,14 @@ class N64SegC(N64SegCodeSubsegment): asm_out_dir = options.get_asm_path() / "nonmatchings" / self.dir asm_out_dir.mkdir(parents=True, exist_ok=True) + is_new_c_file = False + + c_path = self.out_path() + if c_path: + if not os.path.exists(c_path) and options.get("create_new_c_files", True): + self.create_c_file(self.funcs_text, asm_out_dir, c_path) + is_new_c_file = True + for func in self.funcs_text: func_name = self.parent.get_symbol(func, type="func", local_only=True).name @@ -78,14 +86,9 @@ class N64SegC(N64SegCodeSubsegment): if func_name not in self.defined_funcs: self.create_c_asm_file(self.funcs_text, func, asm_out_dir, func_name) else: - if func_name in self.global_asm_funcs: + if func_name in self.global_asm_funcs or is_new_c_file: self.create_c_asm_file(self.funcs_text, func, asm_out_dir, func_name) - c_path = self.out_path() - if c_path: - if not os.path.exists(c_path) and options.get("create_new_c_files", True): - self.create_c_file(self.funcs_text, asm_out_dir, c_path) - def get_gcc_inc_header(self): ret = [] ret.append(".set noat # allow manual use of $at") diff --git a/tools/splat/segtypes/n64/cpp.py b/tools/splat/segtypes/n64/cpp.py new file mode 100644 index 0000000000..c88ffd344d --- /dev/null +++ b/tools/splat/segtypes/n64/cpp.py @@ -0,0 +1,6 @@ +from segtypes.n64.c import N64SegC +from util import options + +class N64SegCpp(N64SegC): + def out_path(self): + return options.get_src_path() / self.dir / f"{self.name}.cpp"