about summary refs log tree commit diff stats
path: root/translate_subx
diff options
context:
space:
mode:
Diffstat (limited to 'translate_subx')
-rwxr-xr-xtranslate_subx53
1 files changed, 53 insertions, 0 deletions
diff --git a/translate_subx b/translate_subx
new file mode 100755
index 00000000..ba36986a
--- /dev/null
+++ b/translate_subx
@@ -0,0 +1,53 @@
+#!/bin/sh
+# Translate SubX by running the self-hosted translator natively on Linux.
+#
+# Possible knobs:
+#   Whether to run a phase natively or in emulated mode.
+#     This script is for running natively.
+#   Whether to stop after a phase.
+#     This script assumes inputs are already working so doesn't easily show
+#     which phase an error happens in.
+#   Whether to trace a phase. Whether to always trace or rerun with tracing
+#   enabled after an error.
+#     Leave tracing to other scripts. We save intermediate files so it's easy
+#     to rerun a single phase afterwards.
+#   Whether to run a phase with debug information. (Need to juggle multiple
+#   sets of debug files.)
+#     Again, that's for subsequent scripts.
+
+set -e
+
+./build
+
+cat $*          |apps/braces   > a.braces
+
+cat a.braces    |apps/calls    > a.calls
+
+cat a.calls     |apps/sigils   > a.sigils
+
+cat a.sigils    |apps/tests    > a.tests
+
+cat a.tests     |apps/assort   > a.assort
+
+cat a.assort    |apps/dquotes  > a.dquotes
+
+# A little hack. We want translate_subx to always emit identical binaries to
+# the C++ translator. The C++ translator assorts segments before it processes
+# string literals, so we follow the same order above.
+#
+# However, dquotes currently emits a separate data segment for string literals.
+# So we need to run assort a second time to clean up after it.
+#
+# Potential solutions:
+#   a) modify C++ translator to process string literals before assorting.
+#   b) clean up dquotes to assume assorted segments, and append to the
+#   existing data segment.
+cat a.dquotes   |apps/assort   > a.assort2
+
+cat a.assort2   |apps/pack     > a.pack
+
+cat a.pack      |apps/survey   > a.survey
+
+cat a.survey    |apps/hex      > a.elf
+
+chmod +x a.elf