summarylogtreecommitdiffstats
path: root/PKGBUILD.personal
diff options
context:
space:
mode:
Diffstat (limited to 'PKGBUILD.personal')
-rw-r--r--PKGBUILD.personal271
1 files changed, 271 insertions, 0 deletions
diff --git a/PKGBUILD.personal b/PKGBUILD.personal
new file mode 100644
index 000000000000..e9f720682a4e
--- /dev/null
+++ b/PKGBUILD.personal
@@ -0,0 +1,271 @@
+# Maintainer: loathingkernel <loathingkernel _a_ gmail _d_ com>
+
+pkgname=proton
+_srctag=8.0-4c
+_commit=
+pkgver=8.0.4.3 # pkgver=${_srctag//-/.}
+_geckover=2.47.3
+_monover=8.0.1
+pkgrel=3
+epoch=1
+pkgdesc="Compatibility tool for Steam Play based on Wine and additional components"
+url="https://github.com/ValveSoftware/Proton"
+arch=(x86_64 x86_64_v3)
+options=(!staticlibs !lto !debug emptydirs)
+license=('custom')
+
+depends=(
+ attr lib32-attr
+ fontconfig lib32-fontconfig
+ libxcursor lib32-libxcursor
+ libxrandr lib32-libxrandr
+ libxi lib32-libxi
+ gettext lib32-gettext
+ freetype2 lib32-freetype2
+ gcc-libs lib32-gcc-libs
+ libpcap lib32-libpcap
+ lzo lib32-lzo
+ libxkbcommon lib32-libxkbcommon
+ libvpx lib32-libvpx
+ 'sdl2>=2.0.16' 'lib32-sdl2>=2.0.16'
+ libsoup lib32-libsoup
+ libgudev lib32-libgudev
+ desktop-file-utils
+ python
+ steam-native-runtime
+)
+
+makedepends=(autoconf bison perl flex mingw-w64-gcc
+ git wget rsync mingw-w64-tools lld nasm
+ meson cmake fontforge afdko python-pefile
+ glslang vulkan-headers
+ clang
+ giflib lib32-giflib
+ gnutls lib32-gnutls
+ libxinerama lib32-libxinerama
+ libxcomposite lib32-libxcomposite
+ libxxf86vm lib32-libxxf86vm
+ v4l-utils lib32-v4l-utils
+ alsa-lib lib32-alsa-lib
+ libxcomposite lib32-libxcomposite
+ mesa lib32-mesa
+ mesa-libgl lib32-mesa-libgl
+ opencl-icd-loader lib32-opencl-icd-loader
+ libpulse lib32-libpulse
+ gtk3 lib32-gtk3
+ gst-plugins-base-libs lib32-gst-plugins-base-libs
+ vulkan-icd-loader lib32-vulkan-icd-loader
+ 'sdl2>=2.0.16' 'lib32-sdl2>=2.0.16'
+ rust lib32-rust-libs
+ libgphoto2
+ opencl-headers
+)
+
+optdepends=(
+ giflib lib32-giflib
+ gnutls lib32-gnutls
+ v4l-utils lib32-v4l-utils
+ libpulse lib32-libpulse
+ alsa-plugins lib32-alsa-plugins
+ alsa-lib lib32-alsa-lib
+ libxcomposite lib32-libxcomposite
+ libxinerama lib32-libxinerama
+ opencl-icd-loader lib32-opencl-icd-loader
+ gtk3 lib32-gtk3
+ gst-plugins-base-libs lib32-gst-plugins-base-libs
+ vulkan-icd-loader lib32-vulkan-icd-loader
+ libgphoto2
+)
+
+makedepends=(${makedepends[@]} ${depends[@]})
+install=${pkgname}.install
+source=(
+ proton::git+https://github.com/ValveSoftware/Proton.git#tag=proton-${_srctag}
+ https://dl.winehq.org/wine/wine-gecko/${_geckover}/wine-gecko-${_geckover}-x86{,_64}.tar.xz
+ https://github.com/madewokherd/wine-mono/releases/download/wine-mono-${_monover}/wine-mono-${_monover}-x86.tar.xz
+ 0001-AUR-Pkgbuild-changes.patch
+ 0002-AUR-Do-not-update-cargo-crates.patch
+ 0003-AUR-Copy-DLL-dependencies-of-32bit-libvkd3d-dlls-int.patch
+ 0004-AUR-Strip-binaries-early.patch
+ 0005-AUR-Fix-hwnd-redefinition.patch
+)
+# Optional patches
+source+=(
+)
+noextract=(
+ wine-gecko-${_geckover}-{x86,x86_64}.tar.xz
+ wine-mono-${_monover}-x86.tar.xz
+)
+
+_make_wrappers () {
+ # _arch prefix gcc ld as strip
+ local _i686=( "i686" "-m32" "-melf_i386" "--32" "elf32-i386")
+ local _x86_64=("x86_64" "-m64" "-melf_x86_64" "--64" "elf64-x86-64")
+ local _opts=(_i686 _x86_64)
+ declare -n _opt
+ for _opt in "${_opts[@]}"; do
+ for l in ar ranlib nm; do
+ ln -s /usr/bin/gcc-$l wrappers/${_opt[0]}-pc-linux-gnu-$l
+ done
+ for t in gcc g++; do
+ install -Dm755 /dev/stdin wrappers/${_opt[0]}-pc-linux-gnu-$t <<EOF
+#!/usr/bin/bash
+$(which ccache 2> /dev/null) /usr/bin/$t ${_opt[1]} "\$@"
+EOF
+ done
+ install -Dm755 /dev/stdin wrappers/${_opt[0]}-pc-linux-gnu-ld <<EOF
+#!/usr/bin/bash
+/usr/bin/ld ${_opt[2]} "\$@"
+EOF
+ install -Dm755 /dev/stdin wrappers/${_opt[0]}-pc-linux-gnu-as <<EOF
+#!/usr/bin/bash
+/usr/bin/as ${_opt[3]} "\$@"
+EOF
+ install -Dm755 /dev/stdin wrappers/${_opt[0]}-pc-linux-gnu-strip <<EOF
+#!/usr/bin/bash
+/usr/bin/strip -F ${_opt[4]} "\$@"
+EOF
+ done
+}
+
+prepare() {
+
+ # Provide wrappers to compiler tools
+ rm -rf wrappers && mkdir wrappers
+ _make_wrappers
+
+ [ ! -d build ] && mkdir build
+
+ cd proton
+
+ [ ! -d contrib ] && mkdir -p contrib
+ mv "$srcdir"/wine-gecko-${_geckover}-x86{,_64}.tar.xz contrib/
+ mv "$srcdir"/wine-mono-${_monover}-x86.tar.xz contrib/
+
+ # Explicitly set origin URL for submodules using relative paths
+ git remote set-url origin https://github.com/ValveSoftware/Proton.git
+ git submodule update --init --filter=tree:0 --recursive
+
+ for rustlib in gst-plugins-rs media-converter; do
+ pushd $rustlib
+ export RUSTUP_TOOLCHAIN=stable
+ export CARGO_HOME="${SRCDEST}"/proton-cargo
+ cargo update
+ cargo fetch --locked --target "i686-unknown-linux-gnu"
+ cargo fetch --locked --target "x86_64-unknown-linux-gnu"
+ popd
+ done
+
+ patch -p1 -i "$srcdir"/0001-AUR-Pkgbuild-changes.patch
+ #patch -p1 -i "$srcdir"/0002-AUR-Do-not-update-cargo-crates.patch
+ patch -p1 -i "$srcdir"/0003-AUR-Copy-DLL-dependencies-of-32bit-libvkd3d-dlls-int.patch
+ patch -p1 -i "$srcdir"/0004-AUR-Strip-binaries-early.patch
+ patch -p1 -i "$srcdir"/0005-AUR-Fix-hwnd-redefinition.patch
+}
+
+build() {
+ export PATH="$(pwd)/wrappers:$PATH"
+
+ cd build
+ ROOTLESS_CONTAINER="" \
+ ../proton/configure.sh \
+ --container-engine="none" \
+ --proton-sdk-image="" \
+ --build-name="${pkgname}"
+
+ # By default export FLAGS used by proton and ignore makepkg
+ # This overrides FLAGS from makepkg.conf, if you comment these you are on your own
+ # If you want the "best" possible optimizations for your system you can use
+ # `-march=native` and remove the `-mtune=core-avx2` option.
+ export CFLAGS="-O2 -march=haswell -mtune=haswell -pipe -fno-semantic-interposition"
+ export CXXFLAGS="-O2 -march=haswell -mtune=haswell -pipe -fno-semantic-interposition"
+ export RUSTFLAGS="-C opt-level=2 -C target-cpu=haswell"
+ export LDFLAGS="-Wl,-O1,--sort-common,--as-needed"
+
+ # If using -march=native and the CPU supports AVX, launching a d3d9
+ # game can cause an Unhandled exception. The cause seems to be the
+ # combination of AVX instructions and tree vectorization (implied by O3),
+ # all tested archictures from sandybridge to haswell are affected.
+ # Since Wine 5.16 AVX is supported. Testing showed 32bit applications
+ # crashing with AVX regardless, but 64bit applications worked just fine.
+ # Relevant Wine issues
+ # https://bugs.winehq.org/show_bug.cgi?id=45289
+ # https://bugs.winehq.org/show_bug.cgi?id=43516
+ # AVX is "hard" disabled for 32bit in any case.
+ # AVX2 for 64bit is disabled below.
+ export CFLAGS+=" -mno-avx2"
+ export CXXFLAGS+=" -mno-avx2"
+
+ export RUSTUP_TOOLCHAIN=stable
+ export CARGO_HOME="${SRCDEST}"/proton-cargo
+ export WINEESYNC=0
+ export WINEFSYNC=0
+ export DISPLAY=
+ SUBJOBS=$([[ "$MAKEFLAGS" =~ -j\ *([1-9][0-9]*) ]] && echo "${BASH_REMATCH[1]}" || echo "$(nproc)") \
+ make -j1 dist
+}
+
+package() {
+ cd build
+
+ # Delete the intermediate build directories to free space (mostly for my github actions)
+ rm -rf dst-* obj-* src-* pfx-*
+
+ local _compatdir="$pkgdir/usr/share/steam/compatibilitytools.d"
+ mkdir -p "$_compatdir/${pkgname}"
+ rsync --delete -arx dist/* "$_compatdir/${pkgname}"
+ cp -f dist/version "$_compatdir/${pkgname}/dist"
+
+ # For some unknown to me reason, 32bit vkd3d (not vkd3d-proton) always links
+ # to libgcc_s_dw2-1.dll no matter what linker options I tried.
+ # Copy the required dlls into the package, they will be copied later into the prefix
+ # by the patched proton script. Bundling the helps to avoid making mingw-w64-gcc package
+ # a runtime dependency.
+ cp /usr/i686-w64-mingw32/bin/{libgcc_s_dw2-1.dll,libwinpthread-1.dll} \
+ "$_compatdir/${pkgname}"/dist/lib/vkd3d/
+ cp /usr/x86_64-w64-mingw32/bin/{libgcc_s_seh-1.dll,libwinpthread-1.dll} \
+ "$_compatdir/${pkgname}"/dist/lib64/vkd3d/
+
+ mkdir -p "$pkgdir/usr/share/licenses/${pkgname}"
+ mv "$_compatdir/${pkgname}"/LICENSE{,.OFL} \
+ "$pkgdir/usr/share/licenses/${pkgname}"
+
+ cd "$_compatdir/${pkgname}/dist"
+ # NOTE: Reduces size by 40 MiB, worth it
+ i686-w64-mingw32-strip --strip-unneeded \
+ $(find lib/wine \( -iname fakedlls -or -iname i386-windows \) -prune -false -or -iname "*.dll" -or -iname "*.exe")
+ x86_64-w64-mingw32-strip --strip-unneeded \
+ $(find lib64/wine \( -iname fakedlls -or -iname x86_64-windows \) -prune -false -or -iname "*.dll" -or -iname "*.exe")
+
+ # NOTE: Reduces size by 38 MiB, worth it
+ local _geckodir="share/wine/gecko/wine-gecko-${_geckover}"
+ i686-w64-mingw32-strip --strip-unneeded \
+ $(find "$_geckodir"-x86 -iname "*.dll" -or -iname "*.exe")
+ x86_64-w64-mingw32-strip --strip-unneeded \
+ $(find "$_geckodir"-x86_64 -iname "*.dll" -or -iname "*.exe")
+
+ # NOTE: Reduces size by 0.16 MiB, not worth it
+ local _monodir="share/wine/mono/wine-mono-${_monover}"
+ i686-w64-mingw32-strip --strip-unneeded \
+ $(find "$_monodir"/lib/mono -iname "*.dll" -or -iname "*.exe")
+ i686-w64-mingw32-strip --strip-unneeded \
+ "$_monodir"/lib/x86/*.dll \
+ $(find "$_monodir" -iname "*x86.dll" -or -iname "*x86.exe")
+ x86_64-w64-mingw32-strip --strip-unneeded \
+ "$_monodir"/lib/x86_64/*.dll \
+ $(find "$_monodir" -iname "*x86_64.dll" -or -iname "*x86_64.exe")
+}
+
+sha256sums=('SKIP'
+ '08d318f3dd6440a8a777cf044ccab039b0d9c8809991d2180eb3c9f903135db3'
+ '0beac419c20ee2e68a1227b6e3fa8d59fec0274ed5e82d0da38613184716ef75'
+ '83f65c9292137a740c4b8ea730b61cee0dbbb82e4eb3607590ba2f4377827464'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP')
+# Optional patches
+sha256sums+=(
+)
+