#!/bin/bash
###############################################################################
#
# This build script is for running the QEMU build in a container
#
# It expects to be run in with the qemu source present in the directory called
# '$WORKSPACE/qemu', where WORKSPACE is an environment variable.
#
# In Jenkins configure the git SCM 'Additional Behaviours', 'check-out to a sub
# directory' called 'qemu'.
#
# When building locally set WORKSPACE to be the directory above the qemu
# checkout:
#   git clone https://github.com/qemu/qemu
#   WORKSPACE=$PWD/qemu ~/openbmc-build-scripts/qemu-build.sh
#
###############################################################################
#
# Script Variables:
#  http_proxy         The HTTP address of the proxy server to connect to.
#                     Default: "", proxy is not setup if this is not set
#  WORKSPACE          Path of the workspace directory where the build will
#                     occur, and output artifacts will be produced.
#
###############################################################################
# Trace bash processing
#set -x

# Script Variables:
http_proxy=${http_proxy:-}

if [ -z ${WORKSPACE+x} ]; then
    echo "Please set WORKSPACE variable"
    exit 1
fi

# Determine the architecture
ARCH=$(uname -m)

# Docker Image Build Variables:
img_name=qemu-build

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

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

# Determine the prefix of the Dockerfile's base image
case ${ARCH} in
    "ppc64le")
        DOCKER_BASE="ppc64le/"
        ;;
    "x86_64")
        DOCKER_BASE=""
        ;;
    "aarch64")
        DOCKER_BASE="arm64v8/"
        ;;
    *)
        echo "Unsupported system architecture(${ARCH}) found for docker image"
        exit 1
esac

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

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

set -x

# Go into the build directory
cd ${WORKSPACE}/qemu

gcc --version
git submodule update --init dtc
# disable anything that requires us to pull in X
./configure \
    --target-list=arm-softmmu \
    --disable-spice \
    --disable-docs \
    --disable-gtk \
    --disable-smartcard \
    --disable-usb-redir \
    --disable-libusb \
    --disable-sdl \
    --disable-gnutls \
    --disable-vte \
    --disable-vnc \
    --disable-werror
make clean
make -j4

EOF_SCRIPT

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

# Configure docker build

# !!!
# Keep the base docker image in sync with the image under which we run the
# resulting qemu binary.
# !!!

Dockerfile=$(cat << EOF
FROM ${DOCKER_BASE}ubuntu:jammy

${PROXY}

ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -yy --no-install-recommends \
    bison \
    bzip2 \
    ca-certificates \
    flex \
    gcc \
    git \
    libc6-dev \
    libfdt-dev \
    libglib2.0-dev \
    libpixman-1-dev \
    libslirp-dev \
    make \
    ninja-build \
    python3-venv \
    python3-yaml \
    iputils-ping

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}
EOF
)

if ! docker build -t ${img_name} - <<< "${Dockerfile}" ; then
    echo "Failed to build docker container."
    exit 1
fi

docker run \
    --rm=true \
    -e WORKSPACE="${WORKSPACE}" \
    -w "${HOME}" \
    --user="${USER}" \
    -v "${HOME}":"${HOME}" \
    -t ${img_name} \
    "${WORKSPACE}"/build.sh
