diff --git a/resources/scripts/build/release/roms b/resources/scripts/build/release/roms index 06f56c85..2104711f 100755 --- a/resources/scripts/build/release/roms +++ b/resources/scripts/build/release/roms @@ -26,33 +26,50 @@ set -u -e projectname="$(cat projectname)" - version="version-unknown" -if [ -f version ]; then - version="$(cat version)" -fi versiondate="version-date-unknown" -if [ -f versiondate ]; then - versiondate="$(cat versiondate)" -fi +target="" +CONFIG_HAVE_MRC="" +CONFIG_HAVE_ME_BIN="" +CONFIG_KBC1126_FIRMWARE="" +ifdtooldir="coreboot/default/util/ifdtool" +ifdtool="${ifdtooldir}/ifdtool" +cbfstooldir="coreboot/default/util/cbfstool" +cbfstool="${cbfstooldir}/cbfstool" -if [ ! -d "bin/" ]; then - printf "build/release/roms: no ROMs built yet. Exiting.\n" - exit 1 -fi +main() +{ + printf "Building ROM image archives for version %s\n" "${version}" -[ ! -d "release/" ] && \ - mkdir -p release/ -[ ! -d "release/${version}/" ] && \ - mkdir -p "release/${version}/" -[ -d "release/${version}/roms/" ] && \ - rm -Rf "release/${version}/roms/" -[ ! -d "release/${version}/roms/" ] && \ - mkdir -p "release/${version}/roms/" + init_check -printf "Building ROM image archives for version %s\n" "${version}" + for romdir in bin/*; do + make_archive + done -for romdir in bin/*; do + printf "\nROM archives available at release/%s/roms/\n\n" "${version}" +} + +init_check() +{ + [ -f version ] && \ + version="$(cat version)" + [ -f versiondate ] && \ + versiondate="$(cat versiondate)" + [ ! -d "bin/" ] && \ + err "no ROMs built yet. exiting" + [ ! -d "release/" ] && \ + mkdir -p release/ + [ ! -d "release/${version}/" ] && \ + mkdir -p "release/${version}/" + [ -d "release/${version}/roms/" ] && \ + rm -Rf "release/${version}/roms/" + [ ! -d "release/${version}/roms/" ] && \ + mkdir -p "release/${version}/roms/" +} + +make_archive() +{ target="${romdir##*/}" echo ${target} @@ -63,85 +80,98 @@ for romdir in bin/*; do CONFIG_HAVE_MRC="y" CONFIG_HAVE_ME_BIN="y" CONFIG_KBC1126_FIRMWARE="y" - grep "CONFIG_HAVE_ME_BIN=y" "resources/coreboot/${target}/config/"* || CONFIG_HAVE_ME_BIN="n" - grep "CONFIG_HAVE_MRC=y" "resources/coreboot/${target}/config/"* || CONFIG_HAVE_MRC="n" - grep "CONFIG_KBC1126_FIRMWARE=y" "resources/coreboot/${target}/config"/* || CONFIG_KBC1126_FIRMWARE="n" + grep "CONFIG_HAVE_ME_BIN=y" \ + "resources/coreboot/${target}/config/"* \ + || CONFIG_HAVE_ME_BIN="n" + grep "CONFIG_HAVE_MRC=y" \ + "resources/coreboot/${target}/config/"* \ + || CONFIG_HAVE_MRC="n" + grep "CONFIG_KBC1126_FIRMWARE=y" \ + "resources/coreboot/${target}/config"/* \ + || CONFIG_KBC1126_FIRMWARE="n" # remove ME/MRC/EC firmware from ROM images - if [ "${CONFIG_HAVE_ME_BIN}" = "y" ] || [ "${target}" = "e6400nvidia_4mb" ]; then - if [ ! -d coreboot/default ]; then - ./download coreboot default || exit 1 - fi - - ifdtooldir="coreboot/default/util/ifdtool" - ifdtool="${ifdtooldir}/ifdtool" - if [ ! -f "${ifdtool}" ]; then - ./build module cbutils default || exit 1 - fi - - cbfstooldir="coreboot/default/util/cbfstool" - cbfstool="${cbfstooldir}/cbfstool" - if [ ! -f "${cbfstool}" ]; then - ./build module cbutils default || exit 1 - fi - - rm -Rf "${romdir}_tmp" # dirty hack, to reduce disk io later - # rather than using /tmp, which might not be tmpfs - mkdir "${romdir}_tmp" - - if [ ! -f "${romdir}/blobhashes" ]; then - printf "%s\n" "The roms in this archive should match the following hashes AFTER blobs are inserted" > "${romdir}/blobhashes" - fi - - # Hash the rom before removing blobs - ( cd ${romdir} - sha1sum *.rom >> blobhashes - ) - - for romfile in "${romdir}"/*.rom - do - if [ ! -f "${romfile}" ]; then - continue - fi - - if [ "${CONFIG_HAVE_ME_BIN}" = "y" ]; then - ${ifdtool} --nuke me "${romfile}" || exit 1 - mv "${romfile}" "${romdir}_tmp"/ - mv "${romfile}.new" "${romfile}" - fi - - if [ "${CONFIG_HAVE_MRC}" = "y" ] - then - ${cbfstool} "${romfile}" remove -n mrc.bin || exit 1 - ${cbfstool} "${romfile}" print - fi - - if [ "${CONFIG_KBC1126_FIRMWARE}" = "y" ]; then - ${cbfstool} "${romfile}" remove -n ecfw1.bin || exit 1 - ${cbfstool} "${romfile}" remove -n ecfw2.bin || exit 1 - fi - - # TODO: replace this board-specific hack - if [ "${target}" = "e6400nvidia_4mb" ]; then - ${cbfstool} "${romfile}" remove \ - -n "pci10de,06eb.rom" \ - || exit 1 - fi - done + if [ "${CONFIG_HAVE_ME_BIN}" = "y" ] \ + || [ "${target}" = "e6400nvidia_4mb" ]; then + purge_blobs fi - printf "Generating release/%s/roms/%s-%s_%s.tar.xz\n" "${version}" "${projectname}" "${version}" "${target##*/}" + printf "Generating release/%s/roms/%s-%s_%s.tar.xz\n" \ + "${version}" "${projectname}" \ + "${version}" "${target##*/}" printf "%s\n" "${version}" > "${romdir}/version" printf "%s\n" "${versiondate}" > "${romdir}/versiondate" printf "%s\n" "${projectname}" > "${romdir}/projectname" - tar -c "${romdir}/" | xz -9e >"release/${version}/roms/${projectname}-${version}_${target##*/}.tar.xz" + + f="release/${version}/roms/${projectname}-${version}_${target##*/}" + tar -c "${romdir}/" | xz -9e > "${f}.tar.xz" if [ -d "${romdir}_tmp" ] then rm -Rf "${romdir}" mv "${romdir}_tmp" "${romdir}" fi -done +} -printf "\nROM image release archives available at release/%s/roms/\n\n" "${version}" +purge_blobs() +{ + if [ ! -d coreboot/default ]; then + ./download coreboot default || exit 1 + fi + if [ ! -f "${ifdtool}" ] || [ ! -f "${cbfstool}" ]; then + ./build module cbutils default || exit 1 + fi + rm -Rf "${romdir}_tmp" # dirty hack, to reduce disk io later + # rather than using /tmp, which might not be tmpfs + mkdir "${romdir}_tmp" + + # Hash the rom before removing blobs + if [ ! -f "${romdir}/blobhashes" ]; then + printf "ROMs must match these hashes after blob insertion:" \ + > "${romdir}/blobhashes" + fi + ( + cd ${romdir} + sha1sum *.rom >> blobhashes + ) + + for romfile in "${romdir}"/*.rom + do + if [ ! -f "${romfile}" ]; then + continue + fi + + if [ "${CONFIG_HAVE_ME_BIN}" = "y" ]; then + ${ifdtool} --nuke me "${romfile}" || exit 1 + mv "${romfile}" "${romdir}_tmp"/ + mv "${romfile}.new" "${romfile}" + fi + + if [ "${CONFIG_HAVE_MRC}" = "y" ] + then + ${cbfstool} "${romfile}" remove -n mrc.bin || exit 1 + ${cbfstool} "${romfile}" print + fi + + if [ "${CONFIG_KBC1126_FIRMWARE}" = "y" ]; then + ${cbfstool} "${romfile}" remove -n ecfw1.bin || exit 1 + ${cbfstool} "${romfile}" remove -n ecfw2.bin || exit 1 + fi + + # TODO: replace this board-specific hack + if [ "${target}" = "e6400nvidia_4mb" ]; then + ${cbfstool} "${romfile}" remove \ + -n "pci10de,06eb.rom" \ + || exit 1 + fi + done +} + +err() +{ + printf "%s: %s\n" $0 $1 + exit 1 +} + +main $@