#!/bin/bash CONFIG_OPTIONS="-c platforms.config" BUILD_OPTIONS="$CONFIG_OPTIONS -b DEBUG -b RELEASE" ARM_TF_REPO=https://github.com/ARM-software/arm-trusted-firmware.git EDK2_REPO=https://github.com/tianocore/edk2.git EDK2_PLATFORMS_REPO=https://github.com/tianocore/edk2-platforms.git EDK2_NON_OSI_REPO=https://github.com/tianocore/edk2-non-osi.git UEFI_TOOLS_REPO=https://git.linaro.org/uefi/uefi-tools.git ARM_TF_HASH=9fd2f13bd608832260300640970f73c62357c684 EDK2_HASH=6791175f058837b621623d4adf873fcf8cb20e10 EDK2_PLATFORMS_HASH=a235eabe39fbd458734fa69d38332317c9f7cf11 EDK2_NON_OSI_HASH=1aaec6758370c441b91e79c6430f7c3a56d55130 UEFI_TOOLS_HASH=bcaa91c87f170c6de629f57cee06ce1368249a3e config_git() { git config --global user.name >/dev/null if [ $? -ne 0 ]; then git config --global user.name "Linaro Buildbot" fi git config --global user.email >/dev/null if [ $? -ne 0 ]; then git config --global user.email "nobody@linaro.org" fi } REPO_ORIGIN= REPO_HASH= set_current_repo() { case $1 in arm-trusted-firmware) REPO_ORIGIN=$ARM_TF_REPO REPO_HASH=$ARM_TF_HASH ;; edk2) REPO_ORIGIN=$EDK2_REPO REPO_HASH=$EDK2_HASH ;; edk2-platforms) REPO_ORIGIN=$EDK2_PLATFORMS_REPO REPO_HASH=$EDK2_PLATFORMS_HASH ;; edk2-non-osi) REPO_ORIGIN=$EDK2_NON_OSI_REPO REPO_HASH=$EDK2_NON_OSI_HASH ;; uefi-tools) REPO_ORIGIN=$UEFI_TOOLS_REPO REPO_HASH=$UEFI_TOOLS_HASH ;; *) echo "Invalid repository '$1'" >&2 exit 1 ;; esac echo REPO_ORIGIN=$REPO_ORIGIN echo REPO_HASH=$REPO_HASH } update_repo() { set_current_repo $1 cd $1 CURRENT_ORIGIN=`git config --get remote.origin.url` if [ $REPO_ORIGIN != $CURRENT_ORIGIN ]; then echo "Existing checkout of '$1' has unexpected origin '$REPO_ORIGIN'" >&2 exit 1 fi git checkout master [ $? -ne 0 ] && echo "Failed to check out master branch!" >&2 && exit 1 git fetch origin [ $? -ne 0 ] && echo "Failed to fetch from '$CURRENT_ORIGIN'!" >&2 && exit 1 git reset --hard $REPO_HASH [ $? -ne 0 ] && echo "Failed to reset '$1' to '$REPO_HASH'!" >&2 && exit 1 cd - } clone_repo() { set_current_repo $1 echo git clone $REPO_ORIGIN git clone $REPO_ORIGIN cd $1 git reset --hard $REPO_HASH [ $? -ne 0 ] && echo "Failed to reset '$1' to '$REPO_HASH'!" >&2 && exit 1 cd - } get_repo() { TARGET_DIR=$1 if [ -d $TARGET_DIR ]; then update_repo $TARGET_DIR else clone_repo $TARGET_DIR fi } patch_repo() { PATCH_DIR="$PWD/patches" TARGET_DIR="$PWD/$1" if [ ! -d "patches/$1" ]; then git rev-parse HEAD return fi echo "Patching '$1'" cd $TARGET_DIR for file in "$PATCH_DIR"/"$1"/*.patch; do echo git am --keep-cr $file git am --keep-cr $file [ $? -eq 0 ] || exit 1 done git rev-parse HEAD cd - } build_all() { echo ./uefi-tools/edk2-build.sh $BUILD_OPTIONS all ./uefi-tools/edk2-build.sh $BUILD_OPTIONS all } copy_images() { EDK2_NON_OSI_DIR=`readlink -f edk2-non-osi` # Used in expansion of $IMAGES below PLATFORMS=`uefi-tools/parse-platforms.py $CONFIG_OPTIONS list` for platform in $PLATFORMS; do echo PLATFORM=$platform IMAGE_DIR="`uefi-tools/parse-platforms.py $CONFIG_OPTIONS -p $platform -o UEFI_IMAGE_DIR get`" IMAGES="`uefi-tools/parse-platforms.py $CONFIG_OPTIONS -p $platform images`" DEBUG_DIR="$PWD/out/debug/$platform/" RELEASE_DIR="$PWD/out/release/$platform/" echo "Copying images for platform '$platform':" pushd Build/$IMAGE_DIR/RELEASE_*/FV/ >/dev/null 2>&1 if [ $? -eq 0 ]; then mkdir -p "$RELEASE_DIR" cp `eval echo $IMAGES` $RELEASE_DIR popd >/dev/null fi pushd Build/$IMAGE_DIR/DEBUG_*/FV/ >/dev/null 2>&1 if [ $? -eq 0 ]; then mkdir -p "$DEBUG_DIR" cp `eval echo $IMAGES` $DEBUG_DIR popd >/dev/null fi done } checksum_images() { for dir in out/*/*; do cd $dir sha256sum * > SHA256SUMS cd - >/dev/null done } BUILD_OPTIONS="$BUILD_OPTIONS $*" config_git for repo in arm-trusted-firmware edk2 edk2-platforms edk2-non-osi uefi-tools do echo "$repo" get_repo $repo patch_repo $repo done rm -rf Build NUM_PLATFORMS=`uefi-tools/parse-platforms.py $CONFIG_OPTIONS list | wc -l` NUM_BUILDS=$(($NUM_PLATFORMS * 2)) build_all NUM_FAILED=$? if [ $NUM_FAILED -lt $NUM_BUILDS ]; then copy_images checksum_images fi