#!/bin/sh
set -eu
ROOT='/Users/guman/Documents/Codex/2026-09-27/https-www-amazon-com-electric-drill'
WORK="$ROOT/work/tri-product-continuation-2026-10-10.nosync/drill_sensorless_smo_a0"
PKG="$ROOT/outputs/三款PCBA工程包-v1.39-2026-10-08"
TARGET="$PKG/固件/drill_target"
OUT="$WORK/build"
CC=${ARM_GCC:-arm-none-eabi-gcc}
OBJCOPY=${ARM_OBJCOPY:-arm-none-eabi-objcopy}
SIZE=${ARM_SIZE:-arm-none-eabi-size}
mkdir -p "$OUT"
FLAGS="-mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -DSTM32G431xx -std=c11 -Os -g3 -ffreestanding -fno-builtin -fno-common -ffunction-sections -fdata-sections -Wall -Wextra -Werror"
INCLUDES="-I$TARGET/Device/Include -I$PKG/固件/lamp_target/CMSIS/Core/Include -I$PKG/固件/lamp_target/include -I$PKG/固件/drill_driver -I$TARGET/src -I$WORK"
$CC $FLAGS $INCLUDES -c "$TARGET/Device/Source/Templates/system_stm32g4xx.c" -o "$OUT/system.o"
$CC $FLAGS $INCLUDES -c "$TARGET/src/runtime.c" -o "$OUT/runtime.o"
$CC $FLAGS $INCLUDES -c "$WORK/drill_smo.c" -o "$OUT/drill_smo.o"
$CC $FLAGS $INCLUDES -c "$TARGET/src/drill_safe_gpio.c" -o "$OUT/drill_safe_gpio.o"
$CC $FLAGS $INCLUDES -c "$PKG/固件/drill_driver/motor_foc.c" -o "$OUT/motor_foc.o"
$CC $FLAGS $INCLUDES -c "$WORK/target_diag_main.c" -o "$OUT/target_diag_main.o"
$CC -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -x assembler-with-cpp -c "$TARGET/startup/startup_stm32g431_minimal.s" -o "$OUT/startup.o"
$CC -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -nostdlib -T "$TARGET/linker/stm32g431cb.ld" \
  -Wl,-Map="$OUT/drill_smo_target_diagnostic.map",--cref,--build-id=none,--no-undefined,--gc-sections,--print-memory-usage -Wl,-z,noexecstack \
  "$OUT/startup.o" "$OUT/system.o" "$OUT/runtime.o" "$OUT/drill_safe_gpio.o" "$OUT/drill_smo.o" "$OUT/motor_foc.o" "$OUT/target_diag_main.o" -lgcc -o "$OUT/drill_smo_target_diagnostic.elf"
$OBJCOPY -O binary "$OUT/drill_smo_target_diagnostic.elf" "$OUT/drill_smo_target_diagnostic.bin"
$SIZE "$OUT/drill_smo_target_diagnostic.elf" > "$OUT/size.txt"
python3 "$WORK/verify_target_image.py" "$OUT/drill_smo_target_diagnostic.elf" "$OUT/drill_smo_target_diagnostic.bin" "$OUT/drill_smo_target_diagnostic.map" > "$OUT/build_verification.json"
cat "$OUT/build_verification.json"
