summaryrefslogtreecommitdiff
path: root/scripts/crunch_demo.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/crunch_demo.sh')
-rwxr-xr-xscripts/crunch_demo.sh40
1 files changed, 31 insertions, 9 deletions
diff --git a/scripts/crunch_demo.sh b/scripts/crunch_demo.sh
index 333faa9..d9c77a4 100755
--- a/scripts/crunch_demo.sh
+++ b/scripts/crunch_demo.sh
@@ -1,23 +1,45 @@
#!/bin/sh
-# Build a size-optimized binary and compress it with UPX.
+# Build a size-optimized binary and compress it.
set -e
-if ! command -v upx >/dev/null 2>&1; then
- echo "Error: upx is not installed or not in PATH."
- echo "Please install it using 'brew install upx' or from https://github.com/upx/upx"
- exit 1
-fi
-
echo "Building stripped binary..."
cmake -S . -B build_strip -DDEMO_STRIP_ALL=ON
cmake --build build_strip
SRC_BIN="build_strip/demo64k"
OUT_BIN="build_strip/demo64k_packed"
+OS_NAME=$(uname -s)
+
+if [ "$OS_NAME" = "Darwin" ]; then
+ echo "macOS detected. Using 'strip' and 'gzexe' (UPX is unreliable on macOS)."
+
+ # Copy original to output to work on it
+ cp "$SRC_BIN" "$OUT_BIN"
+
+ echo "Stripping symbols..."
+ strip -u -r "$OUT_BIN"
+
+ if command -v gzexe >/dev/null 2>&1; then
+ echo "Compressing with gzexe..."
+ gzexe "$OUT_BIN"
+ # gzexe creates a backup file ending in ~, remove it
+ rm -f "$OUT_BIN~"
+ else
+ echo "Warning: gzexe not found, skipping compression."
+ fi
-echo "Compressing with UPX..."
-upx --best --lzma -o "$OUT_BIN" "$SRC_BIN"
+else
+ # Linux / other
+ if ! command -v upx >/dev/null 2>&1; then
+ echo "Error: upx is not installed or not in PATH."
+ echo "Please install it using your package manager."
+ exit 1
+ fi
+
+ echo "Compressing with UPX..."
+ upx --best --lzma -o "$OUT_BIN" "$SRC_BIN"
+fi
echo "Done."
ls -lh "$SRC_BIN" "$OUT_BIN"