Full GCC Compiler (#378)

* fx table work

* fx data

* blah

* render_effects_UI

* split out effects.c

* initial testing of full gcc compiler

* don't touch undefined syms/funcs auto

* git subrepo pull --force tools/splat

subrepo:
  subdir:   "tools/splat"
  merged:   "25b848a230"
upstream:
  origin:   "https://github.com/ethteck/splat.git"
  branch:   "master"
  commit:   "25b848a230"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

* 4 npc funcs

* nine sef commands

* test

* test2

* run undefined_syms through cpp, remove bss and dead syms files

* nuContQueryRead

* update compiler

* configure fixes

* Update compiler binaries with latest build

* permuter_settings

* xgcc -> gcc

* change permissions

* .

* fix permuter stuff

* gcc is the bane of my existence

* non-dumb mac cpp

* build .cpp files with g++

* ccache

* hide stdout/stderr from ccache check

* fix #374

* tar something and other

* ok!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

* lol

* fix linux install

* 👍

* 👍👍

* Make cousin J happy

* always 👍

* git subrepo pull (merge) tools/splat

subrepo:
  subdir:   "tools/splat"
  merged:   "09a5715405"
upstream:
  origin:   "https://github.com/ethteck/splat.git"
  branch:   "master"
  commit:   "09a5715405"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

Co-authored-by: alex <16batesa@gmail.com>
This commit is contained in:
Ethan Roseman 2021-08-23 06:55:26 +09:00 committed by GitHub
parent de800e9c9f
commit f5a6d26ca8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 132 additions and 39 deletions

1
.gitignore vendored
View File

@ -36,6 +36,7 @@ build/
/include/sprite/
/include/map
/tools/permuter_settings.toml
/tools/build/first_ok
# Assets
/assets/*

2
Jenkinsfile vendored
View File

@ -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'
}
}

View File

@ -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;

View File

@ -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,

View File

@ -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

View File

@ -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

View File

@ -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)"

View File

@ -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) {

Binary file not shown.

2
tools/build/cc/gcc/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*
!.gitignore

View File

@ -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:

54
tools/build/first_ok.sh Normal file
View File

@ -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
";

Binary file not shown.

Binary file not shown.

View File

@ -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

View File

@ -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.

View File

@ -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")

View File

@ -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"