init, basic glogg clone
This commit is contained in:
152
cross-compile.sh
Executable file
152
cross-compile.sh
Executable file
@@ -0,0 +1,152 @@
|
||||
#!/bin/bash
|
||||
# Cross-compilation script for building Windows binaries on Linux
|
||||
|
||||
set -e
|
||||
|
||||
echo "RLogg - Cross-Platform Builder (Linux → All Platforms)"
|
||||
echo "======================================================="
|
||||
echo ""
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Create dist directory
|
||||
DIST_DIR="dist"
|
||||
mkdir -p "$DIST_DIR"
|
||||
|
||||
# Check if cross is installed
|
||||
check_cross() {
|
||||
if ! command -v cross &> /dev/null; then
|
||||
echo -e "${YELLOW}Installing 'cross' for cross-compilation...${NC}"
|
||||
cargo install cross --git https://github.com/cross-rs/cross
|
||||
else
|
||||
echo -e "${GREEN}✓ 'cross' is already installed${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Build using cross
|
||||
build_with_cross() {
|
||||
local target=$1
|
||||
local name=$2
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}=== Building for $name ===${NC}"
|
||||
echo -e "${YELLOW}Target: $target${NC}"
|
||||
|
||||
if cross build --release --target "$target"; then
|
||||
echo -e "${GREEN}✓ Build successful for $name${NC}"
|
||||
|
||||
# Copy binary to dist directory
|
||||
if [[ "$target" == *"windows"* ]]; then
|
||||
cp "target/$target/release/rlogg.exe" "$DIST_DIR/rlogg-$name.exe"
|
||||
echo -e "${GREEN}✓ Binary: $DIST_DIR/rlogg-$name.exe${NC}"
|
||||
else
|
||||
cp "target/$target/release/rlogg" "$DIST_DIR/rlogg-$name"
|
||||
strip "$DIST_DIR/rlogg-$name" 2>/dev/null || true
|
||||
echo -e "${GREEN}✓ Binary: $DIST_DIR/rlogg-$name${NC}"
|
||||
fi
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}✗ Build failed for $name${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Build using regular cargo (for native Linux)
|
||||
build_native() {
|
||||
echo ""
|
||||
echo -e "${BLUE}=== Building for Linux (native) ===${NC}"
|
||||
|
||||
if cargo build --release; then
|
||||
echo -e "${GREEN}✓ Build successful for Linux${NC}"
|
||||
cp "target/release/rlogg" "$DIST_DIR/rlogg-linux-x86_64"
|
||||
strip "$DIST_DIR/rlogg-linux-x86_64" 2>/dev/null || true
|
||||
echo -e "${GREEN}✓ Binary: $DIST_DIR/rlogg-linux-x86_64${NC}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}✗ Build failed for Linux${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Main menu
|
||||
show_menu() {
|
||||
echo ""
|
||||
echo "Select targets to build:"
|
||||
echo " 1) Linux x86_64 (native)"
|
||||
echo " 2) Windows x86_64 (cross-compile with MinGW)"
|
||||
echo " 3) Both Linux and Windows"
|
||||
echo " 4) Exit"
|
||||
echo ""
|
||||
read -p "Enter choice [1-4]: " choice
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Parse command line arguments
|
||||
if [ $# -eq 0 ]; then
|
||||
# Interactive mode
|
||||
while true; do
|
||||
show_menu
|
||||
|
||||
case $choice in
|
||||
1)
|
||||
build_native
|
||||
;;
|
||||
2)
|
||||
check_cross
|
||||
build_with_cross "x86_64-pc-windows-gnu" "windows-x86_64"
|
||||
;;
|
||||
3)
|
||||
build_native
|
||||
check_cross
|
||||
build_with_cross "x86_64-pc-windows-gnu" "windows-x86_64"
|
||||
;;
|
||||
4)
|
||||
echo "Exiting..."
|
||||
break
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}Invalid choice${NC}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
else
|
||||
# Command line mode
|
||||
case "$1" in
|
||||
linux)
|
||||
build_native
|
||||
;;
|
||||
windows|win)
|
||||
check_cross
|
||||
build_with_cross "x86_64-pc-windows-gnu" "windows-x86_64"
|
||||
;;
|
||||
all)
|
||||
build_native
|
||||
check_cross
|
||||
build_with_cross "x86_64-pc-windows-gnu" "windows-x86_64"
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 [linux|windows|all]"
|
||||
echo ""
|
||||
echo " linux - Build for Linux (native)"
|
||||
echo " windows - Cross-compile for Windows (MinGW)"
|
||||
echo " all - Build for both platforms"
|
||||
echo ""
|
||||
echo "Or run without arguments for interactive mode"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}=== Build Complete ===${NC}"
|
||||
if [ -d "$DIST_DIR" ] && [ "$(ls -A $DIST_DIR)" ]; then
|
||||
echo "Binaries in '$DIST_DIR':"
|
||||
ls -lh "$DIST_DIR"
|
||||
else
|
||||
echo "No binaries were built"
|
||||
fi
|
||||
Reference in New Issue
Block a user