#!/bin/bash

# This build script is for running the Jenkins builds using docker.

# Trace bash processing
set -x

# Default variables
WORKSPACE=${WORKSPACE:-${HOME}/${RANDOM}${RANDOM}}
BOARD_DEFCONFIG=${BOARD_DEFCONFIG:-ast_g5_defconfig}
http_proxy=${http_proxy:-}

# Timestamp for job
echo "Build started, $(date)"

# Configure docker build
if [[ -n "${http_proxy}" ]]; then
    PROXY="RUN echo \"Acquire::http::Proxy \\"\"${http_proxy}/\\"\";\" > /etc/apt/apt.conf.d/000apt-cacher-ng-proxy"
fi

Dockerfile=$(cat << EOF
FROM ubuntu:16.04

${PROXY}

ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -yy \
	make bc gcc gcc-arm-linux-gnueabi

RUN grep -q ${GROUPS[0]} /etc/group || groupadd -g ${GROUPS[0]} ${USER}
RUN grep -q ${UID} /etc/passwd || useradd -d ${HOME} -m -u ${UID} -g ${GROUPS[0]} ${USER}

USER ${USER}
ENV HOME ${HOME}
RUN /bin/bash
EOF
)

# Build the docker container
if ! docker build -t u-boot-build/ubuntu - <<< "${Dockerfile}" ; then
    echo "Failed to build docker container."
    exit 1
fi

# Create the docker run script
export PROXY_HOST=${http_proxy/#http*:\/\/}
export PROXY_HOST=${PROXY_HOST/%:[0-9]*}
export PROXY_PORT=${http_proxy/#http*:\/\/*:}

mkdir -p "${WORKSPACE}"

cat > "${WORKSPACE}"/build.sh << EOF_SCRIPT
#!/bin/bash

set -x

cd "${WORKSPACE}"

gcc --version
arm-linux-gnueabi-gcc --version

# Go into the source directory (the script will put us in a build subdir)
cd u-boot
CROSS_COMPILE=arm-linux-gnueabi- make ${BOARD_DEFCONFIG}
CROSS_COMPILE=arm-linux-gnueabi- make

EOF_SCRIPT

chmod a+x "${WORKSPACE}"/build.sh

# Run the docker container, execute the build script we just built
docker run --rm=true -e WORKSPACE="${WORKSPACE}" --user="${USER}" \
    -w "${HOME}" -v "${HOME}":"${HOME}" -t u-boot-build/ubuntu \
    "${WORKSPACE}"/build.sh
