summaryrefslogtreecommitdiff
path: root/tools/asm-processor/build.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/asm-processor/build.py')
-rw-r--r--tools/asm-processor/build.py77
1 files changed, 54 insertions, 23 deletions
diff --git a/tools/asm-processor/build.py b/tools/asm-processor/build.py
index efbaade..79583e2 100644
--- a/tools/asm-processor/build.py
+++ b/tools/asm-processor/build.py
@@ -7,35 +7,68 @@ 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"
+# Preprocessed files are temporary. For debugging purposes, you can set this
+# variable or pass --keep-preprocessed path/to/dir/ to keep a copy.
+keep_output_dir = None
+# keep_output_dir = Path("./asm_processor_preprocessed")
+progname = sys.argv[0]
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]
+i = 0
+asmproc_flags = []
+while i < len(all_args):
+ arg = all_args[i]
+ if arg == "--":
+ i += 1
+ break
+ if not arg.startswith("-"):
+ break
+ i += 1
+ asmproc_flags.append(arg)
+ if arg in ("--input-enc", "--output-enc", "--asm-prelude", "--convert-statics", "--keep-preprocessed", "--no-dep-file") and i < len(all_args):
+ asmproc_flags.append(all_args[i])
+ i += 1
+
+sep0 = i
+try:
+ sep1 = all_args.index("--", sep0)
+ sep2 = all_args.index("--", sep1 + 1)
+except ValueError:
+ print(f"Usage: {progname} [options] <compiler...> -- <assembler...> -- <compiler flags...>")
+ sys.exit(1)
+compiler = all_args[sep0:sep1]
assembler_args = all_args[sep1 + 1 : sep2]
+compile_args = all_args[sep2 + 1 :]
+
assembler_sh = " ".join(shlex.quote(x) for x in assembler_args)
-compile_args = all_args[sep2 + 1 :]
+def fail_parse(msg):
+ print(f"Failed to parse compiler flags: {msg}")
+ sys.exit(1)
-in_file = Path(compile_args[-1])
-del compile_args[-1]
+try:
+ out_ind = compile_args.index("-o")
+except ValueError:
+ fail_parse("missing -o argument")
+
+try:
+ out_file = Path(compile_args[out_ind + 1])
+except IndexError:
+ fail_parse("missing argument after -o")
-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]
+try:
+ in_file = Path(compile_args[-1])
+except IndexError:
+ fail_parse("missing input file argument")
+
+del compile_args[-1]
+
in_dir = in_file.resolve().parent
opt_flags = [
@@ -59,13 +92,13 @@ with tempfile.TemporaryDirectory(prefix="asm_processor") as 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)
+ with preprocessed_path.open("wb") as outfile:
+ functions, deps, keep_output_dir2 = asm_processor.run(asmproc_flags, outfile=outfile)
- if keep_preprocessed_files:
+ keep_output_dir = keep_output_dir or keep_output_dir2
+ if keep_output_dir:
import shutil
- keep_output_dir = Path("./asm_processor_preprocessed")
keep_output_dir.mkdir(parents=True, exist_ok=True)
shutil.copy(
@@ -95,14 +128,12 @@ with tempfile.TemporaryDirectory(prefix="asm_processor") as tmpdirname:
str(out_file),
"--assembler",
assembler_sh,
- "--asm-prelude",
- str(asm_prelude_path),
],
functions=functions,
)
deps_file = out_file.with_suffix(".asmproc.d")
- if deps:
+ if deps and "--no-dep-file" not in asmproc_flags:
with deps_file.open("w") as f:
f.write(str(out_file) + ": " + " \\\n ".join(deps) + "\n")
for dep in deps: