summarylogtreecommitdiffstats
path: root/PKGBUILD
diff options
context:
space:
mode:
authorNeko-san2022-06-30 13:25:36 -0500
committerNeko-san2022-06-30 13:25:36 -0500
commitd6a99cd3ced52428c0bc3ac2020927801a5e67d3 (patch)
treec2a62e31be55f218648f9a68dd164cd1d99573e5 /PKGBUILD
downloadaur-d6a99cd3ced52428c0bc3ac2020927801a5e67d3.tar.gz
Initilize repository for the Unreal Engine 4 AUR
Diffstat (limited to 'PKGBUILD')
-rw-r--r--PKGBUILD154
1 files changed, 154 insertions, 0 deletions
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..ec1f36619885
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,154 @@
+# Maintainer: Neko-san <aur at mycat dot anonaddy dot me>
+
+# The source is about 200 MiB, with an extra ~11 GiB of dependencies downloaded in Setup.sh, and may take several hours to compile.
+# If you want to turn on additional patches there are switches below.
+pkgname=unreal-engine-4
+pkgver=4.27
+pkgrel=0
+pkgdesc='A 3D game engine by Epic Games which can be used non-commercially for free.'
+arch=('x86_64' 'x86_64_v2' 'x86_64_v3' 'x86_64_v4')
+url=https://www.unrealengine.com/
+makedepends=('git' 'openssh')
+depends=('icu63' 'sdl2' 'python' 'lld' 'clang' 'xdg-user-dirs' 'dos2unix')
+optdepends=('qt5-base: qmake build system for projects'
+ 'cmake: build system for projects'
+ 'qtcreator: IDE for projects'
+ 'codelite: IDE for projects'
+ 'kdevelop: IDE for projects'
+ 'clion: IDE for projects')
+license=('custom:UnrealEngine')
+source=('com.unrealengine.UE4Editor.desktop'
+ 'clang_path_fix.patch'
+ 'ccache_executor.patch')
+sha256sums=('15e9f9d8dc8bd8513f6a5eca990e2aab21fd38724ad57d213b06a6610a951d58'
+ '960c5a100e0c3732f3c73fb645d3989d39acf4576d74615bbef38ebeee008b90'
+ '33982486f7fafac35a33dfa37c85cfba8543aa78b5fe13c395d9cccf691ef4b3')
+# Not sure if compiling Unreal with LTO is legal? Lot's of different proprietary software goes into Unreal
+options=('!strip' 'staticlibs') # Package is 3 Gib smaller with "strip" but it takes a long time and generates many warnings
+
+_install_dir="opt/${pkgname}" # Default engine installation directory. Can be useful if you do not have a lot of space in /opt directory.
+_ccache_support=false # Patches for ccache. More optimizations might be needed?
+_WithDDC=false # Change this to true if you have a modern system and don't mind the extra packaging time (and size) to avoid compiling shaders on UE startup later; set to false by default for those with less robust systems
+
+## Courtesy of the original author of this patch from https://aur.archlinux.org/packages/unreal-engine
+## This patch is a bit more complex, so I'll try to maintain it, but don't be surprised if updates for this patch is not speedy
+if [[ ${_ccache_support} == true ]]
+then
+ depends+=(ccache)
+fi
+
+## Use this if you prefer opendoas; the benefit here is that doas won't time out on you if you wait too long to authenticate after compilation
+if [ -f /usr/bin/doas ] && [ -f /etc/doas.conf ]; then
+ PACMAN_AUTH=(doas)
+fi
+
+## This is for detecting your CPU architecture automatically; set to false if you want to enforce your own makepkg.conf file
+
+## Note: the resulting package will still be named containing "x86_64" unless the build was done with an "official" Arch distro for that architecture (like Arch ARM - [I don't advise using Arch ARM though])
+## or if you manage to trick your Arch installation to accept other architecture extensions by fiddling with the $CARCH variable and /etc/pacman.conf - this method has flaws, namely due to a bug:
+## it doesn't work with "makechrootpkg" - though, this PKGBUILD doesn't work in with this method anyway because of Github SSH Agent nonsense
+
+arch_auto=true
+
+if [[ ${arch_auto} == true ]]
+then
+ ## Architecture checks and compile flag adjustments - shellcheck throws a fit about the build function but it looks fine to me; checks for the highest available x64 support level and falls back to "native" if either not available
+ if test "$(/lib/ld-linux-x86-64.so.2 --help | grep -w '^ x86-64-v4' | cut -d ',' -f 1)" == ' x86-64-v4 (supported'; then
+ export CFLAGS="${CFLAGS} -march=x86-64-v4 -mtune=x86-64-v4 -O3 -pipe"
+ export CXXFLAGS="${CFLAGS} -Wp,-D_GLIBCXX_ASSERTIONS"
+ export LDFLAGS="-Wl,-O3,--sort-common,--as-needed,-z,relro,-z,now"
+ elif test "$(/lib/ld-linux-x86-64.so.2 --help | grep -w '^ x86-64-v3' | cut -d ',' -f 1)" == ' x86-64-v3 (supported'; then
+ export CFLAGS="${CFLAGS} -march=x86-64-v3 -mtune=x86-64-v3 -O3 -pipe"
+ export CXXFLAGS="${CFLAGS} -Wp,-D_GLIBCXX_ASSERTIONS"
+ export LDFLAGS="-Wl,-O3,--sort-common,--as-needed,-z,relro,-z,now"
+ elif test "$(/lib/ld-linux-x86-64.so.2 --help | grep -w '^ x86-64-v2' | cut -d ',' -f 1)" == ' x86-64-v2 (supported'; then
+ export CFLAGS="${CFLAGS} -march=x86-64-v2 -mtune=x86-64-v2 -O3 -pipe"
+ export CXXFLAGS="${CFLAGS} -Wp,-D_GLIBCXX_ASSERTIONS"
+ export LDFLAGS="-Wl,-O3,--sort-common,--as-needed,-z,relro,-z,now"
+ elif test "$(/lib/ld-linux-x86-64.so.2 --help | grep -w '^ x86_64 (AT_PLATFORM; supported' | cut -d ',' -f 1)" == ' x86_64 (AT_PLATFORM; supported'; then
+ export CFLAGS="${CFLAGS} -march=x86-64 -mtune=x86-64 -O3 -pipe"
+ export CXXFLAGS="${CFLAGS} -Wp,-D_GLIBCXX_ASSERTIONS"
+ export LDFLAGS="-Wl,-O3,--sort-common,--as-needed,-z,relro,-z,now"
+ else
+ export CFLAGS="${CFLAGS} -march=native -mtune=native -O3 -pipe"
+ export CXXFLAGS="${CFLAGS} -Wp,-D_GLIBCXX_ASSERTIONS"
+ export LDFLAGS="-Wl,-O3,--sort-common,--as-needed,-z,relro,-z,now"
+ fi
+fi
+
+prepare() {
+ # Check access to the repository
+ if ! git ls-remote git@github.com:EpicGames/UnrealEngine &>/dev/null
+ then
+ error 'You must register at unrealengine.com and link your github account to access this private repo. See the wiki for more info: https://wiki.archlinux.org/index.php/Unreal_Engine_4'
+ exit 1
+ fi
+
+ # Download Unreal Engine source or update if the folder exists
+ if [[ ! -d ${pkgname} ]]
+ then
+ git clone --depth=1 --branch=${pkgver}-release git@github.com:EpicGames/UnrealEngine ${pkgname}
+ cd ${pkgname}
+ else
+ cd ${pkgname}
+ rm -f .git/index.lock
+ git fetch --depth=1 origin tag ${pkgver}-release
+ git reset --hard ${pkgver}-release
+ fi
+
+ # Apply custom patches
+ patch -p1 -i "${srcdir}/clang_path_fix.patch" # Replace Windows specific search with the correct path (used for -mode=GenerateClangDatabase in UBT)
+ if [[ ${_ccache_support} == true ]]
+ then
+ patch -p1 -i "${srcdir}/ccache_executor.patch"
+ fi
+
+ # Qt Creator source code access
+ if [[ ! -d Engine/Plugins/Developer/QtCreatorSourceCodeAccess ]]
+ then
+ git -C Engine/Plugins/Developer clone --depth=1 git@github.com:fire/QtCreatorSourceCodeAccess
+ fi
+
+ # For some reason, despite this file explicitly asking not to be removed, it was removed from the UE5 source; it has to be re-added or the build will fail - this is the UE4 package, but this will remain in place in-case this occurs for UE4 branches
+ if [[ ! -f ${pkgname}/Engine/Source/ThirdParty/Linux/HaveLinuxDependencies ]]
+ then
+ mkdir -p ${pkgname}/Engine/Source/ThirdParty/Linux/
+ touch ${pkgname}/Engine/Source/ThirdParty/Linux/HaveLinuxDependencies
+ sed -i "1c\This file must have no extension so that GitDeps considers it a binary dependency - it will only be pulled by the Setup script if Linux is enabled. Please do not remove this file." ${pkgname}/Engine/Source/ThirdParty/Linux/HaveLinuxDependencies
+ fi
+
+ ./Setup.sh
+}
+
+build() {
+ cd ${pkgname}
+ if [[ ${_WithDDC} == true ]]; then
+ Engine/Build/BatchFiles/RunUAT.sh BuildGraph -target="Make Installed Build Linux" -script=Engine/Build/InstalledEngineBuild.xml -set:WithDDC=true -set:HostPlatformOnly=false -set:WithLinux=true -set:WithWin64=true -set:WithWin32=false -set:WithMac=false -set:WithAndroid=false -set:WithIOS=false -set:WithTVOS=false -set:WithLumin=false -set:WithHTML5=false
+ else
+ Engine/Build/BatchFiles/RunUAT.sh BuildGraph -target="Make Installed Build Linux" -script=Engine/Build/InstalledEngineBuild.xml -set:WithDDC=false -set:HostPlatformOnly=false -set:WithLinux=true -set:WithWin64=true -set:WithWin32=false -set:WithMac=false -set:WithAndroid=false -set:WithIOS=false -set:WithTVOS=false -set:WithLumin=false -set:WithHTML5=false
+ fi
+}
+
+package() {
+ # Desktop entry
+ if [[ "${_install_dir}" != "opt/${pkgname}" ]] # Set new path if dir changed
+ then
+ sed -i "5c\Path=/${_install_dir}/Engine/Binaries/Linux/" com.unrealengine.UE4Editor.desktop
+ sed -i "6c\Exec=/${_install_dir}/Engine/Binaries/Linux/UE4Editor %F" com.unrealengine.UE4Editor.desktop
+ fi
+ install -Dm775 com.unrealengine.UE4Editor.desktop "$pkgdir/usr/share/applications/com.unrealengine.UE4Editor.desktop"
+
+ cd ${pkgname}
+
+ # Icon for Desktop entry
+ install -Dm770 Engine/Source/Programs/UnrealVS/Resources/Preview.png "${pkgdir}/usr/share/pixmaps/ue4editor.png"
+
+ # License
+ install -Dm770 LICENSE.md "${pkgdir}/usr/share/licenses/UnrealEngine/LICENSE.md"
+
+ # Engine
+ ## Set to all permissions to prevent the engine from breaking itself; more elegant solutions might exist - suggest them if they can be automated here
+ ## Also, correct me if I package this improperly; I added Win64 support for the build in hopes of supporting cross-compilation
+ install -dm777 "${pkgdir}/${_install_dir}/Engine"
+ mv LocalBuilds/Engine/Linux/* "${pkgdir}/${_install_dir}"
+}