#!/bin/bash
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# Returns 0 if there are no changes or untracked files, 1 otherwise
is_clean() {
    local output
    output="$(git status --porcelain)" || return 1
    test -z "$output" && return 0
    return 1
}

# Check generated files are up to date

make -k -C hw regs && is_clean
if [[ $? != 0 ]]; then
  echo -n "##vso[task.logissue type=error]"
  echo "Register headers not up-to-date. Regenerate them with 'make -C hw regs'."
  exit 1
fi

make -k -C hw top && is_clean
if [[ $? != 0 ]]; then
  echo -n "##vso[task.logissue type=error]"
  echo "Autogenerated tops not up-to-date. Regenerate with 'make -C hw top'."
  exit 1
fi

make -k -C hw otp-mmap && is_clean
if [[ $? != 0 ]]; then
  echo -n "##vso[task.logissue type=error]"
  echo "Autogenerated OTP memory map files not up-to-date. Regenerate with 'make -C hw otp-mmap'."
  exit 1
fi

make -k -C hw lc-state-enc && is_clean
if [[ $? != 0 ]]; then
  echo -n "##vso[task.logissue type=error]"
  echo "Autogenerated LC state not up-to-date. Regenerate with 'make -C hw lc-state-enc'."
  exit 1
fi

hw/ip/flash_ctrl/util/flash_ctrl_gen.py && is_clean
if [[ $? != 0 ]]; then
  echo -n "##vso[task.logissue type=error]"
  echo "Autogenerated flash_ctrl code not up-to-date."
  echo "Regenerate with 'hw/ip/flash_ctrl/util/flash_ctrl_gen.py'."
  exit 1
fi

util/design/secded_gen.py --no_fpv && is_clean
if [[ $? != 0 ]]; then
  echo -n "##vso[task.logissue type=error]"
  echo "Autogenerated secded primitive code not up-to-date."
  echo "Regenerate with 'util/design/secded_gen.py --no_fpv'."
  exit 1
fi

util/make_new_dif.py --mode=batch --only=autogen && is_clean
if [[ $? != 0 ]]; then
  echo -n "##vso[task.logissue type=error]"
  echo "Autogenerated DIFs not up-to-date."
  echo "Regenerate with 'util/make_new_dif.py --mode=batch --only=autogen'."
  exit 1
fi
