diff options
| author | Leah Rowe <leah@libreboot.org> | 2023-05-20 19:33:29 +0100 | 
|---|---|---|
| committer | Leah Rowe <leah@libreboot.org> | 2023-05-20 19:33:29 +0100 | 
| commit | a9bd54423c0c6e022ec98c61bd9d3f5700f6cc71 (patch) | |
| tree | 6a69f6cb74489089edb1c2faba3ce47fcac0aa34 /resources/scripts/build/release | |
| parent | 2983309006066e06a4fcf300f3f0f98fe4fdac86 (diff) | |
build/release/roms: split logic into functions
main() on top
top-down logic
79 chars or less, per line
Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'resources/scripts/build/release')
| -rwxr-xr-x | resources/scripts/build/release/roms | 214 | 
1 files changed, 122 insertions, 92 deletions
| 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 - -if [ ! -d "bin/" ]; then -	printf "build/release/roms: no ROMs built yet. Exiting.\n" -	exit 1 -fi - -[ ! -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/" - -printf "Building ROM image archives for version %s\n" "${version}" - -for romdir in bin/*; do +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" + +main() +{ +	printf "Building ROM image archives for version %s\n" "${version}" + +	init_check + +	for romdir in bin/*; do +		make_archive +	done + +	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 $@ | 
