#!/bin/sh
# Detect platform-specific compiler flags for robscale

# Detect -fopenmp-simd support
OPENMP_SIMD_FLAG=""
OPENMP_SIMD_DEFINE=""
echo "int main(){return 0;}" > conftest.cpp
if ${CXX:-c++} -fopenmp-simd -c conftest.cpp -o conftest.o 2>/dev/null; then
  OPENMP_SIMD_FLAG="-fopenmp-simd"
  OPENMP_SIMD_DEFINE="-DROBSCALE_HAS_OMP_SIMD"
  echo "  -fopenmp-simd supported"
else
  echo "  -fopenmp-simd not supported, skipping"
fi
rm -f conftest.cpp conftest.o

HAS_SLEEF="no"

# Skip SLEEF on macOS as Accelerate is faster and preferred
if [ "$(uname -s)" != "Darwin" ]; then
  # Check standard paths first
  for prefix in /usr /usr/local /opt/homebrew; do
    if [ -f "${prefix}/include/sleef.h" ]; then
      SLEEF_CFLAGS="-I${prefix}/include -DROBSCALE_HAS_SLEEF"
      SLEEF_LIBS="-L${prefix}/lib -lsleef"
      HAS_SLEEF="yes"
      break
    fi
  done

  # Fallback to pkg-config if not found in standard paths
  if [ "${HAS_SLEEF}" = "no" ]; then
    if pkg-config --exists sleef 2>/dev/null; then
      SLEEF_CFLAGS="$(pkg-config --cflags sleef) -DROBSCALE_HAS_SLEEF"
      SLEEF_LIBS=$(pkg-config --libs sleef)
      HAS_SLEEF="yes"
    fi
  fi
fi

if [ "${HAS_SLEEF}" = "yes" ]; then
  echo "  SLEEF detected"
else
  echo "  SLEEF not detected, falling back to Accelerate/OpenMP"
fi

# Detect macOS Accelerate framework (vForce for vectorized tanh)
ACCELERATE_LIBS=""
if [ "$(uname -s)" = "Darwin" ]; then
  ACCELERATE_LIBS="-framework Accelerate"
  echo "  macOS detected, linking Accelerate framework"
fi

# Force recompilation when flags change (make doesn't track PKG_CXXFLAGS)
rm -f src/*.o src/robscale.so

# Generate Makevars from template
sed -e "s|@OPENMP_SIMD_FLAG@|${OPENMP_SIMD_FLAG}|" \
    -e "s|@OPENMP_SIMD_DEFINE@|${OPENMP_SIMD_DEFINE}|" \
    -e "s|@ACCELERATE_LIBS@|${ACCELERATE_LIBS}|" \
    -e "s|@SLEEF_CFLAGS@|${SLEEF_CFLAGS}|" \
    -e "s|@SLEEF_LIBS@|${SLEEF_LIBS}|" \
    src/Makevars.in > src/Makevars

echo "  Generated src/Makevars"
