#!/bin/bash

set -eo pipefail

if ! command -v cargo-batch &> /dev/null; then
    echo "cargo-batch could not be found. Install it with the following command:"
    echo ""
    echo "    cargo install --git https://github.com/embassy-rs/cargo-batch cargo --bin cargo-batch --locked"
    echo ""
    exit 1
fi

export RUSTFLAGS=-Dwarnings
export DEFMT_LOG=trace,embassy_hal_internal=debug
if [[ -z "${CARGO_TARGET_DIR}" ]]; then
    export CARGO_TARGET_DIR=target_ci
fi

TARGET="thumbv8m.main-none-eabihf"

BUILD_EXTRA=""

FEATURE_COMBINATIONS=(
  "mimxrt633s"
  "mimxrt633s,defmt"
  "mimxrt633s,defmt,time"
  "mimxrt633s,defmt,time,time-driver-os-timer"
  "mimxrt633s,defmt,time,time-driver-os-timer,unstable-pac"
  "mimxrt633s,defmt,time,time-driver-rtc"
  "mimxrt633s,defmt,time,time-driver-rtc,unstable-pac"
  "mimxrt633s,defmt,time,unstable-pac"
  "mimxrt633s,defmt,time-driver-os-timer"
  "mimxrt633s,defmt,time-driver-os-timer,unstable-pac"
  "mimxrt633s,defmt,time-driver-rtc"
  "mimxrt633s,defmt,time-driver-rtc,unstable-pac"
  "mimxrt633s,defmt,unstable-pac"
  "mimxrt633s,rt"
  "mimxrt633s,rt,defmt"
  "mimxrt633s,rt,defmt,time"
  "mimxrt633s,rt,defmt,time,time-driver-os-timer"
  "mimxrt633s,rt,defmt,time,time-driver-os-timer,unstable-pac"
  "mimxrt633s,rt,defmt,time,time-driver-rtc"
  "mimxrt633s,rt,defmt,time,time-driver-rtc,unstable-pac"
  "mimxrt633s,rt,defmt,time,unstable-pac"
  "mimxrt633s,rt,defmt,time-driver-os-timer"
  "mimxrt633s,rt,defmt,time-driver-os-timer,unstable-pac"
  "mimxrt633s,rt,defmt,time-driver-rtc"
  "mimxrt633s,rt,defmt,time-driver-rtc,unstable-pac"
  "mimxrt633s,rt,defmt,unstable-pac"
  "mimxrt633s,rt,time"
  "mimxrt633s,rt,time,time-driver-os-timer"
  "mimxrt633s,rt,time,time-driver-os-timer,unstable-pac"
  "mimxrt633s,rt,time,time-driver-rtc"
  "mimxrt633s,rt,time,time-driver-rtc,unstable-pac"
  "mimxrt633s,rt,time,unstable-pac"
  "mimxrt633s,rt,time-driver-os-timer"
  "mimxrt633s,rt,time-driver-os-timer,unstable-pac"
  "mimxrt633s,rt,time-driver-rtc"
  "mimxrt633s,rt,time-driver-rtc,unstable-pac"
  "mimxrt633s,rt,unstable-pac"
  "mimxrt633s,time"
  "mimxrt633s,time,time-driver-os-timer"
  "mimxrt633s,time,time-driver-os-timer,unstable-pac"
  "mimxrt633s,time,time-driver-rtc"
  "mimxrt633s,time,time-driver-rtc,unstable-pac"
  "mimxrt633s,time,unstable-pac"
  "mimxrt633s,time-driver-os-timer"
  "mimxrt633s,time-driver-os-timer,unstable-pac"
  "mimxrt633s,time-driver-rtc"
  "mimxrt633s,time-driver-rtc,unstable-pac"
  "mimxrt633s,unstable-pac"
  "mimxrt685s"
  "mimxrt685s,defmt"
  "mimxrt685s,defmt,time"
  "mimxrt685s,defmt,time,time-driver-os-timer"
  "mimxrt685s,defmt,time,time-driver-os-timer,unstable-pac"
  "mimxrt685s,defmt,time,time-driver-rtc"
  "mimxrt685s,defmt,time,time-driver-rtc,unstable-pac"
  "mimxrt685s,defmt,time,unstable-pac"
  "mimxrt685s,defmt,time-driver-os-timer"
  "mimxrt685s,defmt,time-driver-os-timer,unstable-pac"
  "mimxrt685s,defmt,time-driver-rtc"
  "mimxrt685s,defmt,time-driver-rtc,unstable-pac"
  "mimxrt685s,defmt,unstable-pac"
  "mimxrt685s,rt"
  "mimxrt685s,rt,defmt"
  "mimxrt685s,rt,defmt,time"
  "mimxrt685s,rt,defmt,time,time-driver-os-timer"
  "mimxrt685s,rt,defmt,time,time-driver-os-timer,unstable-pac"
  "mimxrt685s,rt,defmt,time,time-driver-rtc"
  "mimxrt685s,rt,defmt,time,time-driver-rtc,unstable-pac"
  "mimxrt685s,rt,defmt,time,unstable-pac"
  "mimxrt685s,rt,defmt,time-driver-os-timer"
  "mimxrt685s,rt,defmt,time-driver-os-timer,unstable-pac"
  "mimxrt685s,rt,defmt,time-driver-rtc"
  "mimxrt685s,rt,defmt,time-driver-rtc,unstable-pac"
  "mimxrt685s,rt,defmt,unstable-pac"
  "mimxrt685s,rt,time"
  "mimxrt685s,rt,time,time-driver-os-timer"
  "mimxrt685s,rt,time,time-driver-os-timer,unstable-pac"
  "mimxrt685s,rt,time,time-driver-rtc"
  "mimxrt685s,rt,time,time-driver-rtc,unstable-pac"
  "mimxrt685s,rt,time,unstable-pac"
  "mimxrt685s,rt,time-driver-os-timer"
  "mimxrt685s,rt,time-driver-os-timer,unstable-pac"
  "mimxrt685s,rt,time-driver-rtc"
  "mimxrt685s,rt,time-driver-rtc,unstable-pac"
  "mimxrt685s,rt,unstable-pac"
  "mimxrt685s,time"
  "mimxrt685s,time,time-driver-os-timer"
  "mimxrt685s,time,time-driver-os-timer,unstable-pac"
  "mimxrt685s,time,time-driver-rtc"
  "mimxrt685s,time,time-driver-rtc,unstable-pac"
  "mimxrt685s,time,unstable-pac"
  "mimxrt685s,time-driver-os-timer"
  "mimxrt685s,time-driver-os-timer,unstable-pac"
  "mimxrt685s,time-driver-rtc"
  "mimxrt685s,time-driver-rtc,unstable-pac"
  "mimxrt685s,unstable-pac"
)
cargo batch \
      $(for features in "${FEATURE_COMBINATIONS[@]}"; do
	  echo "--- build --manifest-path Cargo.toml --target thumbv8m.main-none-eabihf --features $features "
	  echo "--- build --release --manifest-path Cargo.toml --target thumbv8m.main-none-eabihf --features $features "
	done) $BUILD_EXTRA

cargo clippy --locked --manifest-path Cargo.toml --target thumbv8m.main-none-eabihf --features "mimxrt633s,rt,time-driver-os-timer,unstable-pac" -- -Dwarnings -D clippy::suspicious -D clippy::correctness -D clippy::perf -D clippy::style
cargo clippy --locked --manifest-path Cargo.toml --target thumbv8m.main-none-eabihf --features "mimxrt633s,rt,time-driver-rtc,unstable-pac" -- -Dwarnings -D clippy::suspicious -D clippy::correctness -D clippy::perf -D clippy::style