build-environments/linux-mingw/Dockerfile
2023-06-05 14:04:39 -06:00

92 lines
3 KiB
Docker

FROM archlinux:latest
LABEL maintainer="yuzu"
# Add mingw-repo "ownstuff" is a AUR with an up to date mingw64
# Runs pacman -Syu twice in order to work around pacman issues where the first run only updates the
# current distro packages, and the second run actually pulls the updates from the repos.
RUN useradd -m -u 1027 -s /bin/bash yuzu && mkdir -p /tmp/pkgs && \
echo "[ownstuff]" >> /etc/pacman.conf && \
echo "SigLevel = Optional TrustAll" >> /etc/pacman.conf && \
echo "Server = https://martchus.no-ip.biz/repo/arch/ownstuff/os/\$arch" >> /etc/pacman.conf && \
pacman -Syu --noconfirm && \
pacman -Syu --noconfirm && \
pacman -S --needed --noconfirm --noprogressbar \
base-devel \
clang \
polly \
lld \
sudo \
gnupg \
wget \
git \
glslang \
python-pip \
python \
ccache \
p7zip \
cmake \
ninja \
mingw-w64-gcc \
mingw-w64-libusb \
mingw-w64-lz4 \
mingw-w64-nlohmann-json \
mingw-w64-opus \
mingw-w64-qt5-base \
mingw-w64-qt5-declarative \
mingw-w64-qt5-graphicaleffects \
mingw-w64-qt5-multimedia \
mingw-w64-qt5-tools \
mingw-w64-qt5-winextras \
mingw-w64-tools \
mingw-w64-winpthreads \
mingw-w64-zlib \
mingw-w64-zstd \
&& \
pacman -Scc --noconfirm && \
rm -rf /usr/share/man/ /tmp/* /var/tmp/ /usr/{i686-w64-mingw32,lib32} /usr/lib/gcc/i686-w64-mingw32
# Install Boost from yuzu-emu/ext-linux-bin
RUN wget --no-verbose \
https://github.com/yuzu-emu/ext-linux-bin/raw/main/mingw/mingw-w64-boost-1.79.0-1-any.pkg.tar.zst && \
pacman -U --noconfirm mingw-w64-boost-1.79.0-1-any.pkg.tar.zst && \
rm mingw-w64-boost-1.79.0-1-any.pkg.tar.zst
# Setup extra mingw work arounds
RUN pip3 install pefile
# Compatibility with the old Ubuntu MingW image
RUN ln -s /usr/x86_64-w64-mingw32/lib/qt /usr/x86_64-w64-mingw32/lib/qt5
# Give yuzu user sudo access for AUR usage
RUN echo "yuzu ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers
USER 1027
# Build/install small AUR packages
RUN \
# mingw-w64-sdl2
cd && \
git clone https://aur.archlinux.org/mingw-w64-sdl2.git && \
cd mingw-w64-sdl2 && \
# Revert to SDL 2.26.4
git checkout 277c44a && \
# Only build for x86_64
sed -i "s/'i686-w64-mingw32'//g" PKGBUILD && \
makepkg -si --noconfirm --noprogressbar && \
# Get rid of -mwindows from SDL2 CMake configs
sudo sed -i 's/-mwindows//g' /usr/x86_64-w64-mingw32/lib/cmake/SDL2/sdl2-config.cmake && \
# mingw-w64-clang -- MinGW wrapper for host clang
cd && \
git clone https://aur.archlinux.org/mingw-w64-wclang-git.git && \
cd mingw-w64-wclang-git && \
makepkg -si --noconfirm --noprogressbar && \
# mingw-w64-fmt
cd && \
git clone https://aur.archlinux.org/mingw-w64-fmt.git && \
cd mingw-w64-fmt && \
# Only build for x86_64
sed -i 's/i686-w64-mingw32//g' PKGBUILD && \
makepkg -si --noconfirm --noprogressbar --nocheck && \
# cleanup
cd && rm -rf mingw-* && \
sudo sed -i 's/yuzu/#yuzu/g' /etc/sudoers