Newer
Older
cortex-hub / agent-node / scripts / build_binaries.sh
#!/bin/bash
set -e

# This script builds standalone binaries for the Cortex Agent Node
# using Docker Multi-Arch BuildX and PyInstaller.

echo "🏗️ Setting up builder..."
cd "$(dirname "$0")/../.."

# Default to current machine's architecture
ARCH_AMD64=false
ARCH_ARM64=false
BUILD_ALL=false

for arg in "$@"; do
    if [ "$arg" == "--all" ]; then
        BUILD_ALL=true
        ARCH_AMD64=true
        ARCH_ARM64=true
    fi
    if [ "$arg" == "--arch=amd64" ]; then
        ARCH_AMD64=true
    fi
    if [ "$arg" == "--arch=arm64" ]; then
        ARCH_ARM64=true
    fi
done

# If no arch is specified, use current host arch
if [ "$BUILD_ALL" = false ] && [ "$ARCH_AMD64" = false ] && [ "$ARCH_ARM64" = false ]; then
    CURRENT_ARCH=$(uname -m)
    if [ "$CURRENT_ARCH" == "x86_64" ]; then
        ARCH_AMD64=true
        echo "Detected x86_64, building only AMD64 binary..."
    elif [ "$CURRENT_ARCH" == "aarch64" ] || [ "$CURRENT_ARCH" == "arm64" ]; then
        ARCH_ARM64=true
        echo "Detected ARM64, building only ARM64 binary..."
    else
        echo "Unknown architecture $CURRENT_ARCH, building both..."
        ARCH_AMD64=true
        ARCH_ARM64=true
    fi
fi

# Ensure buildx is available
docker buildx create --use --name cortex-builder || true

if [ "$ARCH_AMD64" = true ]; then
    echo "🔨 Building Linux AMD64 Binary..."
    docker buildx build \
      --platform linux/amd64 \
      --build-arg ARCH=amd64 \
      -f agent-node/Dockerfile.binary \
      --output type=local,dest=agent-node/dist/linux_amd64 \
      .
fi

if [ "$ARCH_ARM64" = true ]; then
    echo "🔨 Building Linux ARM64 Binary..."
    docker buildx build \
      --platform linux/arm64 \
      --build-arg ARCH=arm64 \
      -f agent-node/Dockerfile.binary \
      --output type=local,dest=agent-node/dist/linux_arm64 \
      .
fi

echo "✅ Build complete! Binaries are in agent-node/dist/"
chmod +x agent-node/dist/*/cortex-agent || true