#!/usr/bin/env bash
set -euo pipefail

EXPECTED_PLEXUS_VERSION="${PLEXUS_EXPECTED_VERSION:-0.3.1}"
DEFAULT_RELEASE_SRC="/tmp/plexus-v${EXPECTED_PLEXUS_VERSION}"
DEFAULT_CARGO_SRC="$HOME/.cargo/git/checkouts/plexus-d6bfabeb0c3b36c5/88be52e"
if [[ -z "${PLEXUS_SRC:-}" ]]; then
  if [[ -d "$DEFAULT_RELEASE_SRC" ]]; then
    PLEXUS_SRC="$DEFAULT_RELEASE_SRC"
  else
    PLEXUS_SRC="$DEFAULT_CARGO_SRC"
  fi
else
  PLEXUS_SRC="$PLEXUS_SRC"
fi
PLEXUS_BUILD_DIR="${PLEXUS_BUILD_DIR:-/tmp/plexus-build-v${EXPECTED_PLEXUS_VERSION}}"
LLVM_PREFIX="${PLEXUS_LLVM_PREFIX:-/opt/homebrew/opt/llvm@21}"
VERSION_FILE="$PLEXUS_SRC/rust/plexus-serde/Cargo.toml"

if [[ ! -f "$VERSION_FILE" ]]; then
  echo "missing Plexus source version file: $VERSION_FILE" >&2
  exit 1
fi

ACTUAL_PLEXUS_VERSION="$(
  awk -F '"' '/^version = / { print $2; exit }' "$VERSION_FILE"
)"
if [[ "$ACTUAL_PLEXUS_VERSION" != "$EXPECTED_PLEXUS_VERSION" ]]; then
  cat >&2 <<EOF
Plexus source version mismatch.
  expected: $EXPECTED_PLEXUS_VERSION
  found:    $ACTUAL_PLEXUS_VERSION
  source:   $PLEXUS_SRC

Clone the matching release and rerun, for example:
  git clone --branch v$EXPECTED_PLEXUS_VERSION --depth 1 https://github.com/robdberry/plexus.git /tmp/plexus-v$EXPECTED_PLEXUS_VERSION
  PLEXUS_SRC=/tmp/plexus-v$EXPECTED_PLEXUS_VERSION PLEXUS_BUILD_DIR=/tmp/plexus-build-v$EXPECTED_PLEXUS_VERSION bash scripts/build_plexus_mlir.sh
EOF
  exit 1
fi

PATH="$LLVM_PREFIX/bin:$PATH"

cmake -S "$PLEXUS_SRC" -B "$PLEXUS_BUILD_DIR" -G Ninja -DMLIR_DIR="$LLVM_PREFIX/lib/cmake/mlir"
cmake --build "$PLEXUS_BUILD_DIR" -j4 --target MLIRPlexus MLIRPlexusCAPI MLIRPlexusTransforms

echo "PLEXUS_SRC=$PLEXUS_SRC"
echo "PLEXUS_BUILD_DIR=$PLEXUS_BUILD_DIR"
echo "MLIR_SYS_210_PREFIX=$LLVM_PREFIX"
