mirror of
https://github.com/RPCS3/rpcs3-docker.git
synced 2026-01-31 01:35:20 +01:00
137 lines
5.5 KiB
Docker
137 lines
5.5 KiB
Docker
FROM ubuntu:18.04
|
|
LABEL maintainer="hcorion"
|
|
|
|
|
|
ENV QTVER=5.15.2
|
|
ENV QTVERMIN=515
|
|
ENV LLVMVER=16
|
|
ENV GCCVER=11
|
|
|
|
ENV CLANG_BINARY=clang-${LLVMVER}
|
|
ENV CLANGXX_BINARY=clang++-${LLVMVER}
|
|
ENV LLD_BINARY=lld-${LLVMVER}
|
|
ENV GCC_BINARY=gcc-${GCCVER}
|
|
ENV GXX_BINARY=g++-${GCCVER}
|
|
|
|
RUN \
|
|
apt-get update -y && \
|
|
apt-get install -y curl libcurl4-openssl-dev software-properties-common apt-transport-https && \
|
|
curl -Lvs https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \
|
|
add-apt-repository -y ppa:beineri/opt-qt-${QTVER}-bionic && \
|
|
add-apt-repository -y ppa:ubuntu-toolchain-r/test && \
|
|
add-apt-repository -y "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-${LLVMVER} main" && \
|
|
apt-get update -y --fix-missing && \
|
|
\
|
|
apt-get -qq install -y \
|
|
build-essential binutils $GCC_BINARY $GXX_BINARY git ccache bc $CLANG_BINARY $CLANGXX_BINARY $LLD_BINARY \
|
|
libasound2-dev libopenal-dev freeglut3-dev libudev-dev libevdev-dev libpulse-dev libxrandr-dev libglvnd-dev \
|
|
libwayland-dev libwayland-cursor0 libwayland-client0 libwayland-server0 \
|
|
desktop-file-utils dput gnupg pbuilder ubuntu-dev-tools apt-file \
|
|
qt${QTVERMIN}base qt${QTVERMIN}declarative qt${QTVERMIN}xmlpatterns qt${QTVERMIN}svg qt${QTVERMIN}multimedia && \
|
|
apt-get install --only-upgrade dpkg && \
|
|
apt-get clean autoclean && \
|
|
apt-get autoremove --yes && \
|
|
rm -rf /var/lib/apt
|
|
|
|
RUN \
|
|
curl -sSfLO http://http.us.debian.org/debian/pool/main/g/glew/libglew2.2_2.2.0-4+b1_amd64.deb && \
|
|
curl -sSfLO http://http.us.debian.org/debian/pool/main/g/glew/libglew-dev_2.2.0-4+b1_amd64.deb && \
|
|
dpkg -i ./*.deb && \
|
|
rm ./*.deb
|
|
|
|
# Setup newer CMake
|
|
ENV CMAKEVER=3.16.9
|
|
RUN \
|
|
curl -sSfLO https://cmake.org/files/v${CMAKEVER%.*}/cmake-${CMAKEVER}-Linux-x86_64.sh && \
|
|
sh cmake-${CMAKEVER}-Linux-x86_64.sh --skip-license && \
|
|
rm ./cmake*.sh && \
|
|
cmake --version
|
|
|
|
# We gotta build our own version of Ninja as well
|
|
ENV NINJAVER=1.11.1
|
|
RUN \
|
|
curl -sSfL -o ninja.tar.gz https://github.com/ninja-build/ninja/archive/v${NINJAVER}.tar.gz && \
|
|
tar -xf ninja.tar.gz && \
|
|
cd ninja-* && \
|
|
cmake -Bbuild-cmake -DCMAKE_C_COMPILER=$CLANG_BINARY -DCMAKE_CXX_COMPILER=$CLANGXX_BINARY -H. && \
|
|
cmake --build build-cmake && \
|
|
cp ./build-cmake/ninja /usr/bin/ninja && \
|
|
cd ../ && \
|
|
rm -r ./ninja-* && \
|
|
rm ./*.tar.gz
|
|
|
|
ENV STATIC_LLVM_VER=16.0.2
|
|
RUN \
|
|
curl -sSfLO https://github.com/llvm/llvm-project/releases/download/llvmorg-${STATIC_LLVM_VER}/llvm-project-${STATIC_LLVM_VER}.src.tar.xz && \
|
|
tar -xf llvm-*.tar.xz && \
|
|
cd llvm-*/llvm && \
|
|
mkdir build && cd build && \
|
|
CXXFLAGS="-msse -msse2" cmake .. -G Ninja -DCMAKE_C_COMPILER=$CLANG_BINARY -DCMAKE_CXX_COMPILER=$CLANGXX_BINARY -DCMAKE_INSTALL_PREFIX=/opt/llvm \
|
|
-DLLVM_ENABLE_CXX1Y=ON -DLLVM_TARGETS_TO_BUILD="X86" -DCMAKE_BUILD_TYPE=Release -DLLVM_USE_INTEL_JITEVENTS=ON -DLLVM_USE_PERF=ON \
|
|
-DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TOOLS=OFF \
|
|
-DLLVM_INCLUDE_UTILS=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DWITH_POLLY=OFF -DLLVM_ENABLE_Z3_SOLVER=OFF && \
|
|
ninja && \
|
|
ninja install && \
|
|
cd ../../.. && \
|
|
rm ./*.tar.xz && \
|
|
rm -r llvm-*
|
|
|
|
# Need to manually build vulkan headers and libvulkan
|
|
ENV VULKAN_HEADER_VER=1.3.224.0
|
|
ENV VULKAN_LOADER_VER=1.3.224.1
|
|
RUN \
|
|
curl -sSfL -o Vulkan-Headers.tar.gz https://github.com/KhronosGroup/Vulkan-Headers/archive/sdk-${VULKAN_HEADER_VER}.tar.gz && \
|
|
tar -xf Vulkan-Headers*.tar.gz && \
|
|
cd Vulkan-Headers* && \
|
|
mkdir build && cd build && \
|
|
cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=$CLANG_BINARY -DCMAKE_CXX_COMPILER=$CLANGXX_BINARY \
|
|
-DCMAKE_INSTALL_PREFIX=/usr && \
|
|
ninja && \
|
|
ninja install && \
|
|
cd ../.. && \
|
|
rm ./*.tar.gz && \
|
|
rm -r ./Vulkan-Headers*
|
|
RUN \
|
|
curl -sSfL -o Vulkan-Loader.tar.gz https://github.com/KhronosGroup/Vulkan-Loader/archive/sdk-${VULKAN_LOADER_VER}.tar.gz && \
|
|
tar -xf Vulkan-Loader.tar.gz && \
|
|
cd Vulkan-Loader* && \
|
|
mkdir build && cd build && \
|
|
cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=$CLANG_BINARY -DCMAKE_CXX_COMPILER=$CLANGXX_BINARY \
|
|
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_INSTALL_DATADIR=/share && \
|
|
ninja && \
|
|
ninja install && \
|
|
cd ../.. && \
|
|
rm ./*.tar.gz && \
|
|
rm -r ./Vulkan-Loader*
|
|
|
|
# We need to build a custom version of SDL2 as well
|
|
ENV SDL2VER=2.26.5
|
|
RUN \
|
|
curl -sSfL -o SDL2.tar.gz https://www.libsdl.org/release/SDL2-${SDL2VER}.tar.gz && \
|
|
tar -xf SDL2.tar.gz && \
|
|
cd SDL2* && \
|
|
mkdir build && cd build && \
|
|
cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=$CLANG_BINARY -DCMAKE_CXX_COMPILER=$CLANGXX_BINARY \
|
|
-DCMAKE_INSTALL_PREFIX=/usr -DSDL_DLOPEN=ON -DARTS=OFF -DESD=OFF -DNAS=OFF -DALSA=ON -DPULSEAUDIO_SHARED=ON -DRPATH=OFF -DCLOCK_GETTIME=ON && \
|
|
ninja && \
|
|
ninja install && \
|
|
cd ../.. && \
|
|
rm ./*.tar.gz && \
|
|
rm -r ./SDL2*
|
|
|
|
ENV SHELLCHECKVER=0.9.0
|
|
RUN \
|
|
curl -sSfL -o shellcheck.tar.gz https://github.com/koalaman/shellcheck/releases/download/v${SHELLCHECKVER}/shellcheck-v${SHELLCHECKVER}.linux.x86_64.tar.xz && \
|
|
tar -xf shellcheck.tar.gz && \
|
|
cd shellcheck* && \
|
|
cp ./shellcheck /usr/bin/ && \
|
|
cd .. && \
|
|
rm -r ./shellcheck* && \
|
|
shellcheck --version
|
|
|
|
# Need to patch Qt for compatibility with GCC 11
|
|
# See https://codereview.qt-project.org/c/qt/qtbase/+/339417 and https://github.com/RPCS3/rpcs3/issues/10291
|
|
RUN \
|
|
sed -i 's/ThreadEngineStarter<void>(ThreadEngine<void> \*_threadEngine)/ThreadEngineStarter(ThreadEngine<void> \*_threadEngine)/' \
|
|
/opt/qt515/include/QtConcurrent/qtconcurrentthreadengine.h
|