Files
docker/android/Dockerfile
T
2026-05-05 21:58:43 +03:00

126 lines
8.7 KiB
Docker

ARG DOCKER_PREFIX=wapmobil/
FROM ${DOCKER_PREFIX}debian-base
ARG JOBS_COUNT=4
ARG QT_DOWNLOAD_SERVER=shstk.ru/files
ENV CUR_SODIUM_VERSION=1.0.18
ENV CUR_FFTW_VERSION=3.3.8
ENV CUR_QT_VERSION_MAJOR=5.14
ENV CUR_QT_VERSION=5.14.1
# dev soft for our SDK
RUN mkdir -p /usr/share/man/man1 && apt-get update \
&& apt-get install -y cpio libglu1-mesa-dev libgl1-mesa-dev libwayland-dev libncurses-dev flex bison gperf \
python python-pip python-setuptools python-serial python-click python-cryptography python-future python-pyparsing python-pyelftools \
ccache libffi-dev libssl-dev doxygen graphviz libx11-dev libxkbcommon-dev libpkgconfig-perl libfreetype6-dev libfontconfig1-dev \
lzma-dev liblzma-dev libxml2-dev libbz2-dev libmpc-dev libmpfr-dev libgmp-dev libicu-dev libusb-1.0-0-dev libreadline-dev \
build-essential android-sdk openjdk-11-jdk && rm -rf /var/cache/apt/archives/*
# Android SDK and NDK
WORKDIR /soft/android
ENV ANDROID_HOME=/usr/lib/android-sdk
ENV ANDROID_NDK_HOME=${ANDROID_HOME}/ndk-bundle
ENV ANDROID_TOOLCHAIN=${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake
ENV NDK_PLATFORM="android-21"
RUN wget -nv -O commandlinetools.zip https://dl.google.com/android/repository/commandlinetools-linux-6200805_latest.zip?hl=ru \
&& unzip -o commandlinetools.zip -d ${ANDROID_HOME} && rm -f commandlinetools.zip
RUN yes | ${ANDROID_HOME}/tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} --licenses
RUN ${ANDROID_HOME}/tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} --update
RUN ${ANDROID_HOME}/tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} "platforms;android-21" "platforms;android-29" "platforms;android-30" "platforms;android-31" "platforms;android-32" "platforms;android-33" "platforms;android-34" "platforms;android-35" "ndk-bundle" "build-tools;28.0.3" "platform-tools" "tools"
COPY android.toolchain.cmake.add /soft/android/
RUN cat /soft/android/android.toolchain.cmake.add >> ${ANDROID_TOOLCHAIN}
RUN mkdir -p /soft/android/armeabi-v7a && mkdir -p /soft/android/arm64-v8a && mkdir -p /soft/android/x86 && mkdir -p /soft/android/x86_64
# sodium
WORKDIR /soft
RUN curl -s https://download.libsodium.org/libsodium/releases/libsodium-${CUR_SODIUM_VERSION}.tar.gz \
-o libsodium-${CUR_SODIUM_VERSION}.tar.gz \
&& tar -xf libsodium-${CUR_SODIUM_VERSION}.tar.gz -C /soft \
&& rm -f libsodium-${CUR_SODIUM_VERSION}.tar.gz
WORKDIR /soft/libsodium-${CUR_SODIUM_VERSION}
RUN TARGET_ARCH=armv7-a \
CFLAGS="-O3 -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -marm -march=armv7-a" \
ARCH=arm \
HOST_COMPILER=arm-linux-androideabi \
dist-build/android-build.sh && \
cp -rfv /soft/libsodium-${CUR_SODIUM_VERSION}/libsodium-android-armv7-a/* /soft/android/armeabi-v7a/ && \
rm -rf /soft/libsodium-${CUR_SODIUM_VERSION}/libsodium-android-* && \
make distclean && rm -rf ./android-toolchain*
RUN TARGET_ARCH=armv8-a \
CFLAGS="-O3 -march=armv8-a" \
ARCH=arm64 \
HOST_COMPILER=aarch64-linux-android \
dist-build/android-build.sh && \
cp -rfv /soft/libsodium-${CUR_SODIUM_VERSION}/libsodium-android-armv8-a/* /soft/android/arm64-v8a/ && \
rm -rf /soft/libsodium-${CUR_SODIUM_VERSION}/libsodium-android-* && \
make distclean && rm -rf ./android-toolchain*
RUN TARGET_ARCH=i686 \
CFLAGS="-O3 -march=i686" \
ARCH=x86 \
HOST_COMPILER=i686-linux-android \
dist-build/android-build.sh && \
cp -rfv /soft/libsodium-${CUR_SODIUM_VERSION}/libsodium-android-i686/* /soft/android/x86/ && \
rm -rf /soft/libsodium-${CUR_SODIUM_VERSION}/libsodium-android-* && \
make distclean && rm -rf ./android-toolchain*
RUN TARGET_ARCH=westmere \
CFLAGS="-O3 -march=westmere" \
ARCH=x86_64 \
HOST_COMPILER=x86_64-linux-android \
dist-build/android-build.sh && \
cp -rfv /soft/libsodium-${CUR_SODIUM_VERSION}/libsodium-android-westmere/* /soft/android/x86_64/ && \
rm -rf /soft/libsodium-${CUR_SODIUM_VERSION}/libsodium-android-* && \
make distclean && rm -rf ./android-toolchain*
WORKDIR /soft
RUN rm -rf /soft/libsodium-*
# fftw3
WORKDIR /soft
RUN wget -nv http://www.fftw.org/fftw-${CUR_FFTW_VERSION}.tar.gz \
&& tar -xf fftw-${CUR_FFTW_VERSION}.tar.gz -C /soft \
&& rm -f fftw-${CUR_FFTW_VERSION}.tar.gz
WORKDIR /soft/fftw-${CUR_FFTW_VERSION}_build
ENV _CUR_ABI=armeabi-v7a
RUN cmake -DCMAKE_INSTALL_PREFIX=/soft/android/${_CUR_ABI} -DENABLE_FLOAT=0 -DENABLE_LONG_DOUBLE=0 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${ANDROID_TOOLCHAIN} -DANDROID_PLATFORM=${NDK_PLATFORM} -DANDROID_ABI=${_CUR_ABI} /soft/fftw-${CUR_FFTW_VERSION} && make install -j${JOBS_COUNT} && rm -rf ./*
RUN cmake -DCMAKE_INSTALL_PREFIX=/soft/android/${_CUR_ABI} -DENABLE_FLOAT=1 -DENABLE_LONG_DOUBLE=0 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${ANDROID_TOOLCHAIN} -DANDROID_PLATFORM=${NDK_PLATFORM} -DANDROID_ABI=${_CUR_ABI} /soft/fftw-${CUR_FFTW_VERSION} && make install -j${JOBS_COUNT} && rm -rf ./*
RUN cmake -DCMAKE_INSTALL_PREFIX=/soft/android/${_CUR_ABI} -DENABLE_FLOAT=0 -DENABLE_LONG_DOUBLE=1 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${ANDROID_TOOLCHAIN} -DANDROID_PLATFORM=${NDK_PLATFORM} -DANDROID_ABI=${_CUR_ABI} /soft/fftw-${CUR_FFTW_VERSION} && make install -j${JOBS_COUNT} && rm -rf ./*
ENV _CUR_ABI=arm64-v8a
RUN cmake -DCMAKE_INSTALL_PREFIX=/soft/android/${_CUR_ABI} -DENABLE_FLOAT=0 -DENABLE_LONG_DOUBLE=0 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${ANDROID_TOOLCHAIN} -DANDROID_PLATFORM=${NDK_PLATFORM} -DANDROID_ABI=${_CUR_ABI} /soft/fftw-${CUR_FFTW_VERSION} && make install -j${JOBS_COUNT} && rm -rf ./*
RUN cmake -DCMAKE_INSTALL_PREFIX=/soft/android/${_CUR_ABI} -DENABLE_FLOAT=1 -DENABLE_LONG_DOUBLE=0 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${ANDROID_TOOLCHAIN} -DANDROID_PLATFORM=${NDK_PLATFORM} -DANDROID_ABI=${_CUR_ABI} /soft/fftw-${CUR_FFTW_VERSION} && make install -j${JOBS_COUNT} && rm -rf ./*
RUN cmake -DCMAKE_INSTALL_PREFIX=/soft/android/${_CUR_ABI} -DENABLE_FLOAT=0 -DENABLE_LONG_DOUBLE=1 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${ANDROID_TOOLCHAIN} -DANDROID_PLATFORM=${NDK_PLATFORM} -DANDROID_ABI=${_CUR_ABI} /soft/fftw-${CUR_FFTW_VERSION} && make install -j${JOBS_COUNT} && rm -rf ./*
ENV _CUR_ABI=x86
RUN cmake -DCMAKE_INSTALL_PREFIX=/soft/android/${_CUR_ABI} -DENABLE_FLOAT=0 -DENABLE_LONG_DOUBLE=0 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${ANDROID_TOOLCHAIN} -DANDROID_PLATFORM=${NDK_PLATFORM} -DANDROID_ABI=${_CUR_ABI} /soft/fftw-${CUR_FFTW_VERSION} && make install -j${JOBS_COUNT} && rm -rf ./*
RUN cmake -DCMAKE_INSTALL_PREFIX=/soft/android/${_CUR_ABI} -DENABLE_FLOAT=1 -DENABLE_LONG_DOUBLE=0 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${ANDROID_TOOLCHAIN} -DANDROID_PLATFORM=${NDK_PLATFORM} -DANDROID_ABI=${_CUR_ABI} /soft/fftw-${CUR_FFTW_VERSION} && make install -j${JOBS_COUNT} && rm -rf ./*
RUN cmake -DCMAKE_INSTALL_PREFIX=/soft/android/${_CUR_ABI} -DENABLE_FLOAT=0 -DENABLE_LONG_DOUBLE=1 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${ANDROID_TOOLCHAIN} -DANDROID_PLATFORM=${NDK_PLATFORM} -DANDROID_ABI=${_CUR_ABI} /soft/fftw-${CUR_FFTW_VERSION} && make install -j${JOBS_COUNT} && rm -rf ./*
ENV _CUR_ABI=x86_64
RUN cmake -DCMAKE_INSTALL_PREFIX=/soft/android/${_CUR_ABI} -DENABLE_FLOAT=0 -DENABLE_LONG_DOUBLE=0 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${ANDROID_TOOLCHAIN} -DANDROID_PLATFORM=${NDK_PLATFORM} -DANDROID_ABI=${_CUR_ABI} /soft/fftw-${CUR_FFTW_VERSION} && make install -j${JOBS_COUNT} && rm -rf ./*
RUN cmake -DCMAKE_INSTALL_PREFIX=/soft/android/${_CUR_ABI} -DENABLE_FLOAT=1 -DENABLE_LONG_DOUBLE=0 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${ANDROID_TOOLCHAIN} -DANDROID_PLATFORM=${NDK_PLATFORM} -DANDROID_ABI=${_CUR_ABI} /soft/fftw-${CUR_FFTW_VERSION} && make install -j${JOBS_COUNT} && rm -rf ./*
RUN cmake -DCMAKE_INSTALL_PREFIX=/soft/android/${_CUR_ABI} -DENABLE_FLOAT=0 -DENABLE_LONG_DOUBLE=1 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${ANDROID_TOOLCHAIN} -DANDROID_PLATFORM=${NDK_PLATFORM} -DANDROID_ABI=${_CUR_ABI} /soft/fftw-${CUR_FFTW_VERSION} && make install -j${JOBS_COUNT} && rm -rf ./*
# Qt
WORKDIR /soft/android
RUN wget -nv http://${QT_DOWNLOAD_SERVER}/qt-android-${CUR_QT_VERSION}.zip \
&& unzip -o qt-android-${CUR_QT_VERSION}.zip -d /soft/android/qt \
&& rm -f qt-android-${CUR_QT_VERSION}.zip
WORKDIR /soft/android/qt/lib/cmake/Qt5
COPY Qt5Config.patch /soft/android/qt/lib/cmake/Qt5
RUN patch < Qt5Config.patch
ENV BUILD_TYPE=Release
WORKDIR /soft