#!/bin/bash

set -e

function usage() {
    echo -n \
        "Usage: $(basename "$0") path_to_output_directory
Obtain mrc.bin from a Haswell Chromebook firmware image.
"
}

MRC_BIN_HASH="d368ba45096a3b5490ed27014e1f9004bc363434ffdce0c368c08a89c4746722"

if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
    if [[ "${1:-}" == "--help" ]]; then
        usage
    else
        if [[ -z "${COREBOOT_DIR}" ]]; then
            echo "ERROR: No COREBOOT_DIR variable defined."
            exit 1
        fi

        output_dir="$(realpath "${1:-./}")"

        # Obtain mrc.bin from a Haswell Chromebook firmware image.
        # https://doc.coreboot.org/northbridge/intel/haswell/mrc.bin.html#obtaining-mrc-bin
        if [[ ! -f "${output_dir}/mrc.bin" ]]; then
            pushd "${COREBOOT_DIR}"

            make -C util/cbfstool
            cd util/chromeos
            ./crosfirmware.sh peppy
            ../cbfstool/cbfstool coreboot-*.bin extract -f mrc.bin -n mrc.bin -r RO_SECTION

            mv mrc.bin "${output_dir}/mrc.bin"

            popd
        fi

        if ! echo "${MRC_BIN_HASH} ${output_dir}/mrc.bin" | sha256sum --check; then
            echo "ERROR: SHA256 checksum for mrc.bin doesn't match."
            exit 1
        fi
    fi
fi
