#!/bin/sh

# Emit a useful diagnostic if something fails:
bb_exit_handler() {
    ret=$?
    case $ret in
    0)  ;;
    *)  case $BASH_VERSION in
        "") echo "WARNING: exit code $ret from a shell command.";;
        *)  echo "WARNING: ${BASH_SOURCE[0]}:${BASH_LINENO[0]} exit $ret from '$BASH_COMMAND'";;
        esac
        exit $ret
    esac
}
trap 'bb_exit_handler' 0
set -e
export AR="x86_64-poky-linux-ar"
export AS="x86_64-poky-linux-as  "
export BUILD_AR="ar"
export BUILD_AS="as "
export BUILD_CC="gcc "
export BUILD_CCLD="gcc "
export BUILD_CFLAGS="-isystem/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/usr/include -pipe"
export BUILD_CPP="gcc  -E"
export BUILD_CPPFLAGS="-isystem/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/usr/include"
export BUILD_CXX="g++ "
export BUILD_CXXFLAGS="-isystem/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/usr/include -pipe"
export BUILD_FC="gfortran "
export BUILD_LD="ld "
export BUILD_LDFLAGS="-L/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/usr/lib -L/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/lib -Wl,-rpath-link,/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/usr/lib -Wl,-rpath-link,/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/lib -Wl,-rpath,/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/usr/lib -Wl,-rpath,/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/lib -Wl,-O1 -Wl,--allow-shlib-undefined -Wl,--dynamic-linker=/data/oblac-provisioner/tmp/sysroots-uninative/x86_64-linux/lib/ld-linux-x86-64.so.2"
export BUILD_NM="nm"
export BUILD_RANLIB="ranlib"
export BUILD_STRIP="strip"
export CC="x86_64-poky-linux-gcc  -m64 -march=corei7 -mtune=corei7 -mfpmath=sse -msse4.2 --sysroot=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot"
export CCACHE_DIR="/home/ubuntu/.ccache"
export CCLD="x86_64-poky-linux-gcc  -m64 -march=corei7 -mtune=corei7 -mfpmath=sse -msse4.2 --sysroot=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot"
export CFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0=/usr/src/debug/ovmf/git-r0 -fdebug-prefix-map=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot= -fdebug-prefix-map=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native= "
export CPP="x86_64-poky-linux-gcc -E --sysroot=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot  -m64 -march=corei7 -mtune=corei7 -mfpmath=sse -msse4.2"
export CPPFLAGS=""
export CXX="x86_64-poky-linux-g++  -m64 -march=corei7 -mtune=corei7 -mfpmath=sse -msse4.2 --sysroot=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot"
export CXXFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0=/usr/src/debug/ovmf/git-r0 -fdebug-prefix-map=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot= -fdebug-prefix-map=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native=  -fvisibility-inlines-hidden"
unset DISTRO
export FC="x86_64-poky-linux-gfortran  -m64 -march=corei7 -mtune=corei7 -mfpmath=sse -msse4.2 --sysroot=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot"
export HOME="/home/ubuntu"
export LC_ALL="en_US.UTF-8"
export LD="x86_64-poky-linux-ld --sysroot=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot  "
export LDFLAGS="-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed"
export LOGNAME="ubuntu"
unset MACHINE
export MAKE="make"
export NM="x86_64-poky-linux-nm"
export OBJCOPY="x86_64-poky-linux-objcopy"
export OBJDUMP="x86_64-poky-linux-objdump"
export PATH="/data/oblac-provisioner/tmp/sysroots-uninative/x86_64-linux/usr/bin:/home/ubuntu/oblac-box-OS/workspace/poky/scripts:/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/usr/bin/x86_64-poky-linux:/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot/usr/bin/crossscripts:/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/usr/sbin:/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/usr/bin:/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/sbin:/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native/bin:/home/ubuntu/oblac-box-OS/workspace/poky/bitbake/bin:/data/oblac-provisioner/tmp/hosttools"
export PKG_CONFIG_DIR="/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot/usr/lib/pkgconfig"
export PKG_CONFIG_DISABLE_UNINSTALLED="yes"
export PKG_CONFIG_LIBDIR="/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot/usr/lib/pkgconfig"
export PKG_CONFIG_PATH="/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot/usr/lib/pkgconfig:/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot/usr/share/pkgconfig"
export PKG_CONFIG_SYSROOT_DIR="/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot"
export PKG_CONFIG_SYSTEM_INCLUDE_PATH="/usr/include"
export PKG_CONFIG_SYSTEM_LIBRARY_PATH="/lib:/usr/lib"
export PSEUDO_DISABLED="1"
export PSEUDO_UNLOAD="1"
export RANLIB="x86_64-poky-linux-ranlib"
export READELF="x86_64-poky-linux-readelf"
unset SHELL
export STRINGS="x86_64-poky-linux-strings"
export STRIP="x86_64-poky-linux-strip"
unset TARGET_ARCH
export TARGET_CFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0=/usr/src/debug/ovmf/git-r0 -fdebug-prefix-map=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot= -fdebug-prefix-map=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native= "
export TARGET_CPPFLAGS=""
export TARGET_CXXFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0=/usr/src/debug/ovmf/git-r0 -fdebug-prefix-map=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot= -fdebug-prefix-map=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot-native= "
export TARGET_LDFLAGS="-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed"
export TERM="xterm-256color"
export TZ="UTC"
export USER="ubuntu"
export base_bindir="/bin"
export base_libdir="/lib"
export base_prefix=""
export base_sbindir="/sbin"
export bindir="/usr/bin"
export datadir="/usr/share"
export docdir="/usr/share/doc"
export exec_prefix="/usr"
export includedir="/usr/include"
export infodir="/usr/share/info"
export libdir="/usr/lib"
export libexecdir="/usr/libexec"
export localstatedir="/var"
export mandir="/usr/share/man"
export nonarch_base_libdir="/lib"
export nonarch_libdir="/usr/lib"
export oldincludedir="/usr/include"
export prefix="/usr"
export sbindir="/usr/sbin"
export servicedir="/srv"
export sharedstatedir="/com"
export sysconfdir="/etc"
export systemd_system_unitdir="/lib/systemd/system"
export systemd_unitdir="/lib/systemd"
export systemd_user_unitdir="/usr/lib/systemd/user"

do_compile() {
    export LFLAGS="-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed"
    PARALLEL_JOBS=""
    OVMF_ARCH="X64"
    if [ "x86_64" != "x86_64" ] ; then
        OVMF_ARCH="IA32"
    fi

    # The build for the target uses BaseTools/Conf/tools_def.template
    # from ovmf-native to find the compiler, which depends on
    # exporting HOST_PREFIX.
    export HOST_PREFIX="x86_64-poky-linux-"

    # BaseTools/Conf gets copied to Conf, but only if that does not
    # exist yet. To ensure that an updated template gets used during
    # incremental builds, we need to remove the copy before we start.
    rm -f `ls /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/git/Conf/*.txt | grep -v ReadMe.txt`

    # /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/ovmf is a well-known location where do_install and
    # do_deploy will be able to find the files.
    rm -rf /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/ovmf
    mkdir /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/ovmf
    OVMF_DIR_SUFFIX="X64"
    if [ "x86_64" != "x86_64" ] ; then
        OVMF_DIR_SUFFIX="Ia32" # Note the different capitalization
    fi
    FIXED_GCCVER=$(fixup_target_tools $(x86_64-poky-linux-gcc  -m64 -march=corei7 -mtune=corei7 -mfpmath=sse -msse4.2 --sysroot=/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/recipe-sysroot -v 2>&1 | tail -n1 | awk '{print $3}'))
    bbnote FIXED_GCCVER is ${FIXED_GCCVER}
    build_dir="/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/git/Build/Ovmf$OVMF_DIR_SUFFIX/RELEASE_${FIXED_GCCVER}"

    bbnote "Building without Secure Boot."
    rm -rf /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/git/Build/Ovmf$OVMF_DIR_SUFFIX
    /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/git/OvmfPkg/build.sh $PARALLEL_JOBS -a $OVMF_ARCH -b RELEASE -t ${FIXED_GCCVER}
    ln ${build_dir}/FV/OVMF.fd /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/ovmf/ovmf.fd
    ln ${build_dir}/FV/OVMF_CODE.fd /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/ovmf/ovmf.code.fd
    ln ${build_dir}/FV/OVMF_VARS.fd /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/ovmf/ovmf.vars.fd
    ln ${build_dir}/${OVMF_ARCH}/Shell.efi /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/ovmf/

    if true; then
        # See CryptoPkg/Library/OpensslLib/Patch-HOWTO.txt and
        # https://src.fedoraproject.org/cgit/rpms/edk2.git/tree/ for
        # building with Secure Boot enabled.
        bbnote "Building with Secure Boot."
        rm -rf /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/git/Build/Ovmf$OVMF_DIR_SUFFIX
        ln -sf openssl-1.1.0e /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/git/CryptoPkg/Library/OpensslLib/openssl
        /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/git/OvmfPkg/build.sh $PARALLEL_JOBS -a $OVMF_ARCH -b RELEASE -t ${FIXED_GCCVER} -DSECURE_BOOT_ENABLE=TRUE 
        ln ${build_dir}/FV/OVMF.fd /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/ovmf/ovmf.secboot.fd
        ln ${build_dir}/FV/OVMF_CODE.fd /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/ovmf/ovmf.secboot.code.fd
        ln ${build_dir}/${OVMF_ARCH}/EnrollDefaultKeys.efi /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/ovmf/
    fi
}

bbnote() {
	if [ -p /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/temp/fifo.68456 ] ; then
		printf "%b\0" "bbnote $*" > /data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/temp/fifo.68456
	else
		echo "NOTE: $*"
	fi
}

fixup_target_tools() {
    case ${1} in
      4.4.*)
        FIXED_GCCVER=GCC44
        ;;
      4.5.*)
        FIXED_GCCVER=GCC45
        ;;
      4.6.*)
        FIXED_GCCVER=GCC46
        ;;
      4.7.*)
        FIXED_GCCVER=GCC47
        ;;
      4.8.*)
        FIXED_GCCVER=GCC48
        ;;
      4.9.*)
        FIXED_GCCVER=GCC49
        ;;
      *)
        FIXED_GCCVER=GCC5
        ;;
    esac
    echo ${FIXED_GCCVER}
}

cd '/data/oblac-provisioner/tmp/work/corei7-64-poky-linux/ovmf/git-r0/git'
do_compile

# cleanup
ret=$?
trap '' 0
exit $ret
