#!/usr/bin/env bash

set -e

function usage() {
    echo -n \
        "Usage: $(basename "$0") path_to_original_rom path_to_output_directory
Extract Intel firmware from the original ROM.
"
}

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

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

        # Neutralize Intel ME and resize the Intel Flash Descriptor (IFD)
        # layout.
        # https://github.com/corna/me_cleaner/wiki/External-flashing#neutralize-and-shrink-intel-me-useful-only-for-coreboot
        pushd "${COREBOOT_DIR}/util/me_cleaner"

        python me_cleaner.py -S -r -t -d -O out.bin -D ifd_shrinked.bin -M me_shrinked.bin "${original_rom}"

        mv ifd_shrinked.bin "${output_dir}/ifd.bin"
        mv me_shrinked.bin "${output_dir}/me.bin"
        rm ./*.bin

        popd

        # Extract the Intel Gigabit Ethernet (GbE) firmware.
        pushd "${COREBOOT_DIR}/util/ifdtool"

        make
        ./ifdtool -x "${original_rom}"

        mv flashregion_3_gbe.bin "${output_dir}/gbe.bin"
        rm ./*.bin

        popd
    fi
fi