Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
app-emulation/vkd3d-proton: new package, add 2.6 + live
Complement to app-emulation/dxvk that's setup very similarly. Contains a lot of improvements over regular vkd3d for Proton but (like dxvk) can be used by any Wine. Signed-off-by: Ionen Wolkens <ionen@gentoo.org>
- Loading branch information
Showing
4 changed files
with
344 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,4 @@ | ||
DIST vkd3d-proton-2.6-dxil-spirv.tar.gz 631130 BLAKE2B 99f40c5efde87d0af86542b427e5b0429be68ca69ba0c2b6d10a821811756d8dadff4449f268ae404f8ace09a91b3e8aaa135e534a77c0239e58c1a970a044cc SHA512 3c20090b7a1b53c30fd4967622fc7384e1bcc504c30d8075068b87dad1bd2c6f4a12459bf42e61bf76b9dd454ec17a9d529f74ab0d5583627e966d94bb341dc3 | ||
DIST vkd3d-proton-2.6-spirv-headers.tar.gz 1299014 BLAKE2B 0b1e635aaa6eebec3525b13698a064e0e5b8a78829a772cbe9e1890148059bf396bc5c830e8d6ee3070a3343775991642565283994c65acfa0d82a91590b7d84 SHA512 ecb2158cad55edb4ba069383668f3b311a2f6aa6777b5b7ed94795d454622426ee34fee52b13c97d2f07b5b2f965815ee61a0203b76a0b0d2c708a4786d06b96 | ||
DIST vkd3d-proton-2.6-vulkan-headers.tar.gz 415130 BLAKE2B 0c6444c4c1cb43b9c69757d7c2257ce2fe1bc6be308341f3189766f120994e4920bc738b737d9eefc299359dab568fb8809782e3663dd589c0e4d13aecb8873a SHA512 02cf1d63b29e48ef0efe489eb32237ba2f9f4bf58a182b00dc96aab18faba94de79283398e9e945cd81130f83fff228c59b04e496716ea9ccc148a5f4465282c | ||
DIST vkd3d-proton-2.6.tar.gz 1271948 BLAKE2B 02d2574a66614613748fe3471a6fd5aac2650fdae15a17b17ea2ed028fa53a0579b866e7240036a26108afc343395826474bb99e015b9299c2abec811bb872ab SHA512 6f27d213652e2380a9ba4534ac9ffe4b752b4608fbc2e8acd273fa151ab19ad0b132e3436384d2b8591cd1a59f0b69d342c893dc3a64be85188b5e3274bcf3f1 |
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,18 @@ | ||
<?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="extras">Install extra tools and demos in /usr/lib/vkd3d-proton</flag> | ||
</use> | ||
<upstream> | ||
<remote-id type="github">HansKristian-Work/vkd3d-proton</remote-id> | ||
</upstream> | ||
</pkgmetadata> |
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,161 @@ | ||
# 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 toolchain-funcs | ||
|
||
if [[ ${PV} == 9999 ]]; then | ||
inherit git-r3 | ||
EGIT_REPO_URI="https://github.com/HansKristian-Work/vkd3d-proton.git" | ||
EGIT_SUBMODULES=( | ||
# uses hacks / recent features and easily breaks, keep bundled headers | ||
# (also cross-compiled and -I/usr/include is troublesome) | ||
subprojects/{SPIRV,Vulkan}-Headers | ||
subprojects/dxil-spirv | ||
subprojects/dxil-spirv/third_party/spirv-headers # skip cross/tools | ||
) | ||
else | ||
VKD3D_HASH=3e5aab6fb3e18f81a71b339be4cb5cdf55140980 # match tag on bumps | ||
DXIL_HASH=b537bbb91bccdbc695cb7e5211d608f8d1c205bd | ||
SPIRV_HASH=ae217c17809fadb232ec94b29304b4afcd417bb4 | ||
VULKAN_HASH=83e1a9ed8ce289cebb1c02c8167d663dc1befb24 | ||
SRC_URI=" | ||
https://github.com/HansKristian-Work/vkd3d-proton/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz | ||
https://github.com/HansKristian-Work/dxil-spirv/archive/${DXIL_HASH}.tar.gz -> ${P}-dxil-spirv.tar.gz | ||
https://github.com/KhronosGroup/SPIRV-Headers/archive/${SPIRV_HASH}.tar.gz -> ${P}-vulkan-headers.tar.gz | ||
https://github.com/KhronosGroup/Vulkan-Headers/archive/${VULKAN_HASH}.tar.gz -> ${P}-spirv-headers.tar.gz" | ||
KEYWORDS="-* ~amd64 ~x86" | ||
fi | ||
|
||
DESCRIPTION="Fork of VKD3D, development branches for Proton's Direct3D 12 implementation" | ||
HOMEPAGE="https://github.com/HansKristian-Work/vkd3d-proton/" | ||
|
||
LICENSE="LGPL-2.1+ Apache-2.0 MIT" | ||
SLOT="0" | ||
IUSE="+abi_x86_32 crossdev-mingw debug extras" | ||
|
||
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 | ||
tool=-w64-mingw32-widl | ||
for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do | ||
if ! type -P widl >/dev/null && ! type -P ${tool} >/dev/null; then | ||
eerror "With USE=crossdev-mingw, you need to provide the widl compiler by either" | ||
eerror "building crossdev mingw64-runtime with USE=tools or installing wine." | ||
eerror "USE=crossdev-mingw is set but neither widl nor ${tool} were found" | ||
fi | ||
done | ||
fi | ||
} | ||
|
||
src_prepare() { | ||
if [[ ${PV} != 9999 ]]; then | ||
rmdir subprojects/{{SPIRV,Vulkan}-Headers,dxil-spirv} || die | ||
mv ../dxil-spirv-${DXIL_HASH} subprojects/dxil-spirv || die | ||
mv ../SPIRV-Headers-${SPIRV_HASH} subprojects/SPIRV-Headers || die | ||
mv ../Vulkan-Headers-${VULKAN_HASH} subprojects/Vulkan-Headers || die | ||
ln -s ../../../SPIRV-Headers/include \ | ||
subprojects/dxil-spirv/third_party/spirv-headers || die | ||
fi | ||
|
||
default | ||
|
||
sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_vkd3d_proton.sh || die | ||
|
||
if [[ ${PV} != 9999 ]]; then | ||
# without .git, meson sets vkd3d_build as 0x${PV} leading to failure | ||
sed -i "s/@VCS_TAG@/${VKD3D_HASH::15}/" vkd3d_build.h.in || die | ||
sed -i "s/@VCS_TAG@/${VKD3D_HASH::7}/" vkd3d_version.h.in || die | ||
fi | ||
} | ||
|
||
src_configure() { | ||
use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH} | ||
|
||
if [[ ${CHOST} != *-mingw* ]]; then | ||
unset AR CC CXX STRIP WIDL # likely unusable unless CHOST is mingw | ||
|
||
CHOST_amd64=x86_64-w64-mingw32 | ||
CHOST_x86=i686-w64-mingw32 | ||
CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64}) | ||
|
||
# preferring meson eclass' cross file over upstream's but, unlike | ||
# dxvk, we lose static options in the process (from build-win*.txt) | ||
append-ldflags -static -static-libgcc -static-libstdc++ | ||
|
||
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 STRIP WIDL | ||
|
||
# prefer ${CHOST}'s widl (mingw) over wine's as used by upstream if | ||
# possible, but eclasses don't handle that so setup machine files | ||
local widl=$(tc-getPROG WIDL widl) | ||
use amd64 && [[ ${widl} == widl && ${ABI} == x86 ]] && widl="widl','-m32" | ||
printf "[binaries]\nwidl = ['${widl}']\n" > "${T}"/widl.${ABI}.ini || die | ||
|
||
local emesonargs=( | ||
--prefix="${EPREFIX}"/usr/lib/${PN} | ||
--{bin,lib}dir=x$((${ABI#x}==86?86:64)) | ||
--{cross,native}-file="${T}"/widl.${ABI}.ini | ||
$(meson_use {,enable_}extras) | ||
$(meson_use debug enable_trace) | ||
$(usev !debug --strip) # portage won't strip .dll, so allow it here | ||
-Denable_tests=false # need wine/vulkan and intended for manual use | ||
) | ||
|
||
meson_src_configure | ||
} | ||
|
||
multilib_src_install_all() { | ||
dobin setup_vkd3d_proton.sh | ||
einstalldocs | ||
|
||
# unnecesasry files, see package-release.sh | ||
rm "${ED}"/usr/lib/${PN}/x*/libvkd3d-proton-utils-3.dll || die | ||
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_vkd3d_proton.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 | ||
} |
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,161 @@ | ||
# 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 toolchain-funcs | ||
|
||
if [[ ${PV} == 9999 ]]; then | ||
inherit git-r3 | ||
EGIT_REPO_URI="https://github.com/HansKristian-Work/vkd3d-proton.git" | ||
EGIT_SUBMODULES=( | ||
# uses hacks / recent features and easily breaks, keep bundled headers | ||
# (also cross-compiled and -I/usr/include is troublesome) | ||
subprojects/{SPIRV,Vulkan}-Headers | ||
subprojects/dxil-spirv | ||
subprojects/dxil-spirv/third_party/spirv-headers # skip cross/tools | ||
) | ||
else | ||
VKD3D_HASH=3e5aab6fb3e18f81a71b339be4cb5cdf55140980 # match tag on bumps | ||
DXIL_HASH=b537bbb91bccdbc695cb7e5211d608f8d1c205bd | ||
SPIRV_HASH=ae217c17809fadb232ec94b29304b4afcd417bb4 | ||
VULKAN_HASH=83e1a9ed8ce289cebb1c02c8167d663dc1befb24 | ||
SRC_URI=" | ||
https://github.com/HansKristian-Work/vkd3d-proton/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz | ||
https://github.com/HansKristian-Work/dxil-spirv/archive/${DXIL_HASH}.tar.gz -> ${P}-dxil-spirv.tar.gz | ||
https://github.com/KhronosGroup/SPIRV-Headers/archive/${SPIRV_HASH}.tar.gz -> ${P}-vulkan-headers.tar.gz | ||
https://github.com/KhronosGroup/Vulkan-Headers/archive/${VULKAN_HASH}.tar.gz -> ${P}-spirv-headers.tar.gz" | ||
KEYWORDS="-* ~amd64 ~x86" | ||
fi | ||
|
||
DESCRIPTION="Fork of VKD3D, development branches for Proton's Direct3D 12 implementation" | ||
HOMEPAGE="https://github.com/HansKristian-Work/vkd3d-proton/" | ||
|
||
LICENSE="LGPL-2.1+ Apache-2.0 MIT" | ||
SLOT="0" | ||
IUSE="+abi_x86_32 crossdev-mingw debug extras" | ||
|
||
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 | ||
tool=-w64-mingw32-widl | ||
for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do | ||
if ! type -P widl >/dev/null && ! type -P ${tool} >/dev/null; then | ||
eerror "With USE=crossdev-mingw, you need to provide the widl compiler by either" | ||
eerror "building crossdev mingw64-runtime with USE=tools or installing wine." | ||
eerror "USE=crossdev-mingw is set but neither widl nor ${tool} were found" | ||
fi | ||
done | ||
fi | ||
} | ||
|
||
src_prepare() { | ||
if [[ ${PV} != 9999 ]]; then | ||
rmdir subprojects/{{SPIRV,Vulkan}-Headers,dxil-spirv} || die | ||
mv ../dxil-spirv-${DXIL_HASH} subprojects/dxil-spirv || die | ||
mv ../SPIRV-Headers-${SPIRV_HASH} subprojects/SPIRV-Headers || die | ||
mv ../Vulkan-Headers-${VULKAN_HASH} subprojects/Vulkan-Headers || die | ||
ln -s ../../../SPIRV-Headers/include \ | ||
subprojects/dxil-spirv/third_party/spirv-headers || die | ||
fi | ||
|
||
default | ||
|
||
sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_vkd3d_proton.sh || die | ||
|
||
if [[ ${PV} != 9999 ]]; then | ||
# without .git, meson sets vkd3d_build as 0x${PV} leading to failure | ||
sed -i "s/@VCS_TAG@/${VKD3D_HASH::15}/" vkd3d_build.h.in || die | ||
sed -i "s/@VCS_TAG@/${VKD3D_HASH::7}/" vkd3d_version.h.in || die | ||
fi | ||
} | ||
|
||
src_configure() { | ||
use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH} | ||
|
||
if [[ ${CHOST} != *-mingw* ]]; then | ||
unset AR CC CXX STRIP WIDL # likely unusable unless CHOST is mingw | ||
|
||
CHOST_amd64=x86_64-w64-mingw32 | ||
CHOST_x86=i686-w64-mingw32 | ||
CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64}) | ||
|
||
# preferring meson eclass' cross file over upstream's but, unlike | ||
# dxvk, we lose static options in the process (from build-win*.txt) | ||
append-ldflags -static -static-libgcc -static-libstdc++ | ||
|
||
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 STRIP WIDL | ||
|
||
# prefer ${CHOST}'s widl (mingw) over wine's as used by upstream if | ||
# possible, but eclasses don't handle that so setup machine files | ||
local widl=$(tc-getPROG WIDL widl) | ||
use amd64 && [[ ${widl} == widl && ${ABI} == x86 ]] && widl="widl','-m32" | ||
printf "[binaries]\nwidl = ['${widl}']\n" > "${T}"/widl.${ABI}.ini || die | ||
|
||
local emesonargs=( | ||
--prefix="${EPREFIX}"/usr/lib/${PN} | ||
--{bin,lib}dir=x$((${ABI#x}==86?86:64)) | ||
--{cross,native}-file="${T}"/widl.${ABI}.ini | ||
$(meson_use {,enable_}extras) | ||
$(meson_use debug enable_trace) | ||
$(usev !debug --strip) # portage won't strip .dll, so allow it here | ||
-Denable_tests=false # need wine/vulkan and intended for manual use | ||
) | ||
|
||
meson_src_configure | ||
} | ||
|
||
multilib_src_install_all() { | ||
dobin setup_vkd3d_proton.sh | ||
einstalldocs | ||
|
||
# unnecesasry files, see package-release.sh | ||
rm "${ED}"/usr/lib/${PN}/x*/libvkd3d-proton-utils-3.dll || die | ||
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_vkd3d_proton.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 | ||
} |