# Docker legacy cross-compiler target (tests and minimal qemu)
#
# Compilers for some of our older targets which we cant currently
# upgrade. Currently:
#
#   libc6.1-dev-alpha-cross: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1054412
#   sh4-linux-user: binaries don't run with bookworm compiler
#
# As we are targeting check-tcg here we only need minimal qemu
# dependencies and the relevant cross compilers.

FROM docker.io/library/debian:11-slim

# Duplicate deb line as deb-src
RUN cat /etc/apt/sources.list | sed "s/^deb\ /deb-src /" >> /etc/apt/sources.list

RUN export DEBIAN_FRONTEND=noninteractive && \
    apt-get update && \
    apt-get install -y eatmydata && \
    eatmydata apt-get dist-upgrade -y && \
    apt build-dep -yy qemu

# Add extra build tools and as many cross compilers as we can for testing
RUN DEBIAN_FRONTEND=noninteractive eatmydata \
        apt install -y --no-install-recommends \
        bison \
        ccache \
        clang  \
        flex \
        git \
        ninja-build \
        gcc-alpha-linux-gnu \
        libc6.1-dev-alpha-cross \
        gcc-sh4-linux-gnu \
        libc6-dev-sh4-cross \
        python3-pip \
        python3-setuptools \
        python3-venv \
        python3-wheel && \
        dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt

RUN /usr/bin/pip3 install tomli

ENV QEMU_CONFIGURE_OPTS --disable-system --disable-docs --disable-tools
ENV DEF_TARGET_LIST alpha-linux-user,sh4-linux-user
ENV MAKE /usr/bin/make
# As a final step configure the user (if env is defined)
ARG USER
ARG UID
RUN if [ "${USER}" ]; then \
  id ${USER} 2>/dev/null || useradd -u ${UID} -U ${USER}; fi
