diff options
| author | Leah Rowe <leah@libreboot.org> | 2022-02-10 13:28:45 +0000 | 
|---|---|---|
| committer | Gogs <gogitservice@gmail.com> | 2022-02-10 13:28:45 +0000 | 
| commit | cceffff659452daca0c1cd05d5bf981551dbee9c (patch) | |
| tree | aa8e06a16936e3efe844739b286a2d14c43c6e4a /resources/scripts/download/u-boot | |
| parent | 37b450051362b4c54a8e05807f173b04649ce501 (diff) | |
| parent | 7422411b247945e000911f3f738227d17c337b20 (diff) | |
Merge branch 'master' of GNUtoo/lbmk into master
Diffstat (limited to 'resources/scripts/download/u-boot')
| -rwxr-xr-x | resources/scripts/download/u-boot | 123 | 
1 files changed, 123 insertions, 0 deletions
| diff --git a/resources/scripts/download/u-boot b/resources/scripts/download/u-boot new file mode 100755 index 00000000..704d1c3a --- /dev/null +++ b/resources/scripts/download/u-boot @@ -0,0 +1,123 @@ +#!/usr/bin/env bash + +#  helper script: download u-boot +# +#	Copyright (C) 2014, 2015, 2016, 2020, 2021 Leah Rowe <info@minifree.org> +#	Copyright (C) 2021 Denis 'GNUtoo' Carikli  <GNUtoo@cyberdimension.org> +# +#	This program is free software: you can redistribute it and/or modify +#	it under the terms of the GNU General Public License as published by +#	the Free Software Foundation, either version 3 of the License, or +#	(at your option) any later version. +# +#	This program is distributed in the hope that it will be useful, +#	but WITHOUT ANY WARRANTY; without even the implied warranty of +#	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#	GNU General Public License for more details. +# +#	You should have received a copy of the GNU General Public License +#	along with this program.  If not, see <http://www.gnu.org/licenses/>. +# + +[ "x${DEBUG+set}" = 'xset' ] && set -v +set -u -e + +# set this when you want to modify each u-boot tree +# for example, you want to test custom patches +# NODELETE= ./download coreboot +deleteblobs="true" +[ "x${NODELETE+set}" = 'xset' ] && deleteblobs="false" + +# Error handling is extreme in this script. +# This script handles the internet, and Git. Both are inherently unreliable. +[[ -f build_error ]] && rm -f build_error + +downloadfor() { +	uboot_revision="v2021.07" +	uboot_dir="u-boot/u-boot" +	if [ -d "${uboot_dir}" ]; then +	    printf \ +		"REMARK: '%s' directory already exists. Skipping setup.\n" \ +		"${uboot_dir}" +		return 0 +	fi + +	if [ ! -d "${uboot_dir}" ]; then +		mkdir -p "${uboot_dir}" +	fi + +	if [ ! -d "${uboot_dir}" ]; then +	    printf \ +		"ERROR: '%s' directory not created. Check file system permissions\n" \ +		"${uboot_dir}" +		return 1 +	fi + +	if [ ! -d "${uboot_dir}/.git" ] && [ -d "${uboot_dir}" ]; then +		rm -Rf "${uboot_dir}" +	fi + +	if [ ! -d "${uboot_dir}" ]; then +		printf "Download u-boot from upstream:\n" +		git clone https://source.denx.de/u-boot/u-boot \ +		    "${uboot_dir}" || \ +		    rm -Rf "${uboot_dir}" +		if [ ! -d "${uboot_dir}" ]; then +		    printf \ +			"ERROR: %s: Problem with git-clone. Network issue?\n" \ +			"download/u-boot" +			return 1 +		fi +	else +		git -C "${uboot_dir}" pull || touch build_error +		if [ -f build_error ]; then +		    printf \ +			"ERROR: %s: Problem with git-pull. Network issue?\n" \ +			"download/u-boot" +			return 1 +		fi +	fi + +	git -C "${uboot_dir}" reset --hard ${uboot_revision} || \ +	    touch build_error +	if [ -f build_error ]; then +	    printf \ +		"ERROR: %s: Unable to reset to commit ID/tag '%s' for board '%s' on tree '%s'\n" \ +		"download/u-boot" "${uboot_revision}" "${1}" "${uboot_dir}" +		return 1 +	fi +} + +strip_comments() +{ +	file="$1" +	# Remove comments +	sed 's/#.*//' "${file}" | \ +	    # Remove lines composed of whitespaces only +	    sed '/^\W\+$/d' | \ +		# Remove empty lines +		sed '/^$/d' +} + +printf "Downloading u-boot and (if exist in build system) applying patches\n" +downloadfor + +rm -f "build_error" +printf "\n\n" + +if [ "${deleteblobs}" = "true" ]; then +	bloblist="resources/u-boot/default/blobs.list" + +	for blob_path in $(strip_comments "${bloblist}"); do +		if echo "${blob_path}" | grep '/$' 2>&1 >/dev/null ; then +			printf "Deleting blob directory: '%s/%s'\n" \ +			       "${uboot_dir}" "${blob_path}" +			rm -rf "${uboot_dir}/${blob_path}" +		else +			printf "Deleting blob file: '%s/%s'\n" \ +			       "${uboot_dir}" "${blob_path}" +			rm -f "${uboot_dir}/${blob_path}" +		fi +	done +fi +exit 0 | 
