#!/usr/bin/env bash
# KateRTX · zero-cost build · ELF engine + ELF term · no Python · no symlinks
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"
cd "$ROOT"
mkdir -p bin out engine/bin engine/spv engine/spvs

echo "=== KateRTX build · zero cost ==="

# 1) RTX fullscreen engine ELF
echo "── krtx-engine (ELF)"
gcc -O2 -D_GNU_SOURCE -o bin/krtx-engine engine/engine.c -lGL -lGLX -lX11 -lm
chmod +x bin/krtx-engine
file bin/krtx-engine
# also engine/bin for --root layout
cp -f bin/krtx-engine engine/bin/engine

# 2) SPV terminal ELF (classic)
echo "── krtx-term (ELF)"
gcc -O2 -o bin/krtx-term src/krtx_term.c -lX11
chmod +x bin/krtx-term
file bin/krtx-term

# 2b) Grok / SpaceXAI API ELF (curl(1) transport · no libcurl-dev)
echo "── krtx-grok (ELF) · xAI Grok API"
gcc -O2 -D_GNU_SOURCE -o bin/krtx-grok src/krtx_grok.c
chmod +x bin/krtx-grok
file bin/krtx-grok

# 3) SPV loader/runner · ONE LULZ
echo "── krtx-spv (ELF) · loader/runner · one lulz"
gcc -O2 -o bin/krtx-spv src/krtx_spv.c -lX11
chmod +x bin/krtx-spv
# single entry name
cp -f bin/krtx-spv bin/krtx
chmod +x bin/krtx
file bin/krtx-spv

# 3b) ZERO2D · 2D zero-cost demo · native GL · detect Wayland/X11/RTX
echo "── krtx-zero2d (ELF) · 2D zero-cost · KateRTX home visual"
gcc -O2 -D_GNU_SOURCE -o bin/krtx-zero2d src/krtx_zero2d.c -lGL -lGLX -lX11 -lm
chmod +x bin/krtx-zero2d
file bin/krtx-zero2d

# 4) compute SPV artifacts if glslang present
if command -v glslangValidator >/dev/null 2>&1; then
  echo "── compute SPVs"
  for f in engine/shaders/*.comp; do
    base=$(basename "$f" .comp)
    glslangValidator -V -S comp -o "engine/spv/${base}.spv" "$f" >/dev/null
    cp -f "$f" "engine/spvs/${base}.comp"
    cp -f "engine/spv/${base}.spv" "engine/spvs/${base}.spv" 2>/dev/null || true
    echo "  SPV $base"
  done
  if [[ -f engine/shaders/raymarch_gl.comp ]]; then
    glslangValidator -V -S comp -o engine/spv/raymarch.spv engine/shaders/raymarch_gl.comp >/dev/null
    cp -f engine/shaders/raymarch_gl.comp engine/spvs/raymarch.comp
    cp -f engine/spv/raymarch.spv engine/spvs/raymarch.spv
  fi
else
  echo "WARN glslangValidator missing · keeping any copied .spv"
fi

# 5) launcher scripts (thin · call ELFs)
cat > bin/launch-rtx <<EOF
#!/usr/bin/env bash
# RTX fullscreen · KateRTX ELF · no host Konsole
ROOT="\$(cd "\$(dirname "\$0")/.." && pwd)"
export KATERTX_ROOT="\$ROOT"
export DISPLAY="\${DISPLAY:-:0}"
export __GLX_VENDOR_LIBRARY_NAME="\${__GLX_VENDOR_LIBRARY_NAME:-nvidia}"
exec "\$ROOT/bin/krtx-engine" --root "\$ROOT/engine" --spvs "\$ROOT/engine/spvs"
EOF
cat > bin/launch-term <<EOF
#!/usr/bin/env bash
# SPV terminal ELF · KateRTX · no Konsole
ROOT="\$(cd "\$(dirname "\$0")/.." && pwd)"
export KATERTX_ROOT="\$ROOT"
export DISPLAY="\${DISPLAY:-:0}"
exec "\$ROOT/bin/krtx-term"
EOF
cat > bin/launch-spv <<EOF
#!/usr/bin/env bash
# SPV loader/runner · the one lulz
ROOT="\$(cd "\$(dirname "\$0")/.." && pwd)"
export KATERTX_ROOT="\$ROOT"
export DISPLAY="\${DISPLAY:-:0}"
export __GLX_VENDOR_LIBRARY_NAME="\${__GLX_VENDOR_LIBRARY_NAME:-nvidia}"
exec "\$ROOT/bin/krtx-spv" "\$@"
EOF
cat > bin/launch <<EOF
#!/usr/bin/env bash
# ONE LULZ · SPV loader/runner (engine + grin + console)
ROOT="\$(cd "\$(dirname "\$0")/.." && pwd)"
export KATERTX_ROOT="\$ROOT"
export DISPLAY="\${DISPLAY:-:0}"
export __GLX_VENDOR_LIBRARY_NAME="\${__GLX_VENDOR_LIBRARY_NAME:-nvidia}"
exec "\$ROOT/bin/krtx-spv" one
EOF
cat > bin/launch-zero2d <<EOF
#!/usr/bin/env bash
# ZERO2D · KateRTX home visual · native GL window · no host browser
ROOT="\$(cd "\$(dirname "\$0")/.." && pwd)"
export KATERTX_ROOT="\$ROOT"
export DISPLAY="\${DISPLAY:-:0}"
export __GLX_VENDOR_LIBRARY_NAME="\${__GLX_VENDOR_LIBRARY_NAME:-nvidia}"
exec "\$ROOT/bin/krtx-zero2d" "\$@"
EOF
cat > bin/launch-home-api <<EOF
#!/usr/bin/env bash
ROOT="\$(cd "\$(dirname "\$0")/.." && pwd)"
export KATERTX_ROOT="\$ROOT"
export DISPLAY="\${DISPLAY:-:0}"
exec python3 "\$ROOT/bin/krtx-home-api"
EOF
chmod +x bin/launch-rtx bin/launch-term bin/launch-spv bin/launch \
  bin/launch-zero2d bin/launch-home-api \
  bin/krtx-engine bin/krtx-term bin/krtx-spv bin/krtx bin/krtx-zero2d

echo "=== BUILD OK ==="
ls -la bin/krtx-engine bin/krtx-term bin/krtx-spv bin/krtx bin/launch
echo "one lulz: ./bin/launch   or   ./bin/krtx one"
echo "spv:      ./bin/launch-spv   list|in grin|engine"
echo "zero2d:   ./bin/launch-zero2d --detect | --frames 90 --dump out/zero2d.ppm"
echo "home api: ./bin/launch-home-api   → http://127.0.0.1:18773/"
