summaryrefslogtreecommitdiffstats
path: root/resources/scripts/helpers/download
diff options
context:
space:
mode:
authorFrancis Rowe <info@gluglug.org.uk>2016-03-03 14:55:50 (EST)
committer Francis Rowe <info@gluglug.org.uk>2016-03-03 14:56:05 (EST)
commit2f3d87aec85f5759180380cbc156472378164d11 (patch)
tree79865b35916651f6c4342e3fba977a73018eee98 /resources/scripts/helpers/download
parent278362ead551ebc1ed767df2e0896b04b51242cd (diff)
downloadlibreboot-2f3d87aec85f5759180380cbc156472378164d11.zip
libreboot-2f3d87aec85f5759180380cbc156472378164d11.tar.gz
libreboot-2f3d87aec85f5759180380cbc156472378164d11.tar.bz2
Revert "iunfinished patch: copy coreboot per revision, not board"
I'm an idiot. This patch wasn't supposed to be pushed yet because not finished. Reverting it for the time being. This reverts commit 89cc8c38c1cf3865c3684e5bd6658eedf0e61cfd.
Diffstat (limited to 'resources/scripts/helpers/download')
-rwxr-xr-xresources/scripts/helpers/download/coreboot118
1 files changed, 107 insertions, 11 deletions
diff --git a/resources/scripts/helpers/download/coreboot b/resources/scripts/helpers/download/coreboot
index 125d11a..16bd1a8 100755
--- a/resources/scripts/helpers/download/coreboot
+++ b/resources/scripts/helpers/download/coreboot
@@ -36,6 +36,87 @@ fi
# coreboot revisios used for crossgcc
crossgccrevision="4351ace145c4069f9c93ca7541d6dfaf8300b53b"
+# sanity check (check for invalid paths in the reused.list patch lists before proceeding)
+for payloads in resources/libreboot/config/*; do
+
+ if [ ! -d "${payloads}/" ]; then
+ continue
+ fi
+
+ payload="${payloads##*/}"
+
+ for boardconfig in resources/libreboot/config/${payload}/*; do
+
+ if [ ! -d "${boardconfig}/" ]; then
+ continue
+ fi
+
+ boardname="${boardconfig##*/}"
+ cbrevision=$(cat "${boardconfig}/cbrevision")
+ vbootrevision=$(cat "${boardconfig}/vbootrevision")
+
+ reused_coreboot_patches="resources/libreboot/patch/coreboot/${cbrevision}/${payload}/${boardname}/reused.list"
+ reused_vboot_patches="resources/libreboot/patch/vboot/${vbootrevision}/${payload}/${boardname}/reused.list"
+ for reused_patches in "${reused_coreboot_patches}" "${reused_vboot_patches}"; do
+ if [ -f "${reused_patches}" ]; then
+ for patch in $(cat "${reused_patches}"); do
+ if [ ! -f "./${patch}" ]; then
+ printf "%s listed in %s does not exist\n" "${patch}" "${reused_patches}"
+ exit 1
+ fi
+ done
+ fi
+ done
+
+ done
+done
+
+# in ascending filename order, apply patches from a directory
+apply_patches_from_directory() {
+ patch_directory="${1}" # directory containing the patch files
+
+ if [ -d "${patch_directory}" ]; then
+ for patch in ${patch_directory}/*.patch; do
+
+ if [ "${patch##*/}" = "*.patch" ]; then # oh so ugly
+ continue # ugly ugly ugly ugly ugly
+ fi # most hideous thing you've ever seen
+
+ git am "${patch}" || return 1
+ done
+ fi
+}
+# files listed in the file (if found) are absolute paths, relative to the root of the libreboot src directory
+# the file lists patches patches that should be applied
+apply_patches_from_file() {
+ patch_list="${1}" # file listing the paths to all the patches
+ libreboot_src_root="${2}" # path to the root of the libreboot_src directory
+
+ if [ -f "${patch_list}" ]; then
+ for patchname in $(cat "${patch_list}"); do
+ git am "${libreboot_src_root}/${patchname}" || return 1
+ done
+ fi
+}
+make_coreboot_src_directory() {
+ payload="${1}"
+ boardname="${2}"
+ firmwarepath="${3}" # libreboot_src/coreboot/
+(
+ cd "${firmwarepath}/"
+ # copy coreboot directory there
+ rm -Rf "${payload:?}/${boardname:?}/"
+ if [ ! -d "${payload}/" ]; then
+ mkdir -p "${payload}/"
+ fi
+ cp -R "coreboot/" "${payload}/${boardname}/"
+)
+}
+reset_at_revision() {
+ revision="${1}"
+ git reset --hard ${revision}
+}
+
printf "Downloading coreboot, patching coreboot and deblobbing coreboot\n"
# This grabs current base used, and applies patches
@@ -87,22 +168,39 @@ for payloads in ../../resources/libreboot/config/*; do
continue
fi
+ boardname="${boardconfig##*/}"
cbrevision=$(cat "${boardconfig}/cbrevision")
vbootrevision=$(cat "${boardconfig}/vbootrevision")
- # the same vboot revision is always used for coreboot revision,
- # so we don't need to wworry about checking for that here
+ make_coreboot_src_directory ${payload} ${boardname} ..
- if [ -d "../${cbrevision}/${cbrevision}" ]; then
- continue
- # the directory already exists, no need to recreate it
- fi
+ # patch that version
+ (
- make_coreboot_src_directory ${cbrevision} ${cbrevision} ..
- done
-done
+ cd "../${payload}/${boardname}/"
+ reset_at_revision ${cbrevision}
+
+ # apply patches (coreboot, common to all systems using this revision)
+ apply_patches_from_directory "../../../resources/libreboot/patch/common/coreboot/${cbrevision}"
+ # apply patches re-used from other boards, before applying main patches (common patches for similar boards)
+ apply_patches_from_file "../../../resources/libreboot/patch/coreboot/${cbrevision}/${payload}/${boardname}/reused.list" ../../..
+ # apply patches (coreboot, machine-specific for this revision)
+ apply_patches_from_directory "../../../resources/libreboot/patch/coreboot/${cbrevision}/${payload}/${boardname}"
+ cd "3rdparty/vboot/"
+ # reset to known revision (vboot)
+ reset_at_revision ${vbootrevision}
+ # apply patches (vboot, common to all systems using this revision)
+ apply_patches_from_directory "../../../../../resources/libreboot/patch/common/vboot/${vbootrevision}"
+ # apply patches re-used from other boards, before applying main patches (common patches for similar boards)
+ apply_patches_from_file "../../../../../resources/libreboot/patch/vboot/${vbootrevision}/${payload}/${boardname}/reused.list" ../../../../..
+ # apply patches (vboot, machine-specific for this revision)
+ apply_patches_from_directory "../../../../../resources/libreboot/patch/vboot/${vbootrevision}/${payload}/${boardname}"
+
+ )
+ done
+done
# prepare directory for crossgcc
rm -Rf "../../crossgcc/"
@@ -117,8 +215,6 @@ make_coreboot_src_directory crossgcc ${crossgccrevision} ..
cd ../
mv "${crossgccrevision}/" "crossgcc/"
mv "crossgcc/" ../../
- cd ../
- rm -Rf "crossgcc/"
)
# go back to _src/coreboot/ (containing all coreboot directories)