#!/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.
# Show the diff on STDOUT if there's deviation.
is_clean() {
    local output
    output="$(git status --porcelain)" || return 1
    test -z "$output" && return 0
    echo Diff between the regenerated content and the content in this PR/the repository:
    git diff
    return 1
}

# Run a command and then check the tree is still clean. Print a message if not.
gen_and_check_clean() {
    thing="$1"
    shift
    "$@" && is_clean
    if [[ $? != 0 ]]; then
        echo -n "##vso[task.logissue type=error]"
        echo "Auto-generated $thing not up-to-date. Regenerate with '$@'."
        echo
        # Clean up the repo so that we can check further auto-generated stuff
        git clean -fxd >/dev/null
        git reset --hard >/dev/null
        return 1
    fi
}

# A specialized version of gen_and_check_clean for targets of the Makefile in hw
gen_hw_and_check_clean() {
    gen_and_check_clean "$1" make -k -C hw "$2"
}

# Check generated files are up to date

bad=0

gen_hw_and_check_clean "Register headers" regs         || bad=1
gen_hw_and_check_clean "tops"             top          || bad=1
gen_hw_and_check_clean "OTP memory map"   otp-mmap     || bad=1
gen_hw_and_check_clean "LC state"         lc-state-enc || bad=1

gen_and_check_clean \
    "flash_ctrl code" \
    hw/ip/flash_ctrl/util/flash_ctrl_gen.py || bad=1

gen_and_check_clean \
    "secded primitive code" \
    util/design/secded_gen.py --no_fpv || bad=1

gen_and_check_clean \
    "DIFs" \
    util/make_new_dif.py --mode=regen --only=autogen || bad=1

gen_and_check_clean "MUBI package" util/design/gen-mubi.py || bad=1

exit $bad
