#!/usr/bin/env bash
# Compile le firmware Klipper pour la FLSun QQ-S (carte MKS Robin Mini) et
# produit le Robin_mini.bin attendu par le bootloader MKS.
#
#   ./build-firmware.sh                  # compile seulement
#   ./build-firmware.sh /run/media/sam/XXX   # compile + copie sur la carte SD
#
# La config de compilation est figee dans klipper/.config (STM32F103,
# bootloader 28KiB -> 0x8007000, quartz 8 MHz, USART3 PB11/PB10, 250000 bauds).
# Pas besoin de "make menuconfig" : elle est deja resolue.

set -euo pipefail
cd "$(dirname "$0")/klipper"

if ! command -v arm-none-eabi-gcc >/dev/null; then
    echo "ERREUR : toolchain ARM absente. Installer :" >&2
    echo "  sudo pacman -S --needed arm-none-eabi-gcc arm-none-eabi-binutils arm-none-eabi-newlib" >&2
    exit 1
fi

echo "== compilation =="
make -j"$(nproc)"

echo "== encodage pour le bootloader MKS =="
# N'est PAS un simple renommage : ajoute l'en-tete/l'encodage attendus par MKS.
./scripts/update_mks_robin.py out/klipper.bin out/Robin_mini.bin
ls -l out/Robin_mini.bin

if [ $# -ge 1 ]; then
    DEST="$1"
    [ -d "$DEST" ] || { echo "ERREUR : $DEST n'est pas un repertoire monte" >&2; exit 1; }
    [ -w "$DEST" ] || { echo "ERREUR : $DEST non inscriptible par $(whoami)" >&2; exit 1; }
    echo "== copie a la RACINE de $DEST =="
    cp out/Robin_mini.bin "$DEST/Robin_mini.bin"
    sync
    ls -l "$DEST/Robin_mini.bin"
    echo
    echo "Ejecter proprement, inserer dans l'imprimante ETEINTE, puis allumer."
    echo "Le bootloader flashe et renomme le fichier en .CUR : c'est le signe que"
    echo "ca a marche. Si le fichier reste en .bin, il n'a pas ete pris."
fi
