66 lines
No EOL
2.7 KiB
Bash
Executable file
66 lines
No EOL
2.7 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Compact Build Script for fps-go-brr
|
|
# Based on techniques from: https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/
|
|
#
|
|
# This script builds a space-optimized version of the fps-go-brr binary using:
|
|
# 1. Go linker flags to strip debugging information (-s -w)
|
|
# 2. UPX compression (if available)
|
|
|
|
set -e
|
|
|
|
BINARY_NAME="fps-go-brr"
|
|
COMPACT_BINARY_NAME="fps-go-brr-compact"
|
|
|
|
echo "Building compact version of $BINARY_NAME..."
|
|
|
|
# Step 1: Build with linker flags to strip debugging info
|
|
echo "Step 1: Building with -ldflags='-s -w' to strip debugging information..."
|
|
go build -ldflags="-s -w" -o "$COMPACT_BINARY_NAME" .
|
|
|
|
# Get initial size
|
|
INITIAL_SIZE=$(stat -c%s "$COMPACT_BINARY_NAME" 2>/dev/null || stat -f%z "$COMPACT_BINARY_NAME" 2>/dev/null || echo "unknown")
|
|
echo "Binary size after stripping: $INITIAL_SIZE bytes"
|
|
|
|
# Step 2: Apply UPX compression if available
|
|
if command -v upx >/dev/null 2>&1; then
|
|
echo "Step 2: Applying UPX compression with --brute flag..."
|
|
upx --brute "$COMPACT_BINARY_NAME"
|
|
|
|
# Get final size
|
|
FINAL_SIZE=$(stat -c%s "$COMPACT_BINARY_NAME" 2>/dev/null || stat -f%z "$COMPACT_BINARY_NAME" 2>/dev/null || echo "unknown")
|
|
echo "Final binary size after UPX compression: $FINAL_SIZE bytes"
|
|
|
|
if [ "$INITIAL_SIZE" != "unknown" ] && [ "$FINAL_SIZE" != "unknown" ]; then
|
|
REDUCTION=$(echo "scale=1; (1 - $FINAL_SIZE / $INITIAL_SIZE) * 100" | bc -l 2>/dev/null || echo "N/A")
|
|
echo "Total size reduction: ~${REDUCTION}%"
|
|
fi
|
|
else
|
|
echo "Step 2: UPX not found - skipping compression"
|
|
echo "To install UPX:"
|
|
echo " - Ubuntu/Debian: sudo apt install upx-ucl"
|
|
echo " - macOS: brew install upx"
|
|
echo " - Arch Linux: sudo pacman -S upx"
|
|
echo " - Or download from: https://upx.github.io/"
|
|
fi
|
|
|
|
echo ""
|
|
echo "Compact build complete: $COMPACT_BINARY_NAME"
|
|
echo ""
|
|
echo "Note: The compact binary may have slightly slower startup time due to UPX decompression."
|
|
echo "For production use, consider whether the size savings are worth the startup overhead."
|
|
|
|
# Make the script executable
|
|
chmod +x "$COMPACT_BINARY_NAME"
|
|
|
|
# Compare with regular build if it exists
|
|
if [ -f "$BINARY_NAME" ]; then
|
|
REGULAR_SIZE=$(stat -c%s "$BINARY_NAME" 2>/dev/null || stat -f%z "$BINARY_NAME" 2>/dev/null || echo "unknown")
|
|
if [ "$REGULAR_SIZE" != "unknown" ] && [ "$FINAL_SIZE" != "unknown" ]; then
|
|
TOTAL_REDUCTION=$(echo "scale=1; (1 - $FINAL_SIZE / $REGULAR_SIZE) * 100" | bc -l 2>/dev/null || echo "N/A")
|
|
echo "Comparison with regular build:"
|
|
echo " Regular build: $REGULAR_SIZE bytes"
|
|
echo " Compact build: $FINAL_SIZE bytes"
|
|
echo " Total reduction: ~${TOTAL_REDUCTION}%"
|
|
fi
|
|
fi |