#!/bin/sh
set -eu

ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/../.." && pwd)
TARGET="$ROOT/固件/vacuum_target"
COMMON="$ROOT/固件/lamp_target"
OUT="$TARGET/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-m0plus -mthumb -mfloat-abi=soft -DSTM32G030xx -std=c11 -Os -g3 -ffreestanding -fno-builtin -fno-common -Wall -Wextra -Werror"
INCLUDES="-I$COMMON/include -I$COMMON/CMSIS/Core/Include -I$COMMON/Device/Include -I$ROOT/固件/vacuum_control"

# shellcheck disable=SC2086
$CC $FLAGS $INCLUDES -c "$COMMON/Device/Source/Templates/system_stm32g0xx.c" -o "$OUT/system_stm32g0xx.o"
# shellcheck disable=SC2086
$CC $FLAGS $INCLUDES -c "$COMMON/src/runtime.c" -o "$OUT/runtime.o"
# shellcheck disable=SC2086
$CC $FLAGS $INCLUDES -c "$TARGET/src/main.c" -o "$OUT/main.o"
$CC -mcpu=cortex-m0plus -mthumb -mfloat-abi=soft -x assembler-with-cpp -c \
    "$COMMON/Device/Source/Templates/gcc/startup_stm32g030xx.s" -o "$OUT/startup.o"
# shellcheck disable=SC2086
$CC $FLAGS -I"$COMMON/include" -c "$ROOT/固件/vacuum_control/fan_manager.c" -o "$OUT/fan_manager.o"
$CC $FLAGS -I"$TARGET/src" -c "$TARGET/src/vacuum_output_lock.c" -o "$OUT/vacuum_output_lock.o"
$CC $FLAGS -I"$COMMON/include" -I"$TARGET/src" -c "$TARGET/src/vacuum_telemetry.c" -o "$OUT/vacuum_telemetry.o"
$CC $FLAGS $INCLUDES -I"$TARGET/src" -c "$TARGET/src/vacuum_board.c" -o "$OUT/vacuum_board.o"

$CC -mcpu=cortex-m0plus -mthumb -mfloat-abi=soft -nostdlib \
    -T "$COMMON/linker/stm32g030f6.ld" \
    -Wl,-Map="$OUT/vacuum_control_g030f6.map",--cref,--build-id=none,--no-undefined,--print-memory-usage \
    "$OUT/startup.o" "$OUT/system_stm32g0xx.o" "$OUT/runtime.o" "$OUT/main.o" \
    "$OUT/fan_manager.o" "$OUT/vacuum_output_lock.o" "$OUT/vacuum_telemetry.o" "$OUT/vacuum_board.o" -lgcc \
    -o "$OUT/vacuum_control_g030f6.elf"

$OBJCOPY -O binary "$OUT/vacuum_control_g030f6.elf" "$OUT/vacuum_control_g030f6.bin"
$SIZE "$OUT/vacuum_control_g030f6.elf" | tee "$OUT/size.txt"
python3 "$TARGET/verify_image.py" "$OUT/vacuum_control_g030f6.elf" "$OUT/vacuum_control_g030f6.bin" "$OUT/vacuum_control_g030f6.map" > "$OUT/build_verification.json"
rm -f "$OUT"/*.o
cat "$OUT/build_verification.json"
