-
Notifications
You must be signed in to change notification settings - Fork 2k
/
dxvk-9999.ebuild
117 lines (95 loc) · 3.76 KB
/
dxvk-9999.ebuild
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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
}