75 lines
2.8 KiB
Bash
Executable file
75 lines
2.8 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# AI note: this script was generated with AI, and hand-edited
|
|
|
|
set -e # Exit on error
|
|
|
|
PROJECT_NAME=$(grep name Cargo.toml | head -n 1 | cut -d '"' -f 2 || echo "rust-project")
|
|
VERSION=$(grep version Cargo.toml | head -n 1 | cut -d '"' -f 2 || echo "0.1.0")
|
|
OUTPUT_DIR="dist"
|
|
WINDOWS_TARGET="x86_64-pc-windows-gnu"
|
|
MACOS_TARGET="aarch64-apple-darwin"
|
|
|
|
mkdir -p "$OUTPUT_DIR"
|
|
|
|
echo "Building $PROJECT_NAME v$VERSION for multiple platforms..."
|
|
|
|
if ! command -v rustup &> /dev/null; then
|
|
echo "Error: rustup is not installed. Please install Rust toolchain first."
|
|
exit 1
|
|
fi
|
|
|
|
rustup target add "$WINDOWS_TARGET" || echo "Windows target already installed"
|
|
rustup target add "$MACOS_TARGET" || echo "macOS target already installed"
|
|
|
|
echo "Building for Windows (x86_64)..."
|
|
cargo build --release --target="$WINDOWS_TARGET"
|
|
WINDOWS_BIN_PATH="target/$WINDOWS_TARGET/release/$PROJECT_NAME.exe"
|
|
|
|
echo "Building for macOS (ARM64)..."
|
|
cargo build --release --target="$MACOS_TARGET"
|
|
MACOS_BIN_PATH="target/$MACOS_TARGET/release/$PROJECT_NAME"
|
|
|
|
if [ -f "$WINDOWS_BIN_PATH" ]; then
|
|
echo "Packaging Windows binary..."
|
|
WINDOWS_PACKAGE="$OUTPUT_DIR/${PROJECT_NAME}_${VERSION}_windows_x86_64"
|
|
mkdir -p "$WINDOWS_PACKAGE"
|
|
cp "$WINDOWS_BIN_PATH" "$WINDOWS_PACKAGE/"
|
|
cp README.md UNLICENSE* "$WINDOWS_PACKAGE/" 2>/dev/null || true
|
|
|
|
echo "Creating Windows zip archive..."
|
|
(cd "$OUTPUT_DIR" && zip -r "${PROJECT_NAME}_${VERSION}_windows_x86_64.zip" "$(basename "$WINDOWS_PACKAGE")")
|
|
|
|
echo "Creating Windows tar.gz archive..."
|
|
(cd "$OUTPUT_DIR" && tar -czf "${PROJECT_NAME}_${VERSION}_windows_x86_64.tar.gz" "$(basename "$WINDOWS_PACKAGE")")
|
|
|
|
rm -rf "$WINDOWS_PACKAGE"
|
|
echo "Windows packages created:
|
|
- $OUTPUT_DIR/${PROJECT_NAME}_${VERSION}_windows_x86_64.zip
|
|
- $OUTPUT_DIR/${PROJECT_NAME}_${VERSION}_windows_x86_64.tar.gz"
|
|
else
|
|
echo "Warning: Windows binary not found at $WINDOWS_BIN_PATH"
|
|
fi
|
|
|
|
if [ -f "$MACOS_BIN_PATH" ]; then
|
|
echo "Packaging macOS binary..."
|
|
MACOS_PACKAGE="$OUTPUT_DIR/${PROJECT_NAME}_${VERSION}_macos_arm64"
|
|
mkdir -p "$MACOS_PACKAGE"
|
|
cp "$MACOS_BIN_PATH" "$MACOS_PACKAGE/"
|
|
cp README.md UNLICENSE* "$MACOS_PACKAGE/" 2>/dev/null || true
|
|
|
|
echo "Creating macOS zip archive..."
|
|
(cd "$OUTPUT_DIR" && zip -r "${PROJECT_NAME}_${VERSION}_macos_arm64.zip" "$(basename "$MACOS_PACKAGE")")
|
|
|
|
echo "Creating macOS tar.gz archive..."
|
|
(cd "$OUTPUT_DIR" && tar -czf "${PROJECT_NAME}_${VERSION}_macos_arm64.tar.gz" "$(basename "$MACOS_PACKAGE")")
|
|
|
|
rm -rf "$MACOS_PACKAGE"
|
|
echo "macOS packages created:
|
|
- $OUTPUT_DIR/${PROJECT_NAME}_${VERSION}_macos_arm64.zip
|
|
- $OUTPUT_DIR/${PROJECT_NAME}_${VERSION}_macos_arm64.tar.gz"
|
|
else
|
|
echo "Warning: macOS binary not found at $MACOS_BIN_PATH"
|
|
fi
|
|
|
|
echo "Build and packaging complete! Check the $OUTPUT_DIR directory for the packaged binaries."
|