|
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-3.0+
|
|
# Copyright (C) 2018, Tom Hiller <thrilleratplay@gmail.com>
|
|
|
|
# shellcheck disable=SC1091
|
|
source /home/coreboot/common_scripts/variables.sh
|
|
|
|
IS_BUILD_DIR_EMPTY=$(ls -A "$DOCKER_COREBOOT_DIR")
|
|
|
|
|
|
################################################################################
|
|
## Update or clone git coreboot repo
|
|
################################################################################
|
|
function gitUpdate() {
|
|
if [ -z "$IS_BUILD_DIR_EMPTY" ]; then
|
|
# Clone Coreboot and fetch submodules
|
|
git clone https://github.com/coreboot/coreboot.git "$DOCKER_COREBOOT_DIR"
|
|
cd "$DOCKER_COREBOOT_DIR" || exit
|
|
git submodule update --init --recursive --remote
|
|
|
|
# blobs are ignored from updates. Manually clone to prevent compile errors later from non empty directory cloning
|
|
# git clone https://github.com/coreboot/blobs.git 3rdparty/blobs/
|
|
else
|
|
cd "$DOCKER_COREBOOT_DIR" || exit
|
|
git fetch --all --tags --prune
|
|
|
|
cd "$DOCKER_COREBOOT_DIR/3rdparty/blobs/" || exit
|
|
git fetch --all --tags --prune
|
|
fi
|
|
}
|
|
################################################################################
|
|
|
|
|
|
|
|
################################################################################
|
|
##
|
|
################################################################################
|
|
function checkoutTag() {
|
|
cd "$DOCKER_COREBOOT_DIR" || exit
|
|
git checkout tags/"$COREBOOT_TAG" || exit
|
|
git submodule update --recursive --remote
|
|
}
|
|
################################################################################
|
|
|
|
|
|
|
|
################################################################################
|
|
##
|
|
################################################################################
|
|
function checkoutCommit() {
|
|
cd "$DOCKER_COREBOOT_DIR" || exit
|
|
# bleeding-edge should checkout master
|
|
git checkout "$COREBOOT_COMMIT" || exit
|
|
|
|
if [ "$COREBOOT_COMMIT" == "master" ]; then
|
|
git pull --all
|
|
fi
|
|
|
|
git submodule update --recursive --remote
|
|
}
|
|
################################################################################
|
|
|
|
################################################################################
|
|
## Cherry-pick a patchset
|
|
################################################################################
|
|
function cherryPickPatchset() {
|
|
cd "$DOCKER_COREBOOT_DIR" || exit
|
|
|
|
# Workaround git complaining about unset email
|
|
git config --global user.email "dummys@docker.com" && git config --global user.name "skull.docker"
|
|
|
|
git fetch "https://review.coreboot.org/coreboot" "$COREBOOT_PATCHSET" || exit
|
|
git cherry-pick FETCH_HEAD || exit
|
|
|
|
git submodule update --recursive --remote
|
|
}
|
|
|
|
################################################################################
|
|
## Download the latest released version of Coreboot
|
|
################################################################################
|
|
function downloadCoreboot() {
|
|
CB_RELEASES=$(wget -q -O- https://coreboot.org/releases/sha256sum.txt | sed 's/[^*]*\*//')
|
|
|
|
LATEST_RELEASE=$(echo -n "$CB_RELEASES" | grep "coreboot-" | grep -v "coreboot-blobs-" | sort -V | tail -n1)
|
|
LATEST_BLOBS=$(echo -n "$CB_RELEASES" | grep "coreboot-blobs-" | sort -V | tail -n1)
|
|
COREBOOT_VERSION=$(echo -n "$LATEST_RELEASE" | sed 's/coreboot-//' | sed 's/.tar.xz//')
|
|
|
|
echo "Beginning download of $LATEST_RELEASE..."
|
|
|
|
wget -q -O- "https://coreboot.org/releases/$LATEST_RELEASE" | unxz -c | tar -C "$DOCKER_COREBOOT_DIR" -x --strip 1
|
|
wget -q -O- "https://coreboot.org/releases/$LATEST_BLOBS" | unxz -c | tar -C "$DOCKER_COREBOOT_DIR" -x --strip 1
|
|
|
|
echo "Downloading $LATEST_RELEASE complete"
|
|
|
|
export COREBOOT_VERSION;
|
|
}
|
|
################################################################################
|
|
|
|
|
|
|
|
################################################################################
|
|
## MAIN FUNCTION: download/clone/checkout appropriate version of CoreBoot
|
|
########################################
|
|
########################################################################################################################
|
|
function downloadOrUpdateCoreboot() {
|
|
if [ -z "$COREBOOT_COMMIT" ] && [ -z "$COREBOOT_TAG" ] && [ -z "$IS_BUILD_DIR_EMPTY" ]; then
|
|
# If a no commit nor tag is given and the directory is empty download Coreboot release
|
|
downloadCoreboot;
|
|
elif [ "$COREBOOT_COMMIT" ]; then
|
|
# DOCKER_COMMIT?=$(shell git log -n 1 --pretty=%h)
|
|
gitUpdate
|
|
checkoutCommit
|
|
elif [ "$COREBOOT_TAG" ]; then
|
|
gitUpdate
|
|
checkoutTag
|
|
fi
|
|
|
|
if [ "$COREBOOT_PATCHSET" ]; then
|
|
cherryPickPatchset
|
|
fi
|
|
}
|
|
################################################################################
|