Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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. Signed-off-by: Ionen Wolkens <ionen@gentoo.org>
- Loading branch information
Showing
4 changed files
with
257 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
DIST dxvk-1.10.1.tar.gz 1188138 BLAKE2B e4c5c5052de3f0976581317b9e6de148735198d2545e961ed4540be8660fbba0bcd30f81a1b55f032a1e00e226993d1ab3e4017b104f2829bf37d2ee4fc4420a SHA512 8fd34d9f14a7013cdc1957f63bf60feb19748fddc1cd6ec40cf271005f636de62965efb42ddf2598dad3e37a4f59a870bf769387b2534db93451d1ea6aa65410 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
# 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 tests" | ||
REQUIRED_USE=" | ||
|| ( d3d9 d3d10 d3d11 dxgi tests ) | ||
d3d10? ( d3d11 ) | ||
dxgi? ( d3d11 )" | ||
|
||
BDEPEND=" | ||
dev-util/glslang | ||
!crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )" | ||
# note: multilib belongs in BDEPEND due to using cross libraries from BROOT | ||
|
||
pkg_pretend() { | ||
if use crossdev-mingw && [[ ${MERGE_TYPE} != binary ]]; then | ||
local mingw_gcc=$(usex x86 i686 x86_64)-w64-mingw32-gcc | ||
if ! type -P ${mingw_gcc} >/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" | ||
die "USE=crossdev-mingw is set but ${mingw_gcc} was not found" | ||
elif use amd64 && use abi_x86_32 && | ||
! type -P i686-w64-mingw32-gcc >/dev/null; then | ||
die 'USE="abi_x86_32 crossdev-mingw" is set but i686-w64-mingw32-gcc was not found' | ||
elif [[ ! $(LC_ALL=C ${mingw_gcc} -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 ${mingw_gcc} does not use POSIX threads" | ||
fi | ||
fi | ||
} | ||
|
||
src_prepare() { | ||
default | ||
|
||
sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/dxvk|" setup_dxvk.sh || die | ||
|
||
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_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/dxvk | ||
--{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) | ||
|
||
# tests need wine, working vulkan, and some would hang, but can | ||
# still install for whomever wants to test if dxvk is working | ||
$(meson_use {,enable_}tests) | ||
|
||
# portage won't strip .dll and it's ~150MB -> 22MB | ||
$(usev !debug --strip) | ||
) | ||
|
||
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 dxvk on a wine prefix, can run the following command:" | ||
elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink" | ||
elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details." | ||
fi | ||
|
||
# don't keep wine-*[vulkan] in RDEPEND to keep freedom of what will be used | ||
# with (e.g. custom wine or even copy to real Windows), but 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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
# 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 tests" | ||
REQUIRED_USE=" | ||
|| ( d3d9 d3d10 d3d11 dxgi tests ) | ||
d3d10? ( d3d11 ) | ||
dxgi? ( d3d11 )" | ||
|
||
BDEPEND=" | ||
dev-util/glslang | ||
!crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )" | ||
# note: multilib belongs in BDEPEND due to using cross libraries from BROOT | ||
|
||
pkg_pretend() { | ||
if use crossdev-mingw && [[ ${MERGE_TYPE} != binary ]]; then | ||
local mingw_gcc=$(usex x86 i686 x86_64)-w64-mingw32-gcc | ||
if ! type -P ${mingw_gcc} >/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" | ||
die "USE=crossdev-mingw is set but ${mingw_gcc} was not found" | ||
elif use amd64 && use abi_x86_32 && | ||
! type -P i686-w64-mingw32-gcc >/dev/null; then | ||
die 'USE="abi_x86_32 crossdev-mingw" is set but i686-w64-mingw32-gcc was not found' | ||
elif [[ ! $(LC_ALL=C ${mingw_gcc} -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 ${mingw_gcc} does not use POSIX threads" | ||
fi | ||
fi | ||
} | ||
|
||
src_prepare() { | ||
default | ||
|
||
sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/dxvk|" setup_dxvk.sh || die | ||
|
||
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_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/dxvk | ||
--{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) | ||
|
||
# tests need wine, working vulkan, and some would hang, but can | ||
# still install for whomever wants to test if dxvk is working | ||
$(meson_use {,enable_}tests) | ||
|
||
# portage won't strip .dll and it's ~150MB -> 22MB | ||
$(usev !debug --strip) | ||
) | ||
|
||
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 dxvk on a wine prefix, can run the following command:" | ||
elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink" | ||
elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details." | ||
fi | ||
|
||
# don't keep wine-*[vulkan] in RDEPEND to keep freedom of what will be used | ||
# with (e.g. custom wine or even copy to real Windows), but 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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
<?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> | ||
<flag name="tests">Install test executables</flag> | ||
</use> | ||
<upstream> | ||
<remote-id type="github">doitsujin/dxvk</remote-id> | ||
</upstream> | ||
</pkgmetadata> |