Skip to content

Commit

Permalink
Merge pull request #173 from encounter/update-dtk-template
Browse files Browse the repository at this point in the history
Update dtk-template & decompctx fixes
  • Loading branch information
shibbo authored Nov 27, 2024
2 parents 63df4ed + c166793 commit f260b6e
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 85 deletions.
9 changes: 2 additions & 7 deletions configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,8 @@
# Tool versions
config.binutils_tag = "2.42-1"
config.compilers_tag = "20240706"
config.dtk_tag = "v1.1.4"
config.objdiff_tag = "v2.3.3"
config.dtk_tag = "v1.3.0"
config.objdiff_tag = "v2.4.0"
config.sjiswrap_tag = "v1.2.0"
config.wibo_tag = "0.6.11"

Expand Down Expand Up @@ -202,7 +202,6 @@

cflags_game = [
"-nodefaults",
"-lang c++",
"-proc gekko",
"-align powerpc",
"-enum int",
Expand Down Expand Up @@ -233,7 +232,6 @@

cflags_nw = [
"-nodefaults",
"-lang c++",
"-proc gekko",
"-align powerpc",
"-enum int",
Expand Down Expand Up @@ -261,7 +259,6 @@

cflags_sdk = [
"-nodefaults",
"-lang c",
"-proc gekko",
"-align powerpc",
"-enum int",
Expand Down Expand Up @@ -292,7 +289,6 @@

cflags_rfl = [
"-nodefaults",
"-lang c",
"-proc gekko",
"-align powerpc",
"-enum int",
Expand Down Expand Up @@ -321,7 +317,6 @@

cflags_msl = [
"-nodefaults",
"-lang c",
"-proc gekko",
"-align powerpc",
"-enum int",
Expand Down
46 changes: 30 additions & 16 deletions tools/decompctx.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,58 +18,63 @@
script_dir = os.path.dirname(os.path.realpath(__file__))
root_dir = os.path.abspath(os.path.join(script_dir, ".."))
src_dir = os.path.join(root_dir, "src")
include_dirs = [
os.path.join(root_dir, "include"),
# Add additional include directories here
]
include_dirs: List[str] = [] # Set with -I flag

include_pattern = re.compile(r'^#\s*include\s*[<"](.+?)[>"]$')
include_pattern = re.compile(r'^#\s*include\s*[<"](.+?)[>"]')
guard_pattern = re.compile(r"^#\s*ifndef\s+(.*)$")
once_pattern = re.compile(r"^#\s*pragma\s+once$")

defines = set()
deps = []


def import_h_file(in_file: str, r_path: str, deps: List[str]) -> str:
def import_h_file(in_file: str, r_path: str) -> str:
rel_path = os.path.join(root_dir, r_path, in_file)
if os.path.exists(rel_path):
return import_c_file(rel_path, deps)
return import_c_file(rel_path)
for include_dir in include_dirs:
inc_path = os.path.join(include_dir, in_file)
if os.path.exists(inc_path):
return import_c_file(inc_path, deps)
return import_c_file(inc_path)
else:
print("Failed to locate", in_file)
return ""


def import_c_file(in_file: str, deps: List[str]) -> str:
def import_c_file(in_file: str) -> str:
in_file = os.path.relpath(in_file, root_dir)
deps.append(in_file)
out_text = ""

try:
with open(in_file, encoding="utf-8") as file:
out_text += process_file(in_file, list(file), deps)
out_text += process_file(in_file, list(file))
except Exception:
with open(in_file) as file:
out_text += process_file(in_file, list(file), deps)
out_text += process_file(in_file, list(file))
return out_text


def process_file(in_file: str, lines: List[str], deps: List[str]) -> str:
def process_file(in_file: str, lines: List[str]) -> str:
out_text = ""
for idx, line in enumerate(lines):
guard_match = guard_pattern.match(line.strip())
if idx == 0:
guard_match = guard_pattern.match(line.strip())
if guard_match:
if guard_match[1] in defines:
break
defines.add(guard_match[1])
else:
once_match = once_pattern.match(line.strip())
if once_match:
if in_file in defines:
break
defines.add(in_file)
print("Processing file", in_file)
include_match = include_pattern.match(line.strip())
if include_match and not include_match[1].endswith(".s"):
out_text += f'/* "{in_file}" line {idx} "{include_match[1]}" */\n'
out_text += import_h_file(include_match[1], os.path.dirname(in_file), deps)
out_text += import_h_file(include_match[1], os.path.dirname(in_file))
out_text += f'/* end "{include_match[1]}" */\n'
else:
out_text += line
Expand Down Expand Up @@ -100,10 +105,19 @@ def main():
"--depfile",
help="""Dependency file""",
)
parser.add_argument(
"-I",
"--include",
help="""Include directory""",
action="append",
)
args = parser.parse_args()

deps = []
output = import_c_file(args.c_file, deps)
if args.include is None:
exit("No include directories specified")
global include_dirs
include_dirs = args.include
output = import_c_file(args.c_file)

with open(os.path.join(root_dir, args.output), "w", encoding="utf-8") as f:
f.write(output)
Expand Down
1 change: 1 addition & 0 deletions tools/download_tool.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ def dtk_url(tag: str) -> str:
repo = "https://github.com/encounter/decomp-toolkit"
return f"{repo}/releases/download/{tag}/dtk-{system}-{arch}{suffix}"


def objdiff_cli_url(tag: str) -> str:
uname = platform.uname()
suffix = ""
Expand Down
23 changes: 9 additions & 14 deletions tools/ninja_syntax.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,10 @@
import os
from io import StringIO
from pathlib import Path
from typing import Dict, List, Match, Optional, Tuple, Union
from typing import Dict, Iterable, List, Match, Optional, Tuple, Union

NinjaPath = Union[str, Path]
NinjaPaths = Union[
List[str],
List[Path],
List[NinjaPath],
List[Optional[str]],
List[Optional[Path]],
List[Optional[NinjaPath]],
]
NinjaPaths = Iterable[Optional[NinjaPath]]
NinjaPathOrPaths = Union[NinjaPath, NinjaPaths]


Expand Down Expand Up @@ -118,8 +111,8 @@ def build(
pool: Optional[str] = None,
dyndep: Optional[NinjaPath] = None,
) -> List[str]:
outputs = serialize_paths(outputs)
out_outputs = [escape_path(x) for x in outputs]
str_outputs = serialize_paths(outputs)
out_outputs = [escape_path(x) for x in str_outputs]
all_inputs = [escape_path(x) for x in serialize_paths(inputs)]

if implicit:
Expand Down Expand Up @@ -154,7 +147,7 @@ def build(
for key, val in iterator:
self.variable(key, val, indent=1)

return outputs
return str_outputs

def include(self, path: str) -> None:
self._line("include %s" % path)
Expand Down Expand Up @@ -225,9 +218,11 @@ def serialize_path(input: Optional[NinjaPath]) -> str:


def serialize_paths(input: Optional[NinjaPathOrPaths]) -> List[str]:
if isinstance(input, list):
if isinstance(input, str) or isinstance(input, Path):
return [serialize_path(input)] if input else []
elif input is not None:
return [serialize_path(path) for path in input if path]
return [serialize_path(input)] if input else []
return []


def escape(string: str) -> str:
Expand Down
Loading

0 comments on commit f260b6e

Please sign in to comment.