public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Ionen Wolkens" <ionen@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: app-emulation/dxvk/
Date: Fri, 13 May 2022 02:48:45 +0000 (UTC)	[thread overview]
Message-ID: <1652408969.b458663e8d42a6932d1be1664324fcd707e28b04.ionen@gentoo> (raw)

commit:     b458663e8d42a6932d1be1664324fcd707e28b04
Author:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
AuthorDate: Sat May  7 04:39:10 2022 +0000
Commit:     Ionen Wolkens <ionen <AT> gentoo <DOT> 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 <ionen <AT> 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+	<maintainer type="person">
+		<email>ionen@gentoo.org</email>
+		<name>Ionen Wolkens</name>
+	</maintainer>
+	<use>
+		<flag name="crossdev-mingw">
+			Use <pkg>sys-devel/crossdev</pkg> for the toolchain rather than
+			<pkg>dev-util/mingw64-toolchain</pkg> (requires manual setting up)
+		</flag>
+		<flag name="d3d9">Enable support for DirectX 9 (d3d9.dll)</flag>
+		<flag name="d3d10">Enable support for DirectX 10 (d3d10.dll)</flag>
+		<flag name="d3d11">Enable support for DirectX 11 (d3d11.dll)</flag>
+		<flag name="dxgi">Enable support for the DirectX Graphics Infrastructure (dxgi.dll)</flag>
+	</use>
+	<upstream>
+		<remote-id type="github">doitsujin/dxvk</remote-id>
+	</upstream>
+</pkgmetadata>


             reply	other threads:[~2022-05-13  2:48 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-13  2:48 Ionen Wolkens [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-05-14  2:23 [gentoo-commits] repo/gentoo:master commit in: app-emulation/dxvk/ Ionen Wolkens
2022-05-17  4:21 Ionen Wolkens
2022-06-28  7:46 Ionen Wolkens
2022-07-13 14:39 Ionen Wolkens
2022-07-13 14:44 Ionen Wolkens
2022-07-16 17:03 Ionen Wolkens
2022-08-02 15:37 Ionen Wolkens
2022-09-01  0:34 Ionen Wolkens
2022-09-14 23:11 Ionen Wolkens
2022-09-27 23:46 Ionen Wolkens
2022-10-23  7:20 Ionen Wolkens
2022-10-31  0:54 Ionen Wolkens
2022-11-10 23:50 Ionen Wolkens
2022-11-10 23:50 Ionen Wolkens
2022-11-10 23:50 Ionen Wolkens
2022-11-29 12:13 Ionen Wolkens
2022-11-29 13:25 Ionen Wolkens
2022-11-29 15:02 Ionen Wolkens
2022-12-14 16:56 Ionen Wolkens
2022-12-15 21:32 Ionen Wolkens
2023-01-24 21:40 Ionen Wolkens
2023-01-24 21:40 Ionen Wolkens
2023-02-13 11:46 Ionen Wolkens
2023-04-17 20:44 Ionen Wolkens
2023-04-29  9:43 Ionen Wolkens
2023-05-12 11:59 Ionen Wolkens
2023-05-12 11:59 Ionen Wolkens
2023-05-25  4:16 Ionen Wolkens
2023-06-02  6:54 Ionen Wolkens
2023-06-08 12:23 Arthur Zamarin
2023-06-08 12:24 Arthur Zamarin
2023-06-26 10:12 Ionen Wolkens
2023-08-10 10:53 Ionen Wolkens
2023-08-15 20:22 Ionen Wolkens
2023-08-16 21:38 Ionen Wolkens
2023-09-04 17:12 Ionen Wolkens
2023-10-01 13:35 Sam James
2023-10-01 13:35 Sam James
2024-02-09 16:18 Ionen Wolkens
2024-02-09 16:18 Ionen Wolkens
2024-03-20  7:17 Ionen Wolkens
2024-03-20 13:37 Ionen Wolkens
2024-03-20 13:37 Ionen Wolkens
2024-03-24 18:39 Ionen Wolkens
2024-03-27 16:45 Ionen Wolkens
2024-03-28 10:10 Ionen Wolkens
2024-04-27 21:46 Sam James
2024-04-27 21:46 Sam James
2024-05-07 14:28 Ionen Wolkens
2024-05-10  4:26 Ionen Wolkens
2024-05-21  3:01 Ionen Wolkens
2024-05-22  3:32 Ionen Wolkens
2024-07-10 12:18 Ionen Wolkens
2024-07-30 18:00 Arthur Zamarin
2024-07-30 18:00 Arthur Zamarin
2024-09-26 23:05 Ionen Wolkens
2024-10-16  7:41 Sam James
2024-10-16  7:41 Sam James
2024-11-04 16:15 Ionen Wolkens
2024-11-11 23:22 Ionen Wolkens
2024-11-11 23:22 Ionen Wolkens

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1652408969.b458663e8d42a6932d1be1664324fcd707e28b04.ionen@gentoo \
    --to=ionen@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox