summaryrefslogtreecommitdiff
path: root/resources/scripts/download
diff options
context:
space:
mode:
Diffstat (limited to 'resources/scripts/download')
-rwxr-xr-xresources/scripts/download/u-boot123
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