summaryrefslogtreecommitdiff
path: root/tools/asm-processor/build.py
diff options
context:
space:
mode:
authorAnghelo Carvajal <angheloalf95@gmail.com>2023-03-28 23:42:56 -0300
committerGitHub <noreply@github.com>2023-03-29 03:42:56 +0100
commitd66a21685f45d130f980e8a5ec7b08cfe189e40b (patch)
treef11b3b09dc5772e419fe08d3d0ead4e778def57f /tools/asm-processor/build.py
parent6a5e64cc4c26398cc607bb02cdc12a056ddf42d1 (diff)
Initial repo setup (#1)
* git subrepo clone git@github.com:ethteck/splat.git tools/splat subrepo: subdir: "tools/splat" merged: "4fec014" upstream: origin: "git@github.com:ethteck/splat.git" branch: "master" commit: "4fec014" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * gitignore * decompress_baserom.py * Initial yaml * run flib * more yaml stuff * Builds an uncompressed ROM * setup ido download * git subrepo clone git@github.com:simonlindholm/asm-differ.git tools/asm-differ subrepo: subdir: "tools/asm-differ" merged: "ae40866" upstream: origin: "git@github.com:simonlindholm/asm-differ.git" branch: "main" commit: "ae40866" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * git subrepo clone git@github.com:simonlindholm/asm-processor.git tools/asm-processor subrepo: subdir: "tools/asm-processor" merged: "bbd86ea" upstream: origin: "git@github.com:simonlindholm/asm-processor.git" branch: "main" commit: "bbd86ea" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * git subrepo clone (merge) git@github.com:EllipticEllipsis/fado.git tools/fado subrepo: subdir: "tools/fado" merged: "8d896ee" upstream: origin: "git@github.com:EllipticEllipsis/fado.git" branch: "master" commit: "8d896ee" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * setup ido in makefile * data and rodata * add automatic file splits * bootstrap most symbol_addrs * git subrepo clone --branch=irix git@github.com:hensldm/ultralib.git lib/ultralib subrepo: subdir: "lib/ultralib" merged: "0d1e095" upstream: origin: "git@github.com:hensldm/ultralib.git" branch: "irix" commit: "0d1e095" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * setup ido building * various tooling * git subrepo pull tools/asm-differ subrepo: subdir: "tools/asm-differ" merged: "857b398" upstream: origin: "git@github.com:simonlindholm/asm-differ.git" branch: "main" commit: "857b398" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * Change defines to match IDO * review * newlin * update gitignore * Windows error * D_01000000 * yeet settings.json * yeet * git subrepo clone git@github.com:decompals/ultralib.git lib/ultralib subrepo: subdir: "lib/ultralib" merged: "d03b2a3" upstream: origin: "git@github.com:decompals/ultralib.git" branch: "main" commit: "d03b2a3" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * clangformat and clangtidy * Setup a bunch of headers * bootstrap boot and code functions and variables headers * global.h * update format.py includes * -D_MIPS_SZLONG=32 * format.py: --verbose * Update tools/decompress_baserom.py Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Add libc to global.h * review * yeet saved_regs * yeet headers * yeet _MSC_VER * more header cleanup * add readme licensing note --------- Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>
Diffstat (limited to 'tools/asm-processor/build.py')
-rw-r--r--tools/asm-processor/build.py114
1 files changed, 114 insertions, 0 deletions
diff --git a/tools/asm-processor/build.py b/tools/asm-processor/build.py
new file mode 100644
index 0000000..efbaade
--- /dev/null
+++ b/tools/asm-processor/build.py
@@ -0,0 +1,114 @@
+#!/usr/bin/env python3
+import sys
+from pathlib import Path
+import shlex
+import subprocess
+import tempfile
+import uuid
+import asm_processor
+
+# Boolean for debugging purposes
+# Preprocessed files are temporary, set to True to keep a copy
+keep_preprocessed_files = False
+
+dir_path = Path(__file__).resolve().parent
+asm_prelude_path = dir_path / "prelude.inc"
+
+all_args = sys.argv[1:]
+sep0 = next(index for index, arg in enumerate(all_args) if not arg.startswith("-"))
+sep1 = all_args.index("--")
+sep2 = all_args.index("--", sep1 + 1)
+
+asmproc_flags = all_args[:sep0]
+compiler = all_args[sep0:sep1]
+
+assembler_args = all_args[sep1 + 1 : sep2]
+assembler_sh = " ".join(shlex.quote(x) for x in assembler_args)
+
+
+compile_args = all_args[sep2 + 1 :]
+
+in_file = Path(compile_args[-1])
+del compile_args[-1]
+
+out_ind = compile_args.index("-o")
+out_file = Path(compile_args[out_ind + 1])
+del compile_args[out_ind + 1]
+del compile_args[out_ind]
+
+
+in_dir = in_file.resolve().parent
+opt_flags = [
+ x for x in compile_args if x in {"-g3", "-g", "-O0", "-O1", "-O2", "-framepointer", "-KPIC"}
+]
+if "-mips2" not in compile_args:
+ opt_flags.append("-mips1")
+
+asmproc_flags += opt_flags + [str(in_file)]
+
+# Drop .mdebug and .gptab sections from resulting binaries. This makes
+# resulting .o files much smaller and speeds up builds, but loses line
+# number debug data.
+# asmproc_flags += ["--drop-mdebug-gptab"]
+
+# Convert encoding before compiling.
+# asmproc_flags += ["--input-enc", "utf-8", "--output-enc", "euc-jp"]
+
+with tempfile.TemporaryDirectory(prefix="asm_processor") as tmpdirname:
+ tmpdir_path = Path(tmpdirname)
+ preprocessed_filename = "preprocessed_" + uuid.uuid4().hex + in_file.suffix
+ preprocessed_path = tmpdir_path / preprocessed_filename
+
+ with preprocessed_path.open("wb") as f:
+ functions, deps = asm_processor.run(asmproc_flags, outfile=f)
+
+ if keep_preprocessed_files:
+ import shutil
+
+ keep_output_dir = Path("./asm_processor_preprocessed")
+ keep_output_dir.mkdir(parents=True, exist_ok=True)
+
+ shutil.copy(
+ preprocessed_path,
+ keep_output_dir / (in_file.stem + "_" + preprocessed_filename),
+ )
+
+ compile_cmdline = (
+ compiler
+ + compile_args
+ + ["-I", str(in_dir), "-o", str(out_file), str(preprocessed_path)]
+ )
+
+ try:
+ subprocess.check_call(compile_cmdline)
+ except subprocess.CalledProcessError as e:
+ print("Failed to compile file " + str(in_file) + ". Command line:")
+ print()
+ print(" ".join(shlex.quote(x) for x in compile_cmdline))
+ print()
+ sys.exit(55)
+
+ asm_processor.run(
+ asmproc_flags
+ + [
+ "--post-process",
+ str(out_file),
+ "--assembler",
+ assembler_sh,
+ "--asm-prelude",
+ str(asm_prelude_path),
+ ],
+ functions=functions,
+ )
+
+ deps_file = out_file.with_suffix(".asmproc.d")
+ if deps:
+ with deps_file.open("w") as f:
+ f.write(str(out_file) + ": " + " \\\n ".join(deps) + "\n")
+ for dep in deps:
+ f.write("\n" + dep + ":\n")
+ else:
+ try:
+ deps_file.unlink()
+ except OSError:
+ pass