summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-01-31 14:02:03 +0100
committerskal <pascal.massimino@gmail.com>2026-01-31 14:02:03 +0100
commit50d4bd635a5fd8aaf6f19b713c10bbb445301b97 (patch)
tree185d5e9154cee24de88419ce87cf665601b4166f /scripts
parente3daca37aa134a6885c8ae5c508c3d7f7bfc600a (diff)
Finalize Windows port with size analysis reporting and updated docs
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/analyze_win_bloat.sh18
-rwxr-xr-xscripts/crunch_win.sh36
2 files changed, 54 insertions, 0 deletions
diff --git a/scripts/analyze_win_bloat.sh b/scripts/analyze_win_bloat.sh
new file mode 100755
index 0000000..6710558
--- /dev/null
+++ b/scripts/analyze_win_bloat.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+set -e
+
+EXE="build_win/demo64k.exe"
+
+if [ ! -f "$EXE" ]; then
+ echo "Error: $EXE not found. Run scripts/build_win.sh first."
+ exit 1
+fi
+
+echo "Analyzing $EXE..."
+echo "------------------------------------------------"
+echo "Sections:"
+x86_64-w64-mingw32-objdump -h "$EXE"
+echo "------------------------------------------------"
+echo "Top 20 Symbols by Size:"
+x86_64-w64-mingw32-nm --print-size --size-sort --radix=d "$EXE" | tail -n 20
+echo "------------------------------------------------"
diff --git a/scripts/crunch_win.sh b/scripts/crunch_win.sh
new file mode 100755
index 0000000..59d7889
--- /dev/null
+++ b/scripts/crunch_win.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+set -e
+
+INPUT_EXE="build_win/demo64k.exe"
+STRIPPED_EXE="build_win/demo64k_stripped.exe"
+PACKED_EXE="build_win/demo64k_packed.exe"
+
+if [ ! -f "$INPUT_EXE" ]; then
+ echo "Error: $INPUT_EXE not found. Run scripts/build_win.sh first."
+ exit 1
+fi
+
+echo "Crunching $INPUT_EXE..."
+
+# 1. Strip debug symbols and sections
+cp "$INPUT_EXE" "$STRIPPED_EXE"
+x86_64-w64-mingw32-strip -s "$STRIPPED_EXE"
+x86_64-w64-mingw32-strip --strip-unneeded "$STRIPPED_EXE"
+x86_64-w64-mingw32-strip -R .comment -R .gnu.version "$STRIPPED_EXE"
+
+# 2. Pack with UPX
+# --best: max compression
+# --lzma: use lzma algorithm (usually smallest)
+# --filter=...: filters for x86 code
+cp "$STRIPPED_EXE" "$PACKED_EXE"
+upx --best --lzma --overlay=strip "$PACKED_EXE"
+
+echo "------------------------------------------------"
+echo "Size Report:"
+ls -lh "$INPUT_EXE"
+ls -lh "$STRIPPED_EXE"
+ls -lh "$PACKED_EXE"
+echo "------------------------------------------------"
+echo "Top 10 Largest Symbols (from unstripped):"
+x86_64-w64-mingw32-nm --print-size --size-sort --radix=d "$INPUT_EXE" | tail -n 10
+echo "------------------------------------------------"