From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 20096158090 for ; Fri, 13 May 2022 02:48:50 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 4ED6AE0833; Fri, 13 May 2022 02:48:49 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id E0EC3E0833 for ; Fri, 13 May 2022 02:48:48 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 62A83341718 for ; Fri, 13 May 2022 02:48:47 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id C1E72452 for ; Fri, 13 May 2022 02:48:45 +0000 (UTC) From: "Ionen Wolkens" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Ionen Wolkens" Message-ID: <1652408969.b458663e8d42a6932d1be1664324fcd707e28b04.ionen@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: app-emulation/dxvk/ X-VCS-Repository: repo/gentoo X-VCS-Files: app-emulation/dxvk/Manifest app-emulation/dxvk/dxvk-1.10.1.ebuild app-emulation/dxvk/dxvk-9999.ebuild app-emulation/dxvk/metadata.xml X-VCS-Directories: app-emulation/dxvk/ X-VCS-Committer: ionen X-VCS-Committer-Name: Ionen Wolkens X-VCS-Revision: b458663e8d42a6932d1be1664324fcd707e28b04 X-VCS-Branch: master Date: Fri, 13 May 2022 02:48:45 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 663975f4-f667-4b06-a71a-46966e36ee62 X-Archives-Hash: 5afefba2ceb31bbde67ba6a185d7b101 commit: b458663e8d42a6932d1be1664324fcd707e28b04 Author: Ionen Wolkens gentoo org> AuthorDate: Sat May 7 04:39:10 2022 +0000 Commit: Ionen Wolkens gentoo org> CommitDate: Fri May 13 02:29:29 2022 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b458663e app-emulation/dxvk: new package, add 1.10.1 + live Many want to build this, but crossdev requirement made it unsuitable for ::gentoo. Now, mingw64-toolchain is there to remedy this and so let's add it. crossdev can still be used if USE=crossdev-mingw Note that unlike most overlays, this intentionally does not modify config.cpp and then installs dxvk.conf as a documentation example. Use the intended ${PWD}/dxvk.conf or DXVK_CONFIG_FILE env var. Paths are also different (using lib64 is not necessary and requires workarounds), so may need to update WINEPREFIX symlinks. Closes: https://bugs.gentoo.org/664310 Signed-off-by: Ionen Wolkens gentoo.org> app-emulation/dxvk/Manifest | 1 + app-emulation/dxvk/dxvk-1.10.1.ebuild | 120 ++++++++++++++++++++++++++++++++++ app-emulation/dxvk/dxvk-9999.ebuild | 120 ++++++++++++++++++++++++++++++++++ app-emulation/dxvk/metadata.xml | 21 ++++++ 4 files changed, 262 insertions(+) diff --git a/app-emulation/dxvk/Manifest b/app-emulation/dxvk/Manifest new file mode 100644 index 000000000000..c26971ce4b08 --- /dev/null +++ b/app-emulation/dxvk/Manifest @@ -0,0 +1 @@ +DIST dxvk-1.10.1.tar.gz 1188138 BLAKE2B e4c5c5052de3f0976581317b9e6de148735198d2545e961ed4540be8660fbba0bcd30f81a1b55f032a1e00e226993d1ab3e4017b104f2829bf37d2ee4fc4420a SHA512 8fd34d9f14a7013cdc1957f63bf60feb19748fddc1cd6ec40cf271005f636de62965efb42ddf2598dad3e37a4f59a870bf769387b2534db93451d1ea6aa65410 diff --git a/app-emulation/dxvk/dxvk-1.10.1.ebuild b/app-emulation/dxvk/dxvk-1.10.1.ebuild new file mode 100644 index 000000000000..d48b3cc7cc2a --- /dev/null +++ b/app-emulation/dxvk/dxvk-1.10.1.ebuild @@ -0,0 +1,120 @@ +# Copyright 2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +MULTILIB_COMPAT=( abi_x86_{32,64} ) +inherit flag-o-matic meson-multilib + +if [[ ${PV} == 9999 ]]; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/doitsujin/dxvk.git" +else + SRC_URI="https://github.com/doitsujin/dxvk/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz" + KEYWORDS="-* ~amd64 ~x86" +fi + +DESCRIPTION="Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine" +HOMEPAGE="https://github.com/doitsujin/dxvk/" + +LICENSE="ZLIB" +SLOT="0" +IUSE="+abi_x86_32 crossdev-mingw +d3d9 +d3d10 +d3d11 debug +dxgi" +REQUIRED_USE=" + || ( d3d9 d3d10 d3d11 dxgi ) + d3d10? ( d3d11 ) + dxgi? ( d3d11 )" + +BDEPEND=" + dev-util/glslang + !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )" + +pkg_pretend() { + [[ ${MERGE_TYPE} == binary ]] && return + + if use crossdev-mingw; then + local tool=-w64-mingw32-g++ + for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do + if ! type -P ${tool} >/dev/null; then + eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain." + eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw" + use abi_x86_32 && use abi_x86_64 && + eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains." + die "USE=crossdev-mingw is set but ${tool} was not found" + elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then + eerror "${PN} requires GCC to be built with --enable-threads=posix" + eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows" + die "USE=crossdev-mingw is set but ${tool} does not use POSIX threads" + fi + done + fi +} + +src_prepare() { + default + + sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_dxvk.sh || die +} + +src_configure() { + use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH} + + # AVX has a history of causing issues with this package, disable for safety + # https://github.com/Tk-Glitch/PKGBUILDS/issues/515 + append-flags -mno-avx + + if [[ ${CHOST} != *-mingw* ]]; then + unset AR CC CXX RC STRIP # likely unusable unless CHOST is mingw + + CHOST_amd64=x86_64-w64-mingw32 + CHOST_x86=i686-w64-mingw32 + CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64}) + + strip-unsupported-flags + fi + + multilib-minimal_src_configure +} + +multilib_src_configure() { + # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev, + # unset again so meson eclass will set ${CHOST}-gcc + others + use crossdev-mingw && unset AR CC CXX RC STRIP + + local emesonargs=( + --prefix="${EPREFIX}"/usr/lib/${PN} + --{bin,lib}dir=x$((${ABI#x}==86?32:64)) + $(meson_use {,enable_}d3d9) + $(meson_use {,enable_}d3d10) + $(meson_use {,enable_}d3d11) + $(meson_use {,enable_}dxgi) + $(usev !debug --strip) # portage won't strip .dll, so allow it here + -Denable_tests=false # needs wine/vulkan and is intended for manual use + ) + + meson_src_configure +} + +multilib_src_install_all() { + dobin setup_dxvk.sh + dodoc README.md dxvk.conf + + find "${ED}" -type f -name '*.a' -delete || die +} + +pkg_postinst() { + if [[ ! ${REPLACING_VERSIONS} ]]; then + elog "To enable ${PN} on a wine prefix, you can run the following command:" + elog + elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink" + elog + elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details." + fi + + # don't try to keep wine-*[vulkan] in RDEPEND, but still give a warning + local wine + for wine in app-emulation/wine-{vanilla,staging}; do + has_version ${wine} && ! has_version ${wine}[vulkan] && + ewarn "${wine} was not built with USE=vulkan, ${PN} will not be usable with it" + done +} diff --git a/app-emulation/dxvk/dxvk-9999.ebuild b/app-emulation/dxvk/dxvk-9999.ebuild new file mode 100644 index 000000000000..d48b3cc7cc2a --- /dev/null +++ b/app-emulation/dxvk/dxvk-9999.ebuild @@ -0,0 +1,120 @@ +# Copyright 2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +MULTILIB_COMPAT=( abi_x86_{32,64} ) +inherit flag-o-matic meson-multilib + +if [[ ${PV} == 9999 ]]; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/doitsujin/dxvk.git" +else + SRC_URI="https://github.com/doitsujin/dxvk/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz" + KEYWORDS="-* ~amd64 ~x86" +fi + +DESCRIPTION="Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine" +HOMEPAGE="https://github.com/doitsujin/dxvk/" + +LICENSE="ZLIB" +SLOT="0" +IUSE="+abi_x86_32 crossdev-mingw +d3d9 +d3d10 +d3d11 debug +dxgi" +REQUIRED_USE=" + || ( d3d9 d3d10 d3d11 dxgi ) + d3d10? ( d3d11 ) + dxgi? ( d3d11 )" + +BDEPEND=" + dev-util/glslang + !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )" + +pkg_pretend() { + [[ ${MERGE_TYPE} == binary ]] && return + + if use crossdev-mingw; then + local tool=-w64-mingw32-g++ + for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do + if ! type -P ${tool} >/dev/null; then + eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain." + eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw" + use abi_x86_32 && use abi_x86_64 && + eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains." + die "USE=crossdev-mingw is set but ${tool} was not found" + elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then + eerror "${PN} requires GCC to be built with --enable-threads=posix" + eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows" + die "USE=crossdev-mingw is set but ${tool} does not use POSIX threads" + fi + done + fi +} + +src_prepare() { + default + + sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_dxvk.sh || die +} + +src_configure() { + use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH} + + # AVX has a history of causing issues with this package, disable for safety + # https://github.com/Tk-Glitch/PKGBUILDS/issues/515 + append-flags -mno-avx + + if [[ ${CHOST} != *-mingw* ]]; then + unset AR CC CXX RC STRIP # likely unusable unless CHOST is mingw + + CHOST_amd64=x86_64-w64-mingw32 + CHOST_x86=i686-w64-mingw32 + CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64}) + + strip-unsupported-flags + fi + + multilib-minimal_src_configure +} + +multilib_src_configure() { + # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev, + # unset again so meson eclass will set ${CHOST}-gcc + others + use crossdev-mingw && unset AR CC CXX RC STRIP + + local emesonargs=( + --prefix="${EPREFIX}"/usr/lib/${PN} + --{bin,lib}dir=x$((${ABI#x}==86?32:64)) + $(meson_use {,enable_}d3d9) + $(meson_use {,enable_}d3d10) + $(meson_use {,enable_}d3d11) + $(meson_use {,enable_}dxgi) + $(usev !debug --strip) # portage won't strip .dll, so allow it here + -Denable_tests=false # needs wine/vulkan and is intended for manual use + ) + + meson_src_configure +} + +multilib_src_install_all() { + dobin setup_dxvk.sh + dodoc README.md dxvk.conf + + find "${ED}" -type f -name '*.a' -delete || die +} + +pkg_postinst() { + if [[ ! ${REPLACING_VERSIONS} ]]; then + elog "To enable ${PN} on a wine prefix, you can run the following command:" + elog + elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink" + elog + elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details." + fi + + # don't try to keep wine-*[vulkan] in RDEPEND, but still give a warning + local wine + for wine in app-emulation/wine-{vanilla,staging}; do + has_version ${wine} && ! has_version ${wine}[vulkan] && + ewarn "${wine} was not built with USE=vulkan, ${PN} will not be usable with it" + done +} diff --git a/app-emulation/dxvk/metadata.xml b/app-emulation/dxvk/metadata.xml new file mode 100644 index 000000000000..84811f271d8e --- /dev/null +++ b/app-emulation/dxvk/metadata.xml @@ -0,0 +1,21 @@ + + + + + ionen@gentoo.org + Ionen Wolkens + + + + Use sys-devel/crossdev for the toolchain rather than + dev-util/mingw64-toolchain (requires manual setting up) + + Enable support for DirectX 9 (d3d9.dll) + Enable support for DirectX 10 (d3d10.dll) + Enable support for DirectX 11 (d3d11.dll) + Enable support for the DirectX Graphics Infrastructure (dxgi.dll) + + + doitsujin/dxvk + +