mirror of
https://github.com/armbian/imager.git
synced 2026-01-06 12:31:28 -08:00
166 lines
5.0 KiB
Bash
Executable File
166 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# Quick Linux build script - builds via Docker
|
|
cd "$(dirname "$0")/.."
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
# Parse arguments
|
|
BUILD_MODE="production"
|
|
BUILD_ARCH="all" # all, x64, arm64
|
|
|
|
CLEAN_BUILD=false
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--dev) BUILD_MODE="development"; shift ;;
|
|
--prod) BUILD_MODE="production"; shift ;;
|
|
--x64) BUILD_ARCH="x64"; shift ;;
|
|
--arm64) BUILD_ARCH="arm64"; shift ;;
|
|
--clean) CLEAN_BUILD=true; shift ;;
|
|
*)
|
|
echo "Usage: $0 [--dev] [--prod] [--x64] [--arm64] [--clean]"
|
|
echo ""
|
|
echo " Build mode:"
|
|
echo " --dev Development build (debug symbols, context menu enabled)"
|
|
echo " --prod Production build (optimized) [default]"
|
|
echo ""
|
|
echo " Architecture:"
|
|
echo " --x64 Build only x86_64"
|
|
echo " --arm64 Build only ARM64"
|
|
echo " (default: build both)"
|
|
echo ""
|
|
echo " Options:"
|
|
echo " --clean Clean build artifacts before building"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Clean if requested
|
|
if [ "$CLEAN_BUILD" = true ]; then
|
|
echo -e "${YELLOW}Cleaning build artifacts...${NC}"
|
|
rm -rf src-tauri/target
|
|
rm -rf dist
|
|
rm -rf releases
|
|
fi
|
|
|
|
# Check Docker
|
|
if ! command -v docker &> /dev/null; then
|
|
echo -e "${RED}Error: Docker not found. Install Docker first.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Set build flags
|
|
if [ "$BUILD_MODE" = "development" ]; then
|
|
echo -e "${YELLOW}Building in DEVELOPMENT mode${NC}"
|
|
TAURI_FLAGS="--debug"
|
|
VITE_MODE="development"
|
|
else
|
|
echo -e "${GREEN}Building in PRODUCTION mode${NC}"
|
|
TAURI_FLAGS=""
|
|
VITE_MODE="production"
|
|
fi
|
|
|
|
# Output directory
|
|
OUTPUT_DIR="./releases"
|
|
mkdir -p "$OUTPUT_DIR"
|
|
|
|
# Build x64
|
|
build_x64() {
|
|
echo -e "\n${GREEN}========================================${NC}"
|
|
echo -e "${GREEN} Building Linux x86_64${NC}"
|
|
echo -e "${GREEN}========================================${NC}"
|
|
|
|
docker run --rm -v "$(pwd)":/app -w /app \
|
|
--platform linux/amd64 \
|
|
rust:bookworm \
|
|
bash -c "
|
|
apt-get update && apt-get install -y \
|
|
libwebkit2gtk-4.1-dev libayatana-appindicator3-dev \
|
|
librsvg2-dev patchelf libssl-dev libgtk-3-dev \
|
|
squashfs-tools pkg-config nodejs npm && \
|
|
npm ci && \
|
|
npm run build -- --mode $VITE_MODE && \
|
|
cargo install tauri-cli --version '^2' --locked && \
|
|
cargo tauri build $TAURI_FLAGS --bundles deb || true
|
|
"
|
|
|
|
# Copy artifacts
|
|
for f in src-tauri/target/release/bundle/deb/*.deb; do
|
|
if [ -f "$f" ]; then
|
|
BASENAME=$(basename "$f" .deb)
|
|
cp -v "$f" "$OUTPUT_DIR/${BASENAME}_linux_x64.deb"
|
|
fi
|
|
done
|
|
for f in src-tauri/target/release/bundle/appimage/*.AppImage; do
|
|
if [ -f "$f" ]; then
|
|
BASENAME=$(basename "$f" .AppImage)
|
|
cp -v "$f" "$OUTPUT_DIR/${BASENAME}_linux_x64.AppImage"
|
|
fi
|
|
done
|
|
|
|
echo -e "${GREEN}Linux x64 build complete!${NC}"
|
|
}
|
|
|
|
# Build ARM64
|
|
build_arm64() {
|
|
echo -e "\n${GREEN}========================================${NC}"
|
|
echo -e "${GREEN} Building Linux ARM64${NC}"
|
|
echo -e "${GREEN}========================================${NC}"
|
|
|
|
docker run --rm -v "$(pwd)":/app -w /app \
|
|
--platform linux/arm64 \
|
|
rust:bookworm \
|
|
bash -c "
|
|
apt-get update && apt-get install -y \
|
|
libwebkit2gtk-4.1-dev libayatana-appindicator3-dev \
|
|
librsvg2-dev patchelf libssl-dev libgtk-3-dev \
|
|
squashfs-tools pkg-config nodejs npm && \
|
|
npm ci && \
|
|
npm run build -- --mode $VITE_MODE && \
|
|
cargo install tauri-cli --version '^2' --locked && \
|
|
cargo tauri build $TAURI_FLAGS --bundles deb || true
|
|
"
|
|
|
|
# Copy artifacts
|
|
for f in src-tauri/target/release/bundle/deb/*.deb; do
|
|
if [ -f "$f" ]; then
|
|
BASENAME=$(basename "$f" .deb)
|
|
cp -v "$f" "$OUTPUT_DIR/${BASENAME}_linux_arm64.deb"
|
|
fi
|
|
done
|
|
for f in src-tauri/target/release/bundle/appimage/*.AppImage; do
|
|
if [ -f "$f" ]; then
|
|
BASENAME=$(basename "$f" .AppImage)
|
|
cp -v "$f" "$OUTPUT_DIR/${BASENAME}_linux_arm64.AppImage"
|
|
fi
|
|
done
|
|
|
|
echo -e "${GREEN}Linux ARM64 build complete!${NC}"
|
|
}
|
|
|
|
# Run builds based on architecture selection
|
|
case $BUILD_ARCH in
|
|
x64) build_x64 ;;
|
|
arm64) build_arm64 ;;
|
|
all)
|
|
build_x64
|
|
# Clean between builds
|
|
rm -rf src-tauri/target/release/bundle
|
|
build_arm64
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo -e "${GREEN} Linux Build Complete!${NC}"
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo -e "Output directory: $OUTPUT_DIR"
|
|
ls -la "$OUTPUT_DIR"/*.deb "$OUTPUT_DIR"/*.AppImage 2>/dev/null || true
|