152 lines
3.4 KiB
Plaintext
152 lines
3.4 KiB
Plaintext
|
#!/usr/bin/env bash
|
||
|
|
||
|
# SPDX-FileCopyrightText: 2022 Caleb La Grange <thonkpeasant@protonmail.com>
|
||
|
# SPDX-License-Identifier: GPL-3.0-only
|
||
|
|
||
|
board="${1}"
|
||
|
# A shorthand for each board so as not to duplicate blobs for boards of different sizes
|
||
|
board_short=${board%%_*mb}
|
||
|
|
||
|
# Allow adding only blobs that can be legally redistributed (ifd+gbe)
|
||
|
if [ "${2}" = "redistributable" ]; then
|
||
|
redistributable=true
|
||
|
else
|
||
|
redistributable=false
|
||
|
fi
|
||
|
|
||
|
Download_needed(){
|
||
|
for need in ${needs}; do
|
||
|
case ${need} in
|
||
|
*ME*)
|
||
|
Extract_me || _failed+=" me"
|
||
|
;;
|
||
|
*MRC*)
|
||
|
./download mrc || _failed+=" mrc"
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
if [ ! -z ${_failed+x} ]; then
|
||
|
printf "\nERROR: failed to obtain${_failed}\nrun: './blobutil extract ${board} /path/to/romdump.rom' to extract the remaining blobs\n"
|
||
|
exit 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
Extract_me(){
|
||
|
_me_destination=${CONFIG_ME_BIN_PATH#../../}
|
||
|
|
||
|
if [ -f "${_me_destination}" ]; then
|
||
|
printf 'me already downloaded\n'
|
||
|
return 0
|
||
|
fi
|
||
|
|
||
|
if [ -z "${me_dl+x}" ]; then
|
||
|
printf 'no me download available for this board\n'
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
if [ ! -d "${_me_destination%/*}" ]; then
|
||
|
mkdir -p ${_me_destination%/*}
|
||
|
fi
|
||
|
|
||
|
printf "Extracting neutered me for ${board}\n"
|
||
|
|
||
|
# Delete old me downloads in case user is building for multiple boards
|
||
|
if [ -f "blobs/me.exe" ]; then
|
||
|
rm blobs/me.exe
|
||
|
fi
|
||
|
|
||
|
if [ -d "blobs/app" ]; then
|
||
|
rm -r blobs/app
|
||
|
fi
|
||
|
|
||
|
curl ${me_dl} > blobs/me.exe || curl ${me_dl_bkup} > blobs/me.exe
|
||
|
|
||
|
if [ ! "$(sha1sum blobs/me.exe)" = "${me_hash} blobs/me.exe" ]; then
|
||
|
printf 'checksum of downloaded me did not mactch\ncorrupted me downloaded or wrong me for board\n'
|
||
|
rm blobs/me.exe
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
( cd blobs && innoextract me.exe )
|
||
|
printf 'extracting and stripping intel management engine\n'
|
||
|
./me_cleaner/me_cleaner.py -r -t -O ${_me_destination} blobs/app/*ME*.bin \
|
||
|
|| ./resources/blobs/me7_update_parser.py -O ${_me_destination} blobs/app/ME7*.bin
|
||
|
printf "Truncated and cleaned me output to ${_me_destination}\n"
|
||
|
}
|
||
|
|
||
|
Build_deps(){
|
||
|
if [ ! -d me_cleaner ]; then
|
||
|
printf "downloading me_cleaner\n"
|
||
|
./download me_cleaner
|
||
|
fi
|
||
|
|
||
|
if [ ! -d coreboot/default ]; then
|
||
|
printf "downloading coreboot\n"
|
||
|
./download coreboot default
|
||
|
fi
|
||
|
|
||
|
if [ ! -f "coreboot/default/util/ifdtool/ifdtool" ]; then
|
||
|
printf "building ifdtool from coreboot\n"
|
||
|
( cd coreboot/default/util/ifdtool && make )
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
set -- "resources/coreboot/${board}/config/*"
|
||
|
. ${1} 2>/dev/null
|
||
|
. "resources/coreboot/${board}/board.cfg"
|
||
|
|
||
|
if [ "${CONFIG_HAVE_MRC}" = "y" ]; then
|
||
|
if [ "${redistributable}" = "false" ]; then
|
||
|
printf 'haswell board detected, downloading mrc\n'
|
||
|
needs+=" MRC"
|
||
|
fi
|
||
|
|
||
|
fi
|
||
|
|
||
|
if [ "${CONFIG_HAVE_IFD_BIN}" = "y" ]; then
|
||
|
printf 'board needs intel firmware descriptor\n'
|
||
|
needs+=" IFD"
|
||
|
fi
|
||
|
|
||
|
if [ "${CONFIG_HAVE_ME_BIN}" = "y" ]; then
|
||
|
if [ "${redistributable}" = "false" ]; then
|
||
|
printf 'board needs intel management engine\n'
|
||
|
needs+=" ME"
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if [ "${CONFIG_HAVE_GBE_BIN}" = "y" ]; then
|
||
|
printf 'board needs gigabit ethernet firmware\n'
|
||
|
needs+=" GBE"
|
||
|
fi
|
||
|
|
||
|
# Quickly exit without wasting more time if there are no blobs needed (GM45)
|
||
|
if [ -z ${needs+x} ]; then
|
||
|
printf 'No binary blobs needed for this board\n'
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
Build_deps
|
||
|
|
||
|
while read -r line ; do
|
||
|
case ${line} in
|
||
|
ME_hash*)
|
||
|
set ${line}
|
||
|
me_hash=${2}
|
||
|
;;
|
||
|
ME_dl*)
|
||
|
set ${line}
|
||
|
me_dl=${2}
|
||
|
;;
|
||
|
ME_bkup_dl*)
|
||
|
set ${line}
|
||
|
me_dl_bkup=${2}
|
||
|
;;
|
||
|
esac
|
||
|
done <<< $(eval "awk ' /\{.*${board_short}.*}{/ {flag=1;next} /\}/{flag=0} flag { print }' resources/blobs/sources")
|
||
|
|
||
|
Download_needed
|
||
|
|
||
|
|