From 615fc76a08a103979c62436e721f789552884ef5 Mon Sep 17 00:00:00 2001 From: tastytea Date: Tue, 21 Apr 2020 05:42:49 +0200 Subject: [PATCH] app-emulation/dxvk: Add support for mingw and make it the default. --- app-emulation/dxvk/Manifest | 12 +- app-emulation/dxvk/dxvk-1.6.1-r1.ebuild | 183 ++++++++++++++++++ .../dxvk/files/1.6.1-add_compiler_flags.patch | 77 ++++++++ app-emulation/dxvk/metadata.xml | 2 + 4 files changed, 269 insertions(+), 5 deletions(-) create mode 100644 app-emulation/dxvk/dxvk-1.6.1-r1.ebuild create mode 100644 app-emulation/dxvk/files/1.6.1-add_compiler_flags.patch diff --git a/app-emulation/dxvk/Manifest b/app-emulation/dxvk/Manifest index b9ca7419d..03c19eec3 100644 --- a/app-emulation/dxvk/Manifest +++ b/app-emulation/dxvk/Manifest @@ -2,17 +2,19 @@ Hash: SHA512 AUX 1.6-fix-setEvent-error.patch 621 BLAKE2B c751a08dcd4a7bf14c5f049dbc0787b373f7de6f79379f4993459b9b0762f6a13334bae2b25e802d0013f943f449f24145d58ebee342694943489bb24e6e2d96 SHA512 01f0c0458b72e433988445be80f7f8e4407a8cffe9c79f7a21c7657de2b775949a8d11b6a9f4197fc2d59ef79b8fe431bb653ef3467fc451fa5c8a161b223908 +AUX 1.6.1-add_compiler_flags.patch 2745 BLAKE2B b664a09dc698c24b0d699b1b717c33fd4c1d3095c861be16d5b78b2afc30e789054d654a6a49dcd007740f1098b2f1f7363be79fbbb6b47f44fc94e32cfadce4 SHA512 60439332b8ba0ac8cb37576f04385bc304868e53b27135c5eb2fbc2578eae20d1d38c9b4e13046f4494f2a2958846a04066d99fddd66369f233253d6208f60cf AUX flags.patch 1400 BLAKE2B c69951eddea7b94836e9d64b39870395c4eb54dcfff31fb9ff9eafa801d989acddcf738802bbc3600a871053546dc5f641726f7e75cfdb9f101973aebd2b3571 SHA512 fd4a053775a4ab7b4df24da38ba602a5e8d43a75676bf3e870a82dd4f4e3bcf228e043139604c95941b09086ecd21887a8eaf81f2229d00abb47fdc83419284c DIST dxvk-1.6.1.tar.gz 894553 BLAKE2B a45f905f33b255beed65daebbb946b36c28d00dc4d3830e46de342f16d95541361a31243e6ce3e8cde3b2c7297dd2b1044aa61955f1803b8bfb34ec83367c2a9 SHA512 0f3cb7096643d1bcb1db51696824c8ca16720adfe6894392122b21f400cfa416e79eb74cdcc46d1a63a276697d324324d7657afb70b9490e22e6792643fc5805 DIST dxvk-1.6.tar.gz 892463 BLAKE2B 84d1ca0b42b9b63c5efa15d284ffedd76d4f5c09a1ca3e51971d36d68f0a5346f4bf3e5ee119a90fdbf489a3e21137e9d981710cb2b33b4b6a195f941baefa15 SHA512 5b1ba21515e5f7a75baba1e182a0b15285712c2a6e8946fcc0eadb82b64d43122e1c211304af2c890e368098fd2a69d174f86c05f9b0de0b417b0f2390d4a0ca +EBUILD dxvk-1.6.1-r1.ebuild 4953 BLAKE2B ca01e3f4baab173d633234e7b1598ddc9c850200aae89bb861110cc5c5a6def3aab71c63087d64d040d885a82ec7752bd6bf93c0b74486f26ed688b2fe300a1c SHA512 2b218e0ff5b682777798e4010d77c5ea4786130cba4211020d9604f799ceb6dbfc07d15f40c7e139bffc3a5226f905233ff70ff71bb791bb900d7bd21c1e5ce8 EBUILD dxvk-1.6.1.ebuild 2975 BLAKE2B 0060d4b28590fe43b4c2aed3913d10fbd5055b67671c00d920c61aa4541334e454c18578c6bfd8661932dd44d174675886d4dbc2f5ba311147be10bb25f02b87 SHA512 1019c3376b74b14f6834d4fef7f9d36e60ef1e09801c7de598fcc7dceb5cd09c929af2b527c516e88ab7dbcd67275749a690df7a95af670a3256b65429dded4e EBUILD dxvk-1.6.ebuild 2381 BLAKE2B c77d62c0dc71ec4f78fe7d5dc15435b123bfd97073dd05d1fbfadf69c84bec940bbe7fcdba2cfff9a841f00a5079f9ddc5651991893828072ea76ea9554b2a8d SHA512 b36a83d0065d8216a01ec6a1b50bc842acbac9f25b0315bbf250df2cb6413dca709464ef9e081ea4fa7c0ce41cf357abc19793c9925db16a319ecc4387fdd844 EBUILD dxvk-9999-r3.ebuild 2975 BLAKE2B 0060d4b28590fe43b4c2aed3913d10fbd5055b67671c00d920c61aa4541334e454c18578c6bfd8661932dd44d174675886d4dbc2f5ba311147be10bb25f02b87 SHA512 1019c3376b74b14f6834d4fef7f9d36e60ef1e09801c7de598fcc7dceb5cd09c929af2b527c516e88ab7dbcd67275749a690df7a95af670a3256b65429dded4e -MISC metadata.xml 500 BLAKE2B f52f73c13f36ee4ad4006cd73c7bbea3e05c750f638c29c13ece73874a2980d2c62d74ceae4b2785ea862f27db19db4c79c179e7d546c02bb21bf871e859cda2 SHA512 f3c874cf60ae01bf03ed422229ca66326f7962e7bb9e2605f0f7ae906c3c3799ddd87d41110af875fd6a0cc95b2992c6adcace9fbc0baf97aba23e4e54591f66 +MISC metadata.xml 643 BLAKE2B 0b5aa604f15a049ffce213c45e4731da24bc903d54dfce84692be92f106a271fde885ada19f5a44781452423178b1361e9fe2152cc4c689dbd4fe8e04f241ade SHA512 49f429099195f87d22cf8a5a549074b881aed6b7ff1f76427497f730137d002ee3d8b0a6d1cf4322588e8d3a4d61d9387d72e668eab8b9fa2e0cebb17f942802 -----BEGIN PGP SIGNATURE----- -iHUEAREKAB0WIQQ1VSZoZMptf/RapufPw5SX8bJuBwUCXp2p8QAKCRDPw5SX8bJu -BxRyAP9BHAooOi1xFj+GQSKYXw+/5wMfP1FgzNLZx3inMdVmqQEAhNMP66L/dnUA -qChoCRF0IuItthkBbFRtN4H7IaObk2s= -=4ujA +iHUEAREKAB0WIQQ1VSZoZMptf/RapufPw5SX8bJuBwUCXp5tagAKCRDPw5SX8bJu +B7NoAP9ioBkyZzCc3UivyTFclV1x8i1mv8IWHi8D3K4dhJ8e7gD/coFKFNW4Sl9a +dN4pFCv+lnefFzF6aTyKcSlowLqbCt4= +=3Yod -----END PGP SIGNATURE----- diff --git a/app-emulation/dxvk/dxvk-1.6.1-r1.ebuild b/app-emulation/dxvk/dxvk-1.6.1-r1.ebuild new file mode 100644 index 000000000..fc9112941 --- /dev/null +++ b/app-emulation/dxvk/dxvk-1.6.1-r1.ebuild @@ -0,0 +1,183 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +MULTILIB_COMPAT=( abi_x86_{32,64} ) +inherit flag-o-matic meson multilib-minimal ninja-utils +if [[ "${PV}" == "9999" ]]; then + inherit git-r3 +fi + +DESCRIPTION="Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine" +HOMEPAGE="https://github.com/doitsujin/dxvk" +if [[ "${PV}" == "9999" ]]; then + EGIT_REPO_URI="https://github.com/doitsujin/dxvk.git" +else + SRC_URI="https://github.com/doitsujin/dxvk/archive/v${PV}.tar.gz -> ${P}.tar.gz" +fi + +LICENSE="ZLIB" +SLOT="0" +if [[ "${PV}" == "9999" ]]; then + KEYWORDS="" +else + KEYWORDS="" +fi +IUSE="+d3d9 +d3d10 +d3d11 +dxgi +mingw video_cards_nvidia test winegcc" +REQUIRED_USE="^^ ( mingw winegcc )" + +DEPEND=" + dev-util/vulkan-headers + dev-util/glslang +" +BDEPEND=" + mingw? ( + abi_x86_64? ( cross-x86_64-w64-mingw32/gcc ) + abi_x86_32? ( cross-i686-w64-mingw32/gcc ) + ) + winegcc? ( || ( + >=app-emulation/wine-staging-4.5[${MULTILIB_USEDEP},vulkan] + >=app-emulation/wine-vanilla-4.5[${MULTILIB_USEDEP},vulkan] + ) ) +" +RDEPEND=" + media-libs/vulkan-loader[${MULTILIB_USEDEP}] + || ( + video_cards_nvidia? ( >=x11-drivers/nvidia-drivers-440.31 ) + >=media-libs/mesa-19.2 + ) +" + +PATCHES=( + "${FILESDIR}/1.6.1-add_compiler_flags.patch" +) + +pkg_pretend () { + if ! use abi_x86_64 && ! use abi_x86_32; then + eerror "You need to enable at least one of abi_x86_32 and abi_x86_64." + die + fi + + if use mingw; then + local -a categories + use abi_x86_64 && categories+=("cross-x86_64-w64-mingw32") + use abi_x86_32 && categories+=("cross-i686-w64-mingw32") + + for cat in ${categories[@]}; do + if ! has_version "${cat}/gcc"; then + eerror "${cat}/gcc is not installed." + elog "See on how to install it." + einfo "In short:" + einfo "echo '~${cat}/mingw64-runtime-7.0.0 ~amd64' >> \\" + einfo " /etc/portage/package.accept_keywords/mingw" + einfo "crossdev --stable --target ${cat}" + einfo "echo 'EXTRA_ECONF=\"--enable-threads=posix\"' >> \\" + einfo " /etc/portage/env/mingw-gcc.conf" + einfo "echo '${cat}/gcc mingw-gcc.conf' >> \\" + einfo " /etc/portage/package.env/mingw" + einfo "echo '${cat}/mingw64-runtime libraries' >> \\" + einfo " /etc/portage/package.use/mingw" + einfo "emerge --oneshot ${cat}/gcc ${cat}/mingw64-runtime" + die + fi + done + + ewarn "Compiling with mingw is experimental. Good luck! :-)" + elif use winegcc; then + ewarn "Compiling with winegcc is not supported by upstream." + ewarn "Please report compile-errors to the package maintainer via" + ewarn " or email." + fi +} + +src_prepare() { + default + + # Filter -march flags as this has been causing issues. + filter-flags "-march=*" + + sed -i "s|^basedir=.*$|basedir=\"${EPREFIX}\"|" setup_dxvk.sh || die + + # Delete installation instructions for unused ABIs. + if ! use abi_x86_64; then + sed -i '/installFile "$win64_sys_path"/d' setup_dxvk.sh || die + fi + if ! use abi_x86_32; then + sed -i '/installFile "$win32_sys_path"/d' setup_dxvk.sh || die + fi + + patch_build_flags() { + local bits="${MULTILIB_ABI_FLAG:8:2}" + if use mingw; then + local buildfile="build-win${bits}.txt" + else + local buildfile="build-wine${bits}.txt" + fi + + # Fix installation directory. + sed -i "s|\"x${bits}\"|\"usr/$(get_libdir)/dxvk\"|" setup_dxvk.sh || die + + # Add *FLAGS to cross-file. + sed -i \ + -e "s!@CFLAGS@!$(_meson_env_array "${CFLAGS}")!" \ + -e "s!@CXXFLAGS@!$(_meson_env_array "${CXXFLAGS}")!" \ + -e "s!@LDFLAGS@!$(_meson_env_array "${LDFLAGS}")!" \ + "${buildfile}" || die + } + multilib_foreach_abi patch_build_flags + + # Load configuration file from /etc/dxvk.conf. + sed -Ei 's|filePath = "^(\s+)dxvk.conf";$|\1filePath = "/etc/dxvk.conf";|' \ + src/util/config/config.cpp || die +} + +multilib_src_configure() { + local bits="${MULTILIB_ABI_FLAG:8:2}" + if use mingw; then + local buildfile="build-win${bits}.txt" + else + local buildfile="build-wine${bits}.txt" + fi + + local emesonargs=( + --libdir="$(get_libdir)/dxvk" + --bindir="$(get_libdir)/dxvk" + --cross-file="${S}/${buildfile}" + --buildtype="release" + --strip + $(meson_use d3d9 "enable_d3d9") + $(meson_use d3d10 "enable_d3d10") + $(meson_use d3d11 "enable_d3d11") + $(meson_use dxgi "enable_dxgi") + $(meson_use test "enable_tests") + ) + meson_src_configure +} + +multilib_src_compile() { + EMESON_SOURCE="${S}" + meson_src_compile +} + +multilib_src_install() { + meson_src_install +} + +multilib_src_install_all() { + # Remove static libraries. + find . -name '*.a' -delete || die + + dobin setup_dxvk.sh + + insinto etc + doins "dxvk.conf" +} + +pkg_postinst() { + elog "dxvk is installed, but not activated. You have to create DLL overrides" + elog "in order to make use of it. To do so, set WINEPREFIX and execute" + elog "setup_dxvk.sh install --symlink." + + elog "D9VK is part of DXVK since 1.5. If you use symlinks, don't forget to link the new libraries." +} diff --git a/app-emulation/dxvk/files/1.6.1-add_compiler_flags.patch b/app-emulation/dxvk/files/1.6.1-add_compiler_flags.patch new file mode 100644 index 000000000..8578219df --- /dev/null +++ b/app-emulation/dxvk/files/1.6.1-add_compiler_flags.patch @@ -0,0 +1,77 @@ +--- + build-win32.txt | 8 ++++---- + build-win64.txt | 4 ++-- + build-wine32.txt | 6 +++--- + build-wine64.txt | 6 +++--- + 4 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/build-win32.txt b/build-win32.txt +index 97ec8a35..e2e2e3f9 100644 +--- a/build-win32.txt ++++ b/build-win32.txt +@@ -5,10 +5,10 @@ ar = 'i686-w64-mingw32-ar' + strip = 'i686-w64-mingw32-strip' + + [properties] +-c_args=['-msse', '-msse2'] +-cpp_args=['-msse', '-msse2'] +-c_link_args = ['-static', '-static-libgcc'] +-cpp_link_args = ['-static', '-static-libgcc', '-static-libstdc++'] ++c_args=@CFLAGS@ + ['-msse', '-msse2'] ++cpp_args=@CXXFLAGS@ + ['-msse', '-msse2'] ++c_link_args = @LDFLAGS@ + ['-static', '-static-libgcc'] ++cpp_link_args = @LDFLAGS@ + ['-static', '-static-libgcc', '-static-libstdc++'] + needs_exe_wrapper = true + + [host_machine] +diff --git a/build-win64.txt b/build-win64.txt +index 2a7fbee3..cb8bdb00 100644 +--- a/build-win64.txt ++++ b/build-win64.txt +@@ -5,8 +5,8 @@ ar = 'x86_64-w64-mingw32-ar' + strip = 'x86_64-w64-mingw32-strip' + + [properties] +-c_link_args = ['-static', '-static-libgcc'] +-cpp_link_args = ['-static', '-static-libgcc', '-static-libstdc++'] ++c_link_args = @LDFLAGS@ + ['-static', '-static-libgcc'] ++cpp_link_args = @LDFLAGS@ + ['-static', '-static-libgcc', '-static-libstdc++'] + needs_exe_wrapper = true + + [host_machine] +diff --git a/build-wine32.txt b/build-wine32.txt +index 9f13dbdf..a56f2fa4 100644 +--- a/build-wine32.txt ++++ b/build-wine32.txt +@@ -7,9 +7,9 @@ strip = 'strip' + [properties] + needs_exe_wrapper = true + +-c_args=['-m32', '-msse', '-msse2', '-fvisibility=hidden'] +-cpp_args=['-m32', '-msse', '-msse2', '-fvisibility=hidden', '-fvisibility-inlines-hidden', '-D__WIDL_objidl_generated_name_0000000C='] +-cpp_link_args=['-m32', '-mwindows'] ++c_args= @CFLAGS@ + ['-m32', '-msse', '-msse2', '-fvisibility=hidden'] ++cpp_args= @CXXFLAGS@ + ['-m32', '-msse', '-msse2', '-fvisibility=hidden', '-fvisibility-inlines-hidden', '-D__WIDL_objidl_generated_name_0000000C='] ++cpp_link_args= @LDFLAGS@ + ['-m32', '-mwindows'] + + [host_machine] + system = 'linux' +diff --git a/build-wine64.txt b/build-wine64.txt +index fd7be2f8..8228a5bb 100644 +--- a/build-wine64.txt ++++ b/build-wine64.txt +@@ -7,9 +7,9 @@ strip = 'strip' + [properties] + needs_exe_wrapper = true + +-c_args=['-m64', '-fvisibility=hidden'] +-cpp_args=['-m64', '-fvisibility=hidden', '-fvisibility-inlines-hidden', '-D__WIDL_objidl_generated_name_0000000C='] +-cpp_link_args=['-m64', '-mwindows'] ++c_args= @CFLAGS@ + ['-m64', '-fvisibility=hidden'] ++cpp_args= @CXXFLAGS@ + ['-m64', '-fvisibility=hidden', '-fvisibility-inlines-hidden', '-D__WIDL_objidl_generated_name_0000000C='] ++cpp_link_args= @LDFLAGS@ + ['-m64', '-mwindows'] + + [host_machine] + system = 'linux' +-- +2.25.3 diff --git a/app-emulation/dxvk/metadata.xml b/app-emulation/dxvk/metadata.xml index 86253aa14..18071ed38 100644 --- a/app-emulation/dxvk/metadata.xml +++ b/app-emulation/dxvk/metadata.xml @@ -13,5 +13,7 @@ Build D3D9 Build D3D10 Build D3D11 + Use mingw to compile (EXPERIMENTAL) + Use winegcc to compile (discouraged by upstream)