FROM ubuntu:24.04

ARG QT_VERSION=6.11.1
ARG AQTINSTALL_VERSION=3.3.0
ARG ANDROID_COMMAND_LINE_TOOLS_VERSION=15859902
ARG ANDROID_COMMAND_LINE_TOOLS_SHA256=4e4c464f145a7512b57d088ac6c278c03c9eea610886b35a5e0804e74eedf583
ARG ANDROID_NDK_VERSION=27.2.12479018
ARG ANDROID_OPENSSL_COMMIT=32ebe304ff064a9affb699b2185af78e3494f49a

ENV DEBIAN_FRONTEND=noninteractive \
    QT_ROOT=/opt/Qt \
    ANDROID_SDK_ROOT=/opt/android-sdk \
    ANDROID_HOME=/opt/android-sdk \
    ANDROID_NDK_ROOT=/opt/android-sdk/ndk/${ANDROID_NDK_VERSION} \
    JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 \
    PATH=/opt/aqt/bin:/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:${PATH}

RUN apt-get update \
    && apt-get install --yes --no-install-recommends \
        ca-certificates \
        ccache \
        cmake \
        curl \
        file \
        git \
        libavahi-client-dev \
        libdbus-1-3 \
        libegl1 \
        libfontconfig1 \
        libgl1 \
        libx11-6 \
        libx11-xcb1 \
        libxcb-cursor0 \
        libxcb-glx0 \
        libxcb-icccm4 \
        libxcb-image0 \
        libxcb-keysyms1 \
        libxcb-randr0 \
        libxcb-render-util0 \
        libxcb-shape0 \
        libxcb-shm0 \
        libxcb-sync1 \
        libxcb-util1 \
        libxcb-xfixes0 \
        libxcb-xinerama0 \
        libxcb-xkb1 \
        libxcb1 \
        libxkbcommon-x11-0 \
        ninja-build \
        openjdk-21-jdk-headless \
        p7zip-full \
        pkg-config \
        python3 \
        python3-venv \
        unzip \
    && rm -rf /var/lib/apt/lists/*

RUN python3 -m venv /opt/aqt \
    && /opt/aqt/bin/pip install --no-cache-dir "aqtinstall==${AQTINSTALL_VERSION}" \
    && aqt install-qt linux desktop "${QT_VERSION}" linux_gcc_64 \
        -m qtcharts qtwebsockets -O "${QT_ROOT}" \
    && aqt install-qt linux android "${QT_VERSION}" android_arm64_v8a \
        -m qtcharts qtwebsockets -O "${QT_ROOT}" \
    && aqt install-qt linux android "${QT_VERSION}" android_armv7 \
        -m qtcharts qtwebsockets -O "${QT_ROOT}"

RUN mkdir -p "${ANDROID_SDK_ROOT}/cmdline-tools" \
    && curl --fail --location --retry 5 \
        --output /tmp/android-command-line-tools.zip \
        "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_COMMAND_LINE_TOOLS_VERSION}_latest.zip" \
    && echo "${ANDROID_COMMAND_LINE_TOOLS_SHA256}  /tmp/android-command-line-tools.zip" | sha256sum --check \
    && unzip -q /tmp/android-command-line-tools.zip -d "${ANDROID_SDK_ROOT}/cmdline-tools" \
    && mv "${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools" "${ANDROID_SDK_ROOT}/cmdline-tools/latest" \
    && rm /tmp/android-command-line-tools.zip \
    && yes | sdkmanager --licenses >/dev/null \
    && sdkmanager \
        "platform-tools" \
        "platforms;android-36" \
        "build-tools;36.0.0" \
        "ndk;${ANDROID_NDK_VERSION}"

RUN git init "${ANDROID_SDK_ROOT}/android_openssl" \
    && git -C "${ANDROID_SDK_ROOT}/android_openssl" remote add origin https://github.com/KDAB/android_openssl.git \
    && git -C "${ANDROID_SDK_ROOT}/android_openssl" fetch --depth 1 origin "${ANDROID_OPENSSL_COMMIT}" \
    && git -C "${ANDROID_SDK_ROOT}/android_openssl" checkout --detach FETCH_HEAD \
    && rm -rf "${ANDROID_SDK_ROOT}/android_openssl/.git"

# Build dependencies needed by applications using the prebuilt desktop Qt.
# Keep these in a separate layer so changes here do not invalidate the large
# Qt and Android SDK downloads above.
RUN apt-get update \
    && apt-get install --yes --no-install-recommends \
        build-essential \
        libgl1-mesa-dev \
        libglib2.0-0t64 \
    && rm -rf /var/lib/apt/lists/*

ENV LANG=C.UTF-8 \
    LC_ALL=C.UTF-8

WORKDIR /workspace
