#!/bin/bash set -e # Build script for memora-cli-rust # This script builds optimized binaries for multiple platforms # Source cargo environment if it exists if [ -f "$HOME/.cargo/env" ]; then source "$HOME/.cargo/env" fi # Add cargo to PATH if not already there export PATH="$HOME/.cargo/bin:$PATH" # Check if cargo is available if ! command -v cargo &> /dev/null; then echo "Error: Cargo not found. Please install Rust first:" echo " curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh" exit 1 fi echo "Building Memora CLI for multiple platforms..." # Ensure we're in the right directory cd "$(dirname "$0")" # Create dist directory if it doesn't exist mkdir -p dist # Get version from Cargo.toml VERSION=$(grep '^version' Cargo.toml | head -1 | cut -d'"' -f2) echo "Version: $VERSION" # Function to build for a target build_target() { local target=$1 local output_name=$2 echo "" echo "Building for $target..." # Check if target is installed, install if not if ! rustup target list | grep -q "$target (installed)"; then echo "Installing target $target..." rustup target add "$target" fi # Build cargo build --release --target "$target" # Copy to dist if [[ "$target" == *"windows"* ]]; then cp "target/$target/release/memora.exe" "dist/$output_name.exe" echo "Created: dist/$output_name.exe" else cp "target/$target/release/memora" "dist/$output_name" chmod +x "dist/$output_name" echo "Created: dist/$output_name" fi } # Detect current platform OS=$(uname -s) ARCH=$(uname -m) echo "Detected platform: $OS $ARCH" # Build for current platform case "$OS" in Darwin) if [[ "$ARCH" == "arm64" ]]; then echo "Building for macOS ARM64 (Apple Silicon)..." build_target "aarch64-apple-darwin" "memora-macos-arm64" else echo "Building for macOS x86_64 (Intel)..." build_target "x86_64-apple-darwin" "memora-macos-x86_64" fi ;; Linux) if [[ "$ARCH" == "x86_64" ]]; then echo "Building for Linux x86_64..." build_target "x86_64-unknown-linux-gnu" "memora-linux-x86_64" elif [[ "$ARCH" == "aarch64" ]]; then echo "Building for Linux ARM64..." build_target "aarch64-unknown-linux-gnu" "memora-linux-arm64" fi ;; *) echo "Unsupported OS: $OS" exit 1 ;; esac echo "" echo "Build complete! Binaries are in the dist/ directory:" ls -lh dist/ echo "" echo "To build for other platforms, run:" echo " ./build.sh --all"