build-environments/linux-fresh/Dockerfile
lat9nq c998768fc2 fresh: Remove Qt Web Engine installation
Appears to not have solvable dependencies at the moment, causing the container
to not build. Additionally, we don't ship yuzu with the Web Engine support
compiled anyway.
2023-03-23 19:17:46 -04:00

164 lines
5.6 KiB
Docker

FROM ubuntu:20.04
LABEL maintainer="yuzu"
ENV BOOST_VER=1_81_0
ENV CLANG_VER=14
ENV CMAKE_VER=3.22.6
ENV DEBIAN_FRONTEND=noninteractive
ENV GCC_VER=12.2.0
ENV GNU_BIN_VER=2.40
ENV QT_PKG_VER=515
ENV QT_VER=5.15.2
ENV UBUNTU_VER=focal
# Create a user account yuzu (UID 1027) that the container will run as
RUN useradd -m -u 1027 -s /bin/bash yuzu && \
apt-get update && \
apt-get full-upgrade -y && \
apt-get install --no-install-recommends -y \
apt-utils \
ca-certificates \
gnupg \
software-properties-common \
unzip \
wget \
xz-utils \
# yuzu build requirements
build-essential \
ccache \
git \
libgl-dev \
liblz4-dev \
libpulse-dev \
libudev-dev \
libssl-dev \
libtool \
libwayland-dev \
ninja-build \
pkg-config \
zlib1g-dev \
# AppImage support
appstream \
desktop-file-utils \
file \
libfile-mimeinfo-perl \
patchelf \
zsync \
# FFmpeg build requirements
libdrm-dev \
libva-dev \
libx11-dev \
libxext-dev \
nasm \
# libusb build requirements
autoconf \
automake \
libtool \
libudev-dev \
# apt.llvm.org Clang requirements
gpg-agent \
# vcpkg requirements
curl \
zip \
&& \
# Install updated versions of glslang, git, and Qt from launchpad repositories
add-apt-repository -y ppa:beineri/opt-qt-${QT_VER}-${UBUNTU_VER} && \
add-apt-repository -y ppa:savoury1/graphics && \
add-apt-repository -y ppa:savoury1/multimedia && \
add-apt-repository -y ppa:savoury1/ffmpeg4 && \
add-apt-repository -y ppa:git-core/ppa && \
apt-get update -y && \
apt-get install --no-install-recommends -y \
git \
glslang-dev \
glslang-tools \
libhidapi-dev \
qt${QT_PKG_VER}base \
qt${QT_PKG_VER}tools \
qt${QT_PKG_VER}wayland \
qt${QT_PKG_VER}multimedia \
qt${QT_PKG_VER}x11extras && \
# Install Clang from apt.llvm.org
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \
echo "deb http://apt.llvm.org/${UBUNTU_VER}/ llvm-toolchain-${UBUNTU_VER}-${CLANG_VER} main" >> /etc/apt/sources.list && \
apt-get update -y && \
apt-get install --no-install-recommends -y \
clang-${CLANG_VER} \
lld-${CLANG_VER} \
llvm-${CLANG_VER} \
llvm-${CLANG_VER}-linker-tools && \
ln -s $(which clang-${CLANG_VER}) /usr/bin/clang && \
ln -s $(which clang++-${CLANG_VER}) /usr/bin/clang++ && \
dpkg-reconfigure ccache && \
apt-get clean autoclean && \
apt-get autoremove --yes && \
rm -rf /var/lib/apt /var/lib/dpkg /var/lib/cache /var/lib/log
# Install CMake from upstream
RUN cd /tmp && \
wget --no-verbose https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-linux-x86_64.tar.gz && \
tar xvf cmake-${CMAKE_VER}-linux-x86_64.tar.gz && \
cp -rv cmake-${CMAKE_VER}-linux-x86_64/* /usr && \
rm -rf cmake-*
# Install Boost from yuzu-emu/ext-linux-bin
RUN cd /tmp && \
wget --no-verbose https://github.com/yuzu-emu/ext-linux-bin/raw/main/boost/boost-${BOOST_VER}.tar.xz && \
tar xvf boost-${BOOST_VER}.tar.xz && \
chown -R root:root boost-${BOOST_VER}/ && \
cp -rv boost-${BOOST_VER}/usr / && \
rm -rf boost*
# Install GCC from yuzu-emu/ext-linux-bin
RUN cd /tmp && \
wget --no-verbose \
https://github.com/yuzu-emu/ext-linux-bin/raw/main/gcc/gcc-${GCC_VER}-ubuntu.tar.xz.aa \
https://github.com/yuzu-emu/ext-linux-bin/raw/main/gcc/gcc-${GCC_VER}-ubuntu.tar.xz.ab \
https://github.com/yuzu-emu/ext-linux-bin/raw/main/gcc/gcc-${GCC_VER}-ubuntu.tar.xz.ac \
https://github.com/yuzu-emu/ext-linux-bin/raw/main/gcc/gcc-${GCC_VER}-ubuntu.tar.xz.ad && \
cat gcc-${GCC_VER}-ubuntu.tar.xz.* | tar xJ && \
cp -rv gcc-${GCC_VER}/usr / && \
rm -rf /tmp/gcc* && \
# Use updated libstdc++ and libgcc_s on the container from GCC 11
rm -v /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /lib/x86_64-linux-gnu/libgcc_s.so.1 && \
ln -sv /usr/local/lib64/libstdc++.so.6.0.30 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 && \
ln -sv /usr/local/lib64/libgcc_s.so.1 /lib/x86_64-linux-gnu/libgcc_s.so.1 && \
# Help Clang find the updated GCC C++ version
ln -sv /usr/local/include/c++/${GCC_VER}/ /usr/include/c++/${GCC_VER} && \
ln -sv /usr/local/lib/gcc/x86_64-pc-linux-gnu/${GCC_VER} /usr/lib/gcc/x86_64-linux-gnu/${GCC_VER} && \
cp -rv /usr/local/include/c++/${GCC_VER}/x86_64-pc-linux-gnu/* /usr/local/include/c++/${GCC_VER}/
# Install GNU binutils from yuzu-emu/ext-linux-bin
RUN cd /tmp && \
wget --no-verbose \
https://github.com/yuzu-emu/ext-linux-bin/raw/main/binutils/binutils-${GNU_BIN_VER}-${UBUNTU_VER}.tar.xz && \
tar xf binutils-${GNU_BIN_VER}-${UBUNTU_VER}.tar.xz && \
cp -rv binutils-${GNU_BIN_VER}-${UBUNTU_VER}/usr / && \
rm -rf /tmp/binutils*
# Setup paths for Qt binaries
ENV LD_LIBRARY_PATH=/opt/qt${QT_PKG_VER}/lib:${LD_LIBRARY_PATH}
ENV PATH=/opt/qt${QT_PKG_VER}/bin:${PATH}
# Fix GCC 11 <-> Qt 5.15 issue
COPY qtconcurrentthreadengine.patch /opt/qt515/qtconcurrentthreadengine.patch
RUN patch /opt/qt515/include/QtConcurrent/qtconcurrentthreadengine.h /opt/qt515/qtconcurrentthreadengine.patch && \
rm /opt/qt515/qtconcurrentthreadengine.patch
# Tell CMake to use vcpkg when looking for packages
ENV VCPKG_TOOLCHAIN_FILE=/home/yuzu/vcpkg/scripts/buildsystems/vcpkg.cmake
USER 1027
# Install vcpkg and required dependencies for yuzu
RUN cd /home/yuzu &&\
git clone --depth 1 https://github.com/Microsoft/vcpkg.git &&\
cd vcpkg &&\
./bootstrap-vcpkg.sh &&\
./vcpkg install \
catch2 \
fmt \
lz4 \
nlohmann-json \
zlib \
zstd