This commit is contained in:
2026-05-06 21:01:18 +03:00
parent 4b99344790
commit 40b02bc3e0
29 changed files with 271 additions and 3 deletions
+209
View File
@@ -0,0 +1,209 @@
ARG DOCKER_PREFIX=wapmobil/
ARG DOCKER_BITS=
FROM ${DOCKER_PREFIX}windows-base-${DOCKER_BITS}
ENV WIN_TRIPPLET=${WIN_ARCH}-w64-mingw32
ENV CROSS_COMPILE=${WIN_TRIPPLET}-
ENV SYSROOT=/usr/lib/gcc/${WIN_TRIPPLET}/${MINGW_VERSION}-posix
# w64-mingw32 soft (prepare, strip)
RUN update-alternatives --set ${WIN_TRIPPLET}-g++ /usr/bin/${WIN_TRIPPLET}-g++-posix \
&& update-alternatives --set ${WIN_TRIPPLET}-gcc /usr/bin/${WIN_TRIPPLET}-gcc-posix
RUN ${WIN_TRIPPLET}-strip -v --strip-unneeded /usr/${WIN_TRIPPLET}/lib/*.dll && \
${WIN_TRIPPLET}-strip -v --strip-unneeded ${SYSROOT}/*.dll
RUN mkdir -p ${INSTALL_DIR}/bin/ \
&& cp -v ${SYSROOT}/libgcc_*.dll ${INSTALL_DIR}/bin/ \
&& cp -v ${SYSROOT}/libstdc++-6.dll ${INSTALL_DIR}/bin/ \
&& cp -v /usr/${WIN_TRIPPLET}/lib/libwinpthread-1.dll ${INSTALL_DIR}/bin/
#
# Ready-to-use libraries and tools
# unpack only
#
WORKDIR /soft
# RPC
RUN unzip -o rpc_x${WIN_BITS}.zip -d ${INSTALL_DIR}/lib
# fxc
RUN unzip -o /soft/fxc2.zip -d /soft/ \
&& echo -e "#! /bin/sh\nwine /soft/fxc2/fxc.exe \$*" > /usr/sbin/fxc.exe \
&& chmod +x /usr/sbin/fxc.exe
# OpenCL
RUN unzip -o opencl_win_x${WIN_BITS}.zip -d ${INSTALL_DIR}/
# mysql
RUN unzip -o /soft/MySQL_C_x${WIN_BITS}.zip -d ${SYSROOT}/ \
&& cp ${SYSROOT}/libmysql.dll ${INSTALL_DIR}/bin/
# postgresql
RUN unzip -o /soft/postgresql_x${WIN_BITS}.zip -d ${SYSROOT}/ \
&& cp ${SYSROOT}/lib/*.dll ${INSTALL_DIR}/bin/
# microhttpd
RUN mkdir -p /soft/tmp && cd /soft/tmp \
&& wget https://ftpmirror.gnu.org/libmicrohttpd/libmicrohttpd-latest-w32-bin.zip \
&& unzip -o /soft/tmp/*.zip -d /soft/tmp \
&& cp -rfv /soft/tmp/libmicrohttpd-*-w32-bin/${WIN_ARCH2}/MinGW/static/mingw${WIN_BITS}/* ${INSTALL_DIR}/ \
&& rm -rf /soft/tmp
# curl
#RUN git clone -b curl-${CUR_CURL_VERSION} --depth 1 https://github.com/curl/curl \
# && mkdir curl_build && cd curl_build \
# && cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN} -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC_LIBS=1 -DBUILD_SHARED_LIBS=0 -DBUILD_LIBCURL_DOCS=0 -DBUILD_MISC_DOCS=0 ../curl \
# && make -j${JOBS_COUNT} && make install && cd /soft && rm -rf curl curl_build
RUN unzip -o /soft/curl-8.11.0_2-win${WIN_BITS}-mingw.zip -d /soft/tmp \
&& cp -rfv /soft/tmp/curl*win${WIN_BITS}-mingw/bin/* ${INSTALL_DIR}/bin/ \
&& cp -rfv /soft/tmp/curl*win${WIN_BITS}-mingw/lib/* ${INSTALL_DIR}/lib/ \
&& cp -rfv /soft/tmp/curl*win${WIN_BITS}-mingw/include/* ${INSTALL_DIR}/include/ \
&& rm -rf /soft/tmp
#
# Build another libraries and tools
# compile and install
#
# GTest
WORKDIR /soft
RUN git clone -b v1.17.x https://github.com/google/googletest.git \
&& mkdir googletest/build && cd googletest/build \
&& cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN} .. \
&& make -j${JOBS_COUNT} && make install && cd /soft && rm -rf googletest
# 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 \
&& mkdir -p ${INSTALL_DIR}/build/sodium && cd ${INSTALL_DIR}/build/sodium \
&& sh -c 'CFLAGS="-O3 -fomit-frame-pointer ${SODIUM_M_ARG}" LDFLAGS="-O3 -fomit-frame-pointer ${SODIUM_M_ARG}" /soft/libsodium-${CUR_SODIUM_VERSION}/configure --host=${WIN_TRIPPLET} --prefix=${INSTALL_DIR}/ --exec-prefix=${INSTALL_DIR} && make install -j${JOBS_COUNT}' \
&& cd /soft && rm -rf ${INSTALL_DIR}/build/sodium && rm -rf /soft/libsodium-*
# fftw3
WORKDIR /soft
RUN wget -v 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 \
&& cd /soft/fftw-* && patch < /soft/fftw.cmake.patch \
&& mkdir -p ${INSTALL_DIR}/build/fftw3 && cd ${INSTALL_DIR}/build/fftw3 \
&& cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_FLOAT=0 -DENABLE_LONG_DOUBLE=0 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN} /soft/fftw-* \
&& make install -j${JOBS_COUNT} && rm -rf ./* \
&& cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_FLOAT=1 -DENABLE_LONG_DOUBLE=0 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN} /soft/fftw-* \
&& make install -j${JOBS_COUNT} && rm -rf ./* \
&& cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_FLOAT=0 -DENABLE_LONG_DOUBLE=1 -DENABLE_QUAD_PRECISION=0 -DENABLE_THREADS=1 -DWITH_COMBINED_THREADS=1 -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN} /soft/fftw-* \
&& make install -j${JOBS_COUNT} && rm -rf ./* \
&& rm -rf /soft/fftw-*
# assimp
WORKDIR /soft
RUN wget -v https://github.com/assimp/assimp/archive/v${CUR_ASSIMP_VERSION}.tar.gz \
&& tar -xf v${CUR_ASSIMP_VERSION}.tar.gz -C /soft \
&& rm -f v${CUR_ASSIMP_VERSION}.tar.gz pax_global_header \
&& mkdir -p ${INSTALL_DIR}/build/assimp && cd ${INSTALL_DIR}/build/assimp \
&& cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release -DASSIMP_BUILD_ASSIMP_TOOLS=0 -DASSIMP_BUILD_TESTS=0 -DASSIMP_WARNINGS_AS_ERRORS=0 -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN} /soft/assimp-* \
&& make install -j${JOBS_COUNT} && rm -rf ./* && rm -rf /soft/assimp-*
# markdown
RUN mkdir -p /soft/discount-${CUR_DISCOUNT_VERSION}/cmake && mkdir -p /soft/linux/build/discount && mkdir -p ${INSTALL_DIR}/build/discount
WORKDIR /soft
RUN wget -v https://github.com/Orc/discount/archive/v${CUR_DISCOUNT_VERSION}.tar.gz \
&& tar -xf v${CUR_DISCOUNT_VERSION}.tar.gz -C /soft \
&& rm -f v${CUR_DISCOUNT_VERSION}.tar.gz
RUN sed -i 's/DESTRUCTOR/ /' /soft/discount-${CUR_DISCOUNT_VERSION}/setup.c
WORKDIR /soft/discount-${CUR_DISCOUNT_VERSION}/cmake
RUN patch < /soft/discount.cmake.patch
WORKDIR /soft/linux/build/discount
RUN cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release -DDISCOUNT_ONLY_LIBRARY=1 /soft/discount-${CUR_DISCOUNT_VERSION}/cmake && make -j2 && mv mktags .. && rm -rf ./* \
&& mkdir -p ${INSTALL_DIR}/build/discount && mv /soft/linux/build/mktags /usr/sbin/
WORKDIR ${INSTALL_DIR}/build/discount
RUN cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN} -DDISCOUNT_ONLY_LIBRARY=1 /soft/discount-*/cmake \
&& make install -j${JOBS_COUNT} && rm -rf ./* && rm -rf /soft/discount-*
# OpenSSL
#WORKDIR /soft
#RUN wget -v https://github.com/openssl/openssl/releases/download/openssl-${CUR_OPENSSL_VERSION}/openssl-${CUR_OPENSSL_VERSION}.tar.gz \
# && tar -xf openssl-${CUR_OPENSSL_VERSION}.tar.gz -C /soft \
# && rm -f openssl-${CUR_OPENSSL_VERSION}.tar.gz \
# && mkdir -p ${INSTALL_DIR}/build/openssl && cd ${INSTALL_DIR}/build/openssl \
# && /soft/openssl-${CUR_OPENSSL_VERSION}/Configure --cross-compile-prefix=${WIN_TRIPPLET}- \
# --prefix=${INSTALL_DIR}/ --release no-idea no-mdc2 no-rc5 no-tests shared mingw \
# && make -j${JOBS_COUNT} && make install \
# && cd /soft && rm -rf ${INSTALL_DIR}/build/openssl && rm -rf /soft/openssl-*
RUN wget -nv https://github.com/openssl/openssl/archive/OpenSSL_${CUR_OPENSSL_VERSION}.tar.gz \
&& tar -xf OpenSSL_${CUR_OPENSSL_VERSION}.tar.gz -C /soft \
&& rm -f OpenSSL_${CUR_OPENSSL_VERSION}.tar.gz \
&& mkdir -p ${INSTALL_DIR}/build/openssl && cd ${INSTALL_DIR}/build/openssl \
&& /soft/openssl-OpenSSL_${CUR_OPENSSL_VERSION}/Configure --cross-compile-prefix=${WIN_TRIPPLET}- \
--prefix=${INSTALL_DIR}/ --release no-idea no-mdc2 no-rc5 no-tests shared mingw \
&& make -j${JOBS_COUNT} && make install \
&& cd /soft && rm -rf ${INSTALL_DIR}/build/openssl && rm -rf /soft/openssl-OpenSSL_*
# Qt
ENV QT_SRC=/soft/qt-everywhere-src-${CUR_QT_VERSION}
WORKDIR /soft
RUN wget -v https://mirrors.ustc.edu.cn/qtproject/archive/qt/${CUR_QT_VERSION_MAJOR}/${CUR_QT_VERSION}/single/qt-everywhere-opensource-src-${CUR_QT_VERSION}.tar.xz \
&& tar -xf qt-everywhere-opensource-src-${CUR_QT_VERSION}.tar.xz -C /soft \
&& rm -f qt-everywhere-opensource-src-${CUR_QT_VERSION}.tar.xz \
&& cd ${QT_SRC}/qtdeclarative/src/plugins/scenegraph/d3d12 \
&& patch < /soft/qt-5.15.18-qml-sg-d3d12-cross.patch \
&& cd ${QT_SRC}/qtconnectivity/src/bluetooth \
&& patch < /soft/qt-5.15.18-bluetooth-mingw.patch \
&& cd ${QT_SRC}/qtlocation/src/3rdparty/mapbox-gl-native/include/mbgl/util \
&& patch < /soft/qt-5.15.18-location-mbgl-util-include.patch \
&& cd ${QT_SRC}/qtlocation/src/3rdparty/mapbox-gl-native/deps/rapidjson/1.1.0/include/rapidjson \
&& patch < /soft/qt-5.15.18-location-mbgl-rapidjson.patch \
&& cd ${QT_SRC}/qtlocation/src/3rdparty/mapbox-gl-native/deps/variant/1.1.4/include/mapbox \
&& patch < /soft/qt-5.15.18-location-mbgl-mapbox-include.patch \
&& cd ${QT_SRC}/qttools/src/assistant/qcollectiongenerator \
&& patch < /soft/qt-5.15.18-qcollectiongenerator.patch \
&& mkdir -p ${INSTALL_DIR}/build/qt \
&& cd ${INSTALL_DIR}/build/qt \
&& ${QT_SRC}/configure -opensource -confirm-license -release -shared -no-pch -silent \
-xplatform win32-g++ -extprefix "${INSTALL_DIR}" -c++std c++17 \
-sysroot ${SYSROOT} -gcc-sysroot -device-option CROSS_COMPILE=/usr/bin/${WIN_TRIPPLET}- \
-opengl desktop -qt-libpng -system-zlib -qt-pcre -no-xcb \
-make tools -nomake tests -nomake examples -no-compile-examples \
-skip qtwebengine -skip qtwebglplugin -skip doc -skip qt3d -skip qtactiveqt -skip qtquick3d \
-openssl-linked OPENSSL_PREFIX="${INSTALL_DIR}/" \
PSQL_INCDIR="${SYSROOT}/include/postgresql" PSQL_LIBDIR="${SYSROOT}/lib" \
&& make -j${JOBS_QT_COUNT} && make install -j${JOBS_QT_COUNT} && rm -rf ./* && rm -rf /soft/qt-everywhere-src-*
# OpenCV
WORKDIR /soft
RUN wget -v https://github.com/opencv/opencv/archive/refs/tags/${CUR_OPENCV_VERSION}.tar.gz \
&& tar -xf ${CUR_OPENCV_VERSION}.tar.gz -C /soft \
&& rm -f ${CUR_OPENCV_VERSION}.tar.gz \
&& mkdir -p ${INSTALL_DIR}/build/opencv && cd ${INSTALL_DIR}/build/opencv \
&& cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_LIBJPEG_TURBO_SIMD=0 -DBUILD_PERF_TESTS=0 -DBUILD_TESTS=0 -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN} /soft/opencv-* \
&& make install -j${JOBS_COUNT} && rm -rf ./* && rm -rf /soft/opencv-*
# HDF5
ENV CUR_HDF5_VERSION=1_14_3
WORKDIR /soft
RUN git clone -b hdf5_${CUR_HDF5_VERSION} --depth 1 https://github.com/HDFGroup/hdf5.git \
&& mkdir hdf_build && cd hdf_build \
&& cmake -C/soft/hdf5_cache.cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN} -DCMAKE_BUILD_TYPE=Release -DHDF5_BUILD_CPP_LIB=1 -DBUILD_TESTING=0 ../hdf5 \
&& make -j${JOBS_COUNT} && make install && cd /soft && rm -rf hdf5 hdf5_build /soft/hdf5_cache.cmake
RUN chmod +r ${INSTALL_DIR}/bin/*
ENV BUILD_TYPE=Release
WORKDIR /soft