# # Before including this script, make sure to set: # # WINEARCH environment variable to either "win64" or "win32" # MXE_TARGET_ARCH argument to either "x86_64" or "i686". See http://mxe.cc/ # MXE_TARGET_THREAD argument to either "" or ".posix". Default is win32. See http://mxe.cc/ # MXE_TARGET_LINK argument to either "static" or "shared" # # For example: # # ENV WINEARCH win64 # ARG MXE_TARGET_ARCH=x86_64 # ARG MXE_TARGET_THREAD= # ARG MXE_TARGET_LINK=shared # # mxe master 2024-07-27 ARG MXE_GIT_TAG=9f349e0de62a4a68bfc0f13d835a6c685dae9daa ENV CMAKE_TOOLCHAIN_FILE /usr/src/mxe/usr/${MXE_TARGET_ARCH}-w64-mingw32.${MXE_TARGET_LINK}${MXE_TARGET_THREAD}/share/cmake/mxe-conf.cmake ARG DEBIAN_FRONTEND=noninteractive # # WINE is used as an emulator for try_run and tests with CMake. # # Other dependencies are from the listed MXE requirements: # http://mxe.cc/#requirements # 'cmake' is omitted because it is installed from source in the base image # RUN \ apt-get update && \ apt-get install --no-install-recommends --yes \ autoconf \ automake \ autopoint \ bash \ bison \ bzip2 \ flex \ gettext \ git \ g++ \ g++-multilib \ gperf \ intltool \ libffi-dev \ libgdk-pixbuf2.0-dev \ libtool-bin \ libltdl-dev \ libssl-dev \ libxml-parser-perl \ libc6-dev-i386 \ lzip \ make \ nsis \ openssl \ osslsigncode \ p7zip-full \ patch \ perl \ pkg-config \ python3 \ ruby \ scons \ sed \ unzip \ wget \ wine \ xz-utils \ python3-mako \ && \ # # Install Wine # dpkg --add-architecture i386 && \ apt-get update && \ apt-get install -y wine32 && \ wine hostname && \ # # Download MXE sources # cd /usr/src && \ git clone https://github.com/mxe/mxe.git && \ cd mxe && \ git checkout ${MXE_GIT_TAG} && \ # # Configure "settings.mk" required to build MXE # cd /usr/src/mxe && \ echo "MXE_TARGETS := ${MXE_TARGET_ARCH}-w64-mingw32.${MXE_TARGET_LINK}${MXE_TARGET_THREAD}" > settings.mk && \ echo "MXE_USE_CCACHE :=" >> settings.mk && \ echo "MXE_PLUGIN_DIRS := plugins/gcc11" >> settings.mk && \ echo "LOCAL_PKG_LIST := cc cmake" >> settings.mk && \ echo ".DEFAULT local-pkg-list:" >> settings.mk && \ echo "local-pkg-list: \$(LOCAL_PKG_LIST)" >> settings.mk && \ # # Build MXE # cd /usr/src/mxe && \ make JOBS=$(nproc) && \ # # Cleanup: By keeping the MXE build system (Makefile, ...), derived images will be able to install # additional packages. # rm -rf log pkg && \ # # Update MXE toolchain file # echo 'set(CMAKE_CROSSCOMPILING_EMULATOR "/usr/bin/wine")' >> ${CMAKE_TOOLCHAIN_FILE} && \ # # Add a sysmbolic link for makensis # ln -s /usr/bin/makensis /usr/bin/${MXE_TARGET_ARCH}-w64-mingw32.${MXE_TARGET_LINK}${MXE_TARGET_THREAD}-makensis && \ # # Replace cmake and cpack binaries # cd /usr/bin && \ rm cmake cpack && \ ln -s /usr/src/mxe/usr/bin/${MXE_TARGET_ARCH}-w64-mingw32.${MXE_TARGET_LINK}${MXE_TARGET_THREAD}-cmake cmake && \ ln -s /usr/src/mxe/usr/bin/${MXE_TARGET_ARCH}-w64-mingw32.${MXE_TARGET_LINK}${MXE_TARGET_THREAD}-cpack cpack && \ # # clean up temporary wine files # rm -rf /tmp/wine-* ENV PATH ${PATH}:/usr/src/mxe/usr/bin ENV CROSS_TRIPLE ${MXE_TARGET_ARCH}-w64-mingw32.${MXE_TARGET_LINK}${MXE_TARGET_THREAD} ENV AS=/usr/src/mxe/usr/bin/${CROSS_TRIPLE}-as \ AR=/usr/src/mxe/usr/bin/${CROSS_TRIPLE}-ar \ CC=/usr/src/mxe/usr/bin/${CROSS_TRIPLE}-gcc \ CPP=/usr/src/mxe/usr/bin/${CROSS_TRIPLE}-cpp \ CXX=/usr/src/mxe/usr/bin/${CROSS_TRIPLE}-g++ \ LD=/usr/src/mxe/usr/bin/${CROSS_TRIPLE}-ld \ FC=/usr/src/mxe/usr/bin/${CROSS_TRIPLE}-gfortran WORKDIR /work