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

LLAMA_DIR="/home/adminek/llama.cpp"
BUILD_DIR="$LLAMA_DIR/build"
LOG_FILE="${LOG_FILE:-$HOME/llama_rebuild.log}"

exec 3>&1
log(){ echo "[$(date '+%F %T')] $*" | tee -a "$LOG_FILE" >&3; }
run(){ log "RUN: $*"; bash -lc "$*" >>"$LOG_FILE" 2>&1; }

if [[ ! -d "$LLAMA_DIR" ]]; then
  log "Nie znaleziono katalogu: $LLAMA_DIR"
  exit 1
fi

log "Start przebudowy llama.cpp pod ROCm/gfx906 bez hipBLAS"
log "Log: $LOG_FILE"

log "Krok 1: sprawdzenie ROCm"
run "test -x /opt/rocm/bin/rocminfo"
run "/opt/rocm/bin/rocminfo | head -n 120"
run "ls /opt/rocm/lib/rocblas/library/TensileLibrary*gfx906*.dat >/dev/null"

log "Krok 2: usunięcie starego build"
run "rm -rf '$BUILD_DIR'"
run "mkdir -p '$BUILD_DIR'"

log "Krok 3: ustawienie środowiska ROCm"
export ROCM_PATH=/opt/rocm
export PATH="$ROCM_PATH/bin:$PATH"
export LD_LIBRARY_PATH="$ROCM_PATH/lib:$ROCM_PATH/lib64:${LD_LIBRARY_PATH:-}"

log "Krok 4: konfiguracja CMake"
run "cd '$LLAMA_DIR' && cmake -S . -B build -DGGML_HIP=ON -DGGML_HIPBLAS=OFF -DAMDGPU_TARGETS=gfx906 -DCMAKE_BUILD_TYPE=Release"

log "Krok 5: kompilacja"
run "cd '$LLAMA_DIR' && cmake --build build --config Release -- -j \$(nproc)"

log "Krok 6: weryfikacja plików wynikowych"
run "find '$BUILD_DIR' -maxdepth 3 \( -name 'llama-cli' -o -name 'llama-server' -o -name 'libllama.so' \) | sort"

log "Gotowe. Nową binarkę uruchamiaj z ustawionym ROCM_PATH/PATH/LD_LIBRARY_PATH albo po 'source /etc/profile.d/rocm.sh'."
