You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
#rb William.Belcher #ROBOMERGE-AUTHOR: adam.rehn #ROBOMERGE-SOURCE: CL 18465316 in //UE5/Release-5.0/... via CL 18465319 #ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v899-18417669) [CL 18465321 by adam rehn in ue5-release-engine-test branch]
187 lines
11 KiB
Docker
187 lines
11 KiB
Docker
# This file was generated by ue4-docker version 0.0.94 with the following options:
|
|
#
|
|
# - buildgraph_args: "-set:WithLinuxArm64=false -set:WithClient=true -set:WithServer=true"
|
|
# - combine: true
|
|
# - credential_mode: "secrets"
|
|
# - disable_all_patches: true
|
|
# - disable_labels: true
|
|
# - enable_dso_patch: true
|
|
# - excluded_components: {"ddc": false, "debug": false, "templates": false}
|
|
#
|
|
# This Dockerfile combines the steps for the following images:
|
|
#
|
|
# - ue4-build-prerequisites
|
|
# - ue4-source
|
|
# - ue4-minimal
|
|
|
|
ARG BASEIMAGE
|
|
FROM ${BASEIMAGE} as prerequisites
|
|
|
|
# Disable interactive prompts during package installation
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
# Add the "display" driver capability for NVIDIA GPUs
|
|
# (This also allows us to run the Editor from an interactive container by bind-mounting the host system's X11 socket)
|
|
ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES},display
|
|
|
|
# Install our build prerequisites
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
build-essential \
|
|
ca-certificates \
|
|
curl \
|
|
git \
|
|
git-lfs \
|
|
python3 \
|
|
python3-dev \
|
|
python3-pip \
|
|
shared-mime-info \
|
|
software-properties-common \
|
|
sudo \
|
|
tzdata \
|
|
unzip \
|
|
xdg-user-dirs \
|
|
zip && \
|
|
rm -rf /var/lib/apt/lists/* && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
# Install the X11 runtime libraries required by CEF so we can cook Unreal Engine projects that use the WebBrowserWidget plugin
|
|
# (Starting in Unreal Engine 5.0, we need these installed before creating an Installed Build to prevent cooking failures related to loading the Quixel Bridge plugin)
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
libasound2 \
|
|
libatk1.0-0 \
|
|
libatk-bridge2.0-0 \
|
|
libcairo2 \
|
|
libfontconfig1 \
|
|
libfreetype6 \
|
|
libglu1 \
|
|
libnss3 \
|
|
libnspr4 \
|
|
libpango-1.0-0 \
|
|
libpangocairo-1.0-0 \
|
|
libsm6 \
|
|
libxcomposite1 \
|
|
libxcursor1 \
|
|
libxi6 \
|
|
libxrandr2 \
|
|
libxrender1 \
|
|
libxss1 \
|
|
libxtst6 \
|
|
libxv1 \
|
|
x11-xkb-utils \
|
|
xauth \
|
|
xfonts-base \
|
|
xkb-data && \
|
|
rm -rf /var/lib/apt/lists/* && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
# Install the glibc DSO patch to improve Editor startup times
|
|
RUN add-apt-repository -y ppa:slonopotamus/glibc-dso && \
|
|
apt-get update && \
|
|
apt upgrade -y libc6 && \
|
|
rm -rf /var/lib/apt/lists/* && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
# Enable the glibc DSO patch
|
|
ENV GLIBC_TUNABLES=glibc.rtld.dynamic_sort=2
|
|
|
|
# Disable the default "lecture" message the first time a user runs a command using sudo
|
|
RUN echo 'Defaults lecture="never"' >> /etc/sudoers && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
# Unreal refuses to run as the root user, so create a non-root user with no password and allow them to run commands using sudo
|
|
RUN useradd --create-home --home /home/ue4 --shell /bin/bash --uid 1000 ue4 && \
|
|
passwd -d ue4 && \
|
|
usermod -a -G audio,video,sudo ue4 && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
USER ue4
|
|
|
|
# Enable Git Large File Storage (LFS) support
|
|
RUN git lfs install && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
FROM prerequisites as source
|
|
|
|
# The git repository that we will clone
|
|
ARG GIT_REPO=""
|
|
|
|
# The git branch/tag/commit that we will checkout
|
|
ARG GIT_BRANCH=""
|
|
|
|
# Install our git credential helper that retrieves credentials from build secrets
|
|
COPY --chown=ue4:ue4 git-credential-helper-secrets.sh /tmp/git-credential-helper-secrets.sh
|
|
ENV GIT_ASKPASS=/tmp/git-credential-helper-secrets.sh
|
|
RUN chmod +x /tmp/git-credential-helper-secrets.sh && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
# Clone the UE4 git repository using the build secret credentials
|
|
# (Note that we include the changelist override value here to ensure any cached source code is invalidated if
|
|
# the override is modified between runs, which is useful when testing preview versions of the Unreal Engine)
|
|
ARG CHANGELIST
|
|
RUN --mount=type=secret,id=username,uid=1000,required \
|
|
--mount=type=secret,id=password,uid=1000,required \
|
|
CHANGELIST="$CHANGELIST" \
|
|
mkdir /home/ue4/UnrealEngine && \
|
|
cd /home/ue4/UnrealEngine && \
|
|
git init && \
|
|
git remote add origin "$GIT_REPO" && \
|
|
git fetch --progress --depth 1 origin "$GIT_BRANCH" && \
|
|
git checkout FETCH_HEAD && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
# Run post-clone setup steps, ensuring our package lists are up to date since Setup.sh doesn't call `apt-get update`
|
|
|
|
# When running with BuildKit, we use a cache mount to cache the dependency data in `.git/ue4-gitdeps` across multiple build invocations
|
|
WORKDIR /home/ue4/UnrealEngine
|
|
RUN --mount=type=cache,target=/home/ue4/UnrealEngine/.git/ue4-gitdeps,uid=1000,gid=1000 sudo apt-get update && \
|
|
./Setup.sh && \
|
|
sudo rm -rf /var/lib/apt/lists/* && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
FROM source as builder
|
|
|
|
# Set the changelist number in Build.version to ensure our Build ID is generated correctly
|
|
ARG CHANGELIST
|
|
COPY set-changelist.py /tmp/set-changelist.py
|
|
RUN python3 /tmp/set-changelist.py /home/ue4/UnrealEngine/Engine/Build/Build.version $CHANGELIST && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
# Remove the .git directory to disable UBT `git status` calls and speed up the build process
|
|
RUN rm -rf /home/ue4/UnrealEngine/.git && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
# Ensure UBT is built before we create the Installed Build, since Build.sh explicitly sets the
|
|
# target .NET framework version, whereas InstalledEngineBuild.xml just uses the system default,
|
|
# which can result in errors when running the built UBT due to the wrong version being targeted
|
|
RUN ./Engine/Build/BatchFiles/Linux/Build.sh UnrealHeaderTool Linux Development -SkipBuild && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
# Create an Installed Build of the Engine
|
|
WORKDIR /home/ue4/UnrealEngine
|
|
RUN ./Engine/Build/BatchFiles/RunUAT.sh BuildGraph -target="Make Installed Build Linux" -script=Engine/Build/InstalledEngineBuild.xml -set:HostPlatformOnly=true -set:WithDDC=true -set:WithLinuxArm64=false -set:WithClient=true -set:WithServer=true && \
|
|
rm -R -f /home/ue4/UnrealEngine/LocalBuilds/InstalledDDC && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
# Split out components (DDC, debug symbols, template projects) so they can be copied into the final container image as separate filesystem layers
|
|
COPY split-components.py /tmp/split-components.py
|
|
RUN python3 /tmp/split-components.py /home/ue4/UnrealEngine/LocalBuilds/Engine/Linux /home/ue4/UnrealEngine/Components && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
# Copy the Installed Build into a clean image, discarding the source build
|
|
FROM prerequisites as minimal
|
|
|
|
# Copy the Installed Build files from the builder image
|
|
COPY --from=builder --chown=ue4:ue4 /home/ue4/UnrealEngine/LocalBuilds/Engine/Linux /home/ue4/UnrealEngine
|
|
COPY --from=builder --chown=ue4:ue4 /home/ue4/UnrealEngine/Components/DDC /home/ue4/UnrealEngine
|
|
COPY --from=builder --chown=ue4:ue4 /home/ue4/UnrealEngine/Components/DebugSymbols /home/ue4/UnrealEngine
|
|
COPY --from=builder --chown=ue4:ue4 /home/ue4/UnrealEngine/Components/TemplatesAndSamples /home/ue4/UnrealEngine
|
|
WORKDIR /home/ue4/UnrealEngine
|
|
|
|
# Perform first-run setup for Mono, UnrealBuildTool and AutomationTool, which makes it possible to build Unreal projects and plugins as users other than `ue4`
|
|
# (Note that this will only work with 4.26.0 and newer, older Engine versions will always require write access to `/home/ue4/UnrealEngine`)
|
|
# See the comments on this issue for details, including the need to ensure $HOME is set correctly: <https://github.com/adamrehn/ue4-docker/issues/141>
|
|
RUN ./Engine/Build/BatchFiles/Linux/Build.sh UnrealHeaderTool Linux Development -SkipBuild && \
|
|
mkdir -p ./Engine/Programs/AutomationTool/Saved && \
|
|
chmod a+rw ./Engine/Programs/AutomationTool/Saved && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
|
|
# Enable Vulkan support for NVIDIA GPUs
|
|
USER root
|
|
RUN apt-get update && apt-get install -y --no-install-recommends libvulkan1 && \
|
|
rm -rf /var/lib/apt/lists/* && \
|
|
VULKAN_API_VERSION=`dpkg -s libvulkan1 | grep -oP 'Version: [0-9|\.]+' | grep -oP '[0-9|\.]+'` && \
|
|
mkdir -p /etc/vulkan/icd.d/ && \
|
|
echo \
|
|
"{\
|
|
\"file_format_version\" : \"1.0.0\",\
|
|
\"ICD\": {\
|
|
\"library_path\": \"libGLX_nvidia.so.0\",\
|
|
\"api_version\" : \"${VULKAN_API_VERSION}\"\
|
|
}\
|
|
}" > /etc/vulkan/icd.d/nvidia_icd.json && echo '' && echo 'RUN directive complete. Docker will now commit the filesystem layer to disk.' && echo 'Note that for large filesystem layers this can take quite some time.' && echo 'Performing filesystem layer commit...' && echo ''
|
|
USER ue4
|