about summary refs log tree commit diff stats
path: root/tools/treeshake_all
diff options
context:
space:
mode:
Diffstat (limited to 'tools/treeshake_all')
-rwxr-xr-xtools/treeshake_all44
1 files changed, 44 insertions, 0 deletions
diff --git a/tools/treeshake_all b/tools/treeshake_all
new file mode 100755
index 00000000..614b106a
--- /dev/null
+++ b/tools/treeshake_all
@@ -0,0 +1,44 @@
+#!/bin/sh
+# Build minimal-size versions of all apps.
+# Hacky; only intended for some stats at the moment.
+
+set -e
+
+[ ! -f tools/treeshake ] && {
+  echo building tools/treeshake
+  c++ -g -O3 tools/treeshake.cc -o tools/treeshake
+}
+
+export OS=${OS:-linux}
+
+echo "== deleting dead code"
+for app in factorial crenshaw2-1 crenshaw2-1b handle hex survey pack dquotes assort tests sigils calls braces
+do
+  echo "- $app"
+  tools/treeshake_translate init.$OS 0*.subx apps/subx-params.subx apps/$app.subx
+  mv a.in apps/$app.in
+  mv a.treeshake apps/$app.treeshake
+  echo "LoC $(cat apps/$app.subx |wc -l) => $(grep -vh '^\s*$\|^\s*#' apps/$app.subx |tools/treeshake |wc -l)"
+  echo "LoC including common libraries: $(cat apps/$app.in |wc -l) => $(cat apps/$app.treeshake |wc -l)"
+  mv a.elf apps/$app.treeshake.bin
+  echo "binary size: $(ls -lh apps/$app |column 5) => $(ls -lh apps/$app.treeshake.bin |column 5)"
+done
+
+echo "== testing treeshaken binaries"
+for app in factorial crenshaw2-1 crenshaw2-1b
+do
+  echo $app
+  tools/test_treeshake_translate init.$OS 0*.subx apps/$app.subx
+  diff apps/$app a.elf
+done
+
+for app in hex survey pack assort dquotes tests sigils calls braces
+do
+  echo $app
+  tools/test_treeshake_translate init.$OS 0*.subx apps/subx-params.subx apps/$app.subx
+  diff apps/$app a.elf
+done
+
+echo mu.subx
+tools/test_treeshake_translate init.$OS 0*.subx apps/mu.subx
+diff apps/mu a.elf