dockcross/common/common.windows
Rainer Sabelka b41256cc2f add osslsigncode tool for Windows
Code-signing of generated executables is usually done with "signtool" on
Windows. When cross-compiling on Linux this tool is not avaiilable,
however, osslsigncode can be used as an replacement.
2021-11-03 16:15:24 +01:00

138 lines
3.9 KiB
Plaintext

#
# 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 2021-10-18
ARG MXE_GIT_TAG=8838ac3938cd8e47424a4cb5d3676d1ae9a4d670
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 \
python \
ruby \
scons \
sed \
unzip \
wget \
wine \
xz-utils \
&& \
#
# 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