Gentoo Archives: gentoo-commits

From: Jeroen Roovers <jer@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: x11-drivers/nvidia-drivers/, profiles/base/
Date: Mon, 02 Sep 2019 06:14:11
Message-Id: 1567404842.418d6d42276aa1865217dcba35b1a21ff86c2c51.jer@gentoo
1 commit: 418d6d42276aa1865217dcba35b1a21ff86c2c51
2 Author: Jeroen Roovers <jer <AT> gentoo <DOT> org>
3 AuthorDate: Mon Sep 2 06:12:54 2019 +0000
4 Commit: Jeroen Roovers <jer <AT> gentoo <DOT> org>
5 CommitDate: Mon Sep 2 06:14:02 2019 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=418d6d42
7
8 x11-drivers/nvidia-drivers: Version 435.21
9
10 Package-Manager: Portage-2.3.75, Repoman-2.3.17
11 Bug: https://bugs.gentoo.org/692170
12 Signed-off-by: Jeroen Roovers <jer <AT> gentoo.org>
13
14 profiles/base/package.use.mask | 3 +
15 x11-drivers/nvidia-drivers/Manifest | 3 +
16 x11-drivers/nvidia-drivers/metadata.xml | 3 +-
17 .../nvidia-drivers/nvidia-drivers-435.21.ebuild | 603 +++++++++++++++++++++
18 4 files changed, 611 insertions(+), 1 deletion(-)
19
20 diff --git a/profiles/base/package.use.mask b/profiles/base/package.use.mask
21 index cdb369d6e79..dec89386d6a 100644
22 --- a/profiles/base/package.use.mask
23 +++ b/profiles/base/package.use.mask
24 @@ -127,7 +127,10 @@ app-admin/conserver freeipmi
25
26 # Matt Turner <mattst88@g.o> (2019-03-03)
27 # Mask for testing. Bug 606924
28 +# Jeroen Roovers <jer@g.o> (2019-09-02)
29 +# Bug 692170
30 media-libs/mesa libglvnd
31 +x11-drivers/nvidia-drivers libglvnd
32
33 # Georgy Yakovlev <gyakovlev@g.o> (2019-01-17)
34 # Mask openjdk:8 for use as system java-vm until it's proven to work
35
36 diff --git a/x11-drivers/nvidia-drivers/Manifest b/x11-drivers/nvidia-drivers/Manifest
37 index 5fd9b028c81..cfea009f52d 100644
38 --- a/x11-drivers/nvidia-drivers/Manifest
39 +++ b/x11-drivers/nvidia-drivers/Manifest
40 @@ -7,6 +7,7 @@ DIST NVIDIA-FreeBSD-x86_64-415.27.tar.gz 62389955 BLAKE2B 39ac5970ef1a6ffbb03abe
41 DIST NVIDIA-FreeBSD-x86_64-418.88.tar.gz 62076023 BLAKE2B 10f9fc4073c926d170a57e165454171c31624824d44a67f78bad68843b87f965361db509a5b86989a1224a347ca0550015ffd8e137ad17974708e802604b397b SHA512 d3a0f029f3d8c78a7419dbf7fd3af1b22ab01cf8d6d770572e44f2b61635e05f17d3262b611a7760b66bdc3ad4283a558c393f0f8c0e64d87eacbc929bb657bc
42 DIST NVIDIA-FreeBSD-x86_64-430.40.tar.gz 62712042 BLAKE2B 6791f5931c715888dc76a0e4d2d28deecce24fc7ab989eba6def0369c3f30ccb680dbc792a0a9c3df9194c21286612c9a02f3130e0db53e06a2071f7b3662097 SHA512 a8fd481bafaff2a5aa68a4b1bc57bed80eb794c2d2a35d26546e113610276d0aec79116fb31bd34283da9fae559eef6357e5639baf8a5ced63eb8af6c26fc7bc
43 DIST NVIDIA-FreeBSD-x86_64-435.17.tar.gz 64151018 BLAKE2B 22e18998d2b169de759e8f2951f6ffd4bfea643985d45895b267d1a36e211565b30d3937f75c17fe9a0cc3368902b9968eb817767053e691a15eaecc6b5d7412 SHA512 203727be00e8dd2a3df140058c111527bcb2b2689559cccbfd4557b45f832898cd89f04fda810262d4d91a8629c4c85b3a360f10b77a57dbf5c123549a5da0c0
44 +DIST NVIDIA-FreeBSD-x86_64-435.21.tar.gz 64153630 BLAKE2B fee655cc843c004ac0c1ec85b9417292016a013136e04ad047d2513edbdc7c732561d6bcc4603c658905972dce6618de49d4d6ac583e84fdf212cf45397b48c1 SHA512 2c160c06ca58e3009deb1ba4a4a28d39419e251ced3bfa9a442942f9cce17003d67e8a8bfa23036d3916cc0e66f4bff0fbedaae73db6f10b995235a56d7eba7c
45 DIST NVIDIA-Linux-armv7l-gnueabihf-390.129.run 29102893 BLAKE2B 19f73b7ac4df7d0584f180492676eba65a42c527566175308ebb78bd10e0a43c3f300f013193cafc9eccf1cb32a58f8d6dc574073d4197d2d71d90f224e6a5c4 SHA512 9e7a10e0bbd856a7a630fb8d1660a3e5cd224a04243989dbd24f3cc2e869a817a1fabe98b4257e9e5870a96f8d6dbcf51312c960a4a185457cb011ac9a0246fc
46 DIST NVIDIA-Linux-x86-340.107.run 39016798 BLAKE2B 2632c8f257d0cf7c5b9294eb2c0b763eee6feb60eacc316024655971e4d067c4af6548aab3b7b2b295792b064f3f3ac3e6403a2ecfa096761d308dfb6b2569b8 SHA512 0add713942bcdb639d19b5c36f5e0cea14f9e07490191d46dfeba0515ede7700fd8e9467ec531d38329fe1e76bf45905e70e0d440e7bc2dc79c1d767eab03338
47 DIST NVIDIA-Linux-x86-390.129.run 47560033 BLAKE2B e9b34c51d63dada2714c74cdb4ab199a141b1f5dd9f0d3222b1f5eec6a6a07dd2fdc2a609b9d0683b99c26078f4426082ea25b663c47f33fff4bb84599ac41e2 SHA512 b31d8f6b663fa7da1291fc25b4b08e17019476da521baea41201410a1d8a803b8ac9bad18485ff53589cea281ae4ece749118fa23a63e2c0720aafc60367255f
48 @@ -17,6 +18,7 @@ DIST NVIDIA-Linux-x86_64-415.27.run 108399659 BLAKE2B 05fb81a4ab8626d0170a30b70e
49 DIST NVIDIA-Linux-x86_64-418.88.run 109217245 BLAKE2B fd7e4aee2306cda92e99a3adeb74ada4ac64f81f0ffbc72bac6eb5f0f9815e4f71452e7fdbf49c749b0a7dd0e147e12c44282c2d8be6747b8504b1621b982844 SHA512 c4ee1eae30e8158007c3bbcff941bc8ee0bef9bba216b8a57c42305bc338d2d98d5fc56ec90b0809216a7eba8d7a67fe5be298943f2688daccf5c78efc0dd119
50 DIST NVIDIA-Linux-x86_64-430.40.run 111258448 BLAKE2B 9782181d5044430b374305fc868dd753d0f27c3b2f1f6b4bd34b3a49226730c4cf34b1ea4f3ba2c4fce5739c0408c64cc79f1a2c5a312ff3e09a5d20a79ce625 SHA512 68e6187fe74b43e92de6159589463db5f74eba09652b0f55d5fcc790c315405df6cd27129185f4dbe18790abdbb61e79b52977d47c6407e74d3372b5511a4e1b
51 DIST NVIDIA-Linux-x86_64-435.17.run 142539690 BLAKE2B 0e196128496fce634dfe8eceb873af5beebe1ac6c1c040c449e24bf00336b16716d065b622ab2a0f26c41c570db156afd5f3b36f2145d96988e9dff1e2a6dff6 SHA512 28f1d82f00d4c46431ec8ce6e2357b94c2eb68516e650ca941ab04e202b0aa15ee6573eb692b43a3eff6afc974a5702b2873a864c43b9f2b0e5b2feb8fe00923
52 +DIST NVIDIA-Linux-x86_64-435.21.run 144387574 BLAKE2B e9afd6335182a28f5136dbef55195a2f2d8f768376ebc148190a0a82470a34d008ce04170ffc1aab36585605910c1300567a90443b5f58cb46ec3bff6ab9409c SHA512 e83b6dff80434971c0b254815945d485a45c978b8a19994244f50a463658863948b2eac8bc62d667bb10c23f41cf1c3521c409d23ac2ab6a0c0cd094a6e20270
53 DIST nvidia-settings-340.107.tar.bz2 1549413 BLAKE2B 127442ee2c35ceec47ab4f103bdd2d0278c621fcb9be47051111f6f8728ef5699bdc95fe33a3812a807c38c4868b04c2176e2ed218a422171d2a88ac0c00de96 SHA512 593e7e83aa350a3a7beaaa32aca8660d7e203f6f2e460a6e6eabcdc092087f9917ee4e6d141e37ad4e3b0a1b9908c085e4a71d2f579e481a03bbd1c6f75ca776
54 DIST nvidia-settings-390.129.tar.bz2 1109456 BLAKE2B cdce0bba52697e214ea26514467ea6f61fa06429f0a58ca549b74d8da1f7b07cbc52b1c9de6a13aed77545c2ba8c98b212a7865fdc5026dcd74f5565b73c4e1e SHA512 bf004608fbee6a12521fbcd9ab4e3d0333896b320c943ed9f2dc5373d8ffb2eb9cb4c6873a263acac87a9ab67a5f4589344d2bbd70bce36cf14242f4d57e1b87
55 DIST nvidia-settings-410.104.tar.bz2 1120639 BLAKE2B 75554b0cca7c022a0f1cc02091f81ccd930e30e1dd5f674cf35b0cfed83c5e235c360b0f28701d39d42017b35b816f975ff177398eb9f59280851c0b8bfd57d3 SHA512 08d938117fca4d471bdff451219e6772fdd1e9c37c0ed623be8506c1cb5ce7ccde4d073848ade9f5bfca14b1a3cf9eb90b4b4bf44375bff43d023815b622b424
56 @@ -24,3 +26,4 @@ DIST nvidia-settings-415.27.tar.bz2 1128013 BLAKE2B 36513252ff3d5f2036c80250e012
57 DIST nvidia-settings-418.88.tar.bz2 1127894 BLAKE2B 04b7c888e006f49e1745ede6eb8db35563c248b3c6be0c15539af1f9224c13ac7273037827e20294b03db0d5a56a62da8544ec605c40fcc0a2a15c741d76af9d SHA512 fbd46aaf41da4f04e8cdb3c484c9170633921673adfc878588f1e5464cc690b8a9fcb37b3c3cb8f0fdb496ed1abafcf0694039543c1354f7b481a46418309099
58 DIST nvidia-settings-430.40.tar.bz2 1131627 BLAKE2B da55a08d3a4d096afe5aec5fc7faf36b10d814cf135a444f06a115b225d94fe20046a266e6afee3660b588561c4fadb1581e6f9ab9196fe19eb171140f05ba9c SHA512 9273887c2487476fc004839320b66726a766b0378dfd81d030386918d67e6a25ec6b26bed1db5c07634347e8cd6782f826c75e9ba8977b06e37880e4b55a1b9f
59 DIST nvidia-settings-435.17.tar.bz2 1131069 BLAKE2B 9c0b13b5a023b819a4ce88cb238efe8b5b6eb7a7b72d0affe947e84629b55e42ee1f6eddb2c874fb2856918fe7bfb9ea2e844ffdfd6bc298d95ba23ca8b86947 SHA512 30e683f0ad0b663946cdc5bd8aa9eb4e52774f378e1499536b0f7e37c32960ba2a6901cd4dec3eb0ffd874cf0225c5e95f4d69e78ca99d44a93a2de054251344
60 +DIST nvidia-settings-435.21.tar.bz2 1131222 BLAKE2B 855f5c7667f4a5ec0f917fbb017d70ec6ee5e768f7087e77e54a66dea852c471bd1810a2163fb33204e5f381998a27a4254e0a5d2c73e2b6b624813ff8294f24 SHA512 8b408cc70118df3a138a99fe7fc14f6370d500b8ae26888b27b07de22f6fc6eebd65bd437d83ee82e18a1d8ee4cceec601c414b1947302ca808fff48165f31bb
61
62 diff --git a/x11-drivers/nvidia-drivers/metadata.xml b/x11-drivers/nvidia-drivers/metadata.xml
63 index dea17321a16..4bdb2f83abc 100644
64 --- a/x11-drivers/nvidia-drivers/metadata.xml
65 +++ b/x11-drivers/nvidia-drivers/metadata.xml
66 @@ -14,11 +14,12 @@ You can use http://www.nvidia.com/Download/Find.aspx to figure out which branch
67 best matches your hardware.
68 </longdescription>
69 <use>
70 +<flag name="X">Install the X.org driver, OpenGL libraries, XvMC libraries, and VDPAU libraries</flag>
71 <flag name="compat">Install non-GLVND libGL for backwards compatibility</flag>
72 <flag name="driver">Install the kernel driver module</flag>
73 -<flag name="X">Install the X.org driver, OpenGL libraries, XvMC libraries, and VDPAU libraries</flag>
74 <flag name="gtk3">Install nvidia-settings with support for GTK+ 3</flag>
75 <flag name="kms">Enable support for kernel mode setting (KMS)</flag>
76 +<flag name="libglvnd">Use <pkg>media-libs/libglvnd</pkg> for dispatch</flag>
77 <flag name="tools">Install additional tools such as nvidia-settings</flag>
78 <flag name="uvm">Install the Unified Memory kernel module (nvidia-uvm) for sharing memory between CPU and GPU in CUDA programs</flag>
79 </use>
80
81 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-435.21.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-435.21.ebuild
82 new file mode 100644
83 index 00000000000..328511e0cf6
84 --- /dev/null
85 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-435.21.ebuild
86 @@ -0,0 +1,603 @@
87 +# Copyright 1999-2019 Gentoo Authors
88 +# Distributed under the terms of the GNU General Public License v2
89 +
90 +EAPI=6
91 +inherit eutils flag-o-matic linux-info linux-mod multilib-minimal nvidia-driver \
92 + portability toolchain-funcs unpacker user udev
93 +
94 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
95 +HOMEPAGE="https://www.nvidia.com/"
96 +
97 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
98 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
99 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
100 +
101 +NV_URI="https://us.download.nvidia.com/XFree86/"
102 +SRC_URI="
103 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
104 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
105 + tools? (
106 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
107 + )
108 +"
109 +
110 +LICENSE="GPL-2 NVIDIA-r2"
111 +SLOT="0/${PV%.*}"
112 +KEYWORDS="-* ~amd64 ~amd64-fbsd"
113 +RESTRICT="bindist mirror"
114 +EMULTILIB_PKG="true"
115 +
116 +IUSE="acpi compat +driver gtk3 kernel_FreeBSD kernel_linux +kms libglvnd multilib static-libs +tools uvm wayland +X"
117 +REQUIRED_USE="
118 + tools? ( X )
119 + static-libs? ( tools )
120 +"
121 +RESTRICT="test"
122 +
123 +COMMON="
124 + app-eselect/eselect-opencl
125 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
126 + tools? (
127 + dev-libs/atk
128 + dev-libs/glib:2
129 + dev-libs/jansson
130 + gtk3? (
131 + x11-libs/gtk+:3
132 + )
133 + x11-libs/cairo
134 + x11-libs/gdk-pixbuf[X]
135 + x11-libs/gtk+:2
136 + x11-libs/libX11
137 + x11-libs/libXext
138 + x11-libs/libXrandr
139 + x11-libs/libXv
140 + x11-libs/libXxf86vm
141 + x11-libs/pango[X]
142 + )
143 + X? (
144 + !libglvnd? ( >=app-eselect/eselect-opengl-1.0.9 )
145 + libglvnd? (
146 + media-libs/libglvnd[${MULTILIB_USEDEP}]
147 + !app-eselect/eselect-opengl
148 + )
149 + app-misc/pax-utils
150 + )
151 +"
152 +DEPEND="
153 + ${COMMON}
154 + kernel_linux? ( virtual/linux-sources )
155 + tools? ( sys-apps/dbus )
156 +"
157 +RDEPEND="
158 + ${COMMON}
159 + acpi? ( sys-power/acpid )
160 + tools? ( !media-video/nvidia-settings )
161 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
162 + X? (
163 + <x11-base/xorg-server-1.20.99:=
164 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
165 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
166 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
167 + sys-libs/zlib[${MULTILIB_USEDEP}]
168 + )
169 +"
170 +QA_PREBUILT="opt/* usr/lib*"
171 +S=${WORKDIR}/
172 +
173 +nvidia_drivers_versions_check() {
174 + if use amd64 && has_multilib_profile && \
175 + [ "${DEFAULT_ABI}" != "amd64" ]; then
176 + eerror "This ebuild doesn't currently support changing your default ABI"
177 + die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
178 + fi
179 +
180 + if use kernel_linux && kernel_is ge 5 3; then
181 + ewarn "Gentoo supports kernels which are supported by NVIDIA"
182 + ewarn "which are limited to the following kernels:"
183 + ewarn "<sys-kernel/gentoo-sources-5.3"
184 + ewarn "<sys-kernel/vanilla-sources-5.3"
185 + ewarn ""
186 + ewarn "You are free to utilize epatch_user to provide whatever"
187 + ewarn "support you feel is appropriate, but will not receive"
188 + ewarn "support as a result of those changes."
189 + ewarn ""
190 + ewarn "Do not file a bug report about this."
191 + ewarn ""
192 + fi
193 +
194 + # Since Nvidia ships many different series of drivers, we need to give the user
195 + # some kind of guidance as to what version they should install. This tries
196 + # to point the user in the right direction but can't be perfect. check
197 + # nvidia-driver.eclass
198 + nvidia-driver-check-warning
199 +
200 + # Kernel features/options to check for
201 + CONFIG_CHECK="!DEBUG_MUTEXES !I2C_NVIDIA_GPU ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
202 +
203 + # Now do the above checks
204 + use kernel_linux && check_extra_config
205 +}
206 +
207 +pkg_pretend() {
208 + nvidia_drivers_versions_check
209 +}
210 +
211 +pkg_setup() {
212 + nvidia_drivers_versions_check
213 +
214 + # try to turn off distcc and ccache for people that have a problem with it
215 + export DISTCC_DISABLE=1
216 + export CCACHE_DISABLE=1
217 +
218 + if use driver && use kernel_linux; then
219 + MODULE_NAMES="nvidia(video:${S}/kernel)"
220 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
221 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
222 +
223 + # This needs to run after MODULE_NAMES (so that the eclass checks
224 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
225 + # is set (so that KV_DIR is populated).
226 + linux-mod_pkg_setup
227 +
228 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
229 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
230 +
231 + # linux-mod_src_compile calls set_arch_to_kernel, which
232 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
233 + # expects x86_64 or i386 and then converts it to x86
234 + # later on in the build process
235 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
236 + fi
237 +
238 + if use kernel_linux && kernel_is lt 2 6 9; then
239 + eerror "You must build this against 2.6.9 or higher kernels."
240 + fi
241 +
242 + # set variables to where files are in the package structure
243 + if use kernel_FreeBSD; then
244 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
245 + NV_DOC="${S}/doc"
246 + NV_OBJ="${S}/obj"
247 + NV_SRC="${S}/src"
248 + NV_MAN="${S}/x11/man"
249 + NV_X11="${S}/obj"
250 + NV_SOVER=1
251 + elif use kernel_linux; then
252 + NV_DOC="${S}"
253 + NV_OBJ="${S}"
254 + NV_SRC="${S}/kernel"
255 + NV_MAN="${S}"
256 + NV_X11="${S}"
257 + NV_SOVER=${PV}
258 + else
259 + die "Could not determine proper NVIDIA package"
260 + fi
261 +}
262 +
263 +src_configure() {
264 + tc-export AR CC LD
265 +
266 + default
267 +}
268 +
269 +src_prepare() {
270 + local man_file
271 + for man_file in "${NV_MAN}"/*1.gz; do
272 + gunzip $man_file || die
273 + done
274 +
275 + if use tools; then
276 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
277 + sed -i \
278 + -e "s:@PV@:${PV}:g" \
279 + "${WORKDIR}"/nvidia-settings-linker.patch || die
280 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
281 + fi
282 +
283 + default
284 +
285 + if ! [ -f nvidia_icd.json ]; then
286 + cp nvidia_icd.json.template nvidia_icd.json || die
287 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
288 + fi
289 +}
290 +
291 +src_compile() {
292 + cd "${NV_SRC}"
293 + if use kernel_FreeBSD; then
294 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
295 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
296 + elif use driver && use kernel_linux; then
297 + BUILD_TARGETS=module linux-mod_src_compile \
298 + KERNELRELEASE="${KV_FULL}" \
299 + src="${KERNEL_DIR}"
300 + fi
301 +
302 + if use tools; then
303 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
304 + DO_STRIP= \
305 + LIBDIR="$(get_libdir)" \
306 + NVLD="$(tc-getLD)" \
307 + NV_VERBOSE=1 \
308 + OUTPUTDIR=. \
309 + RANLIB="$(tc-getRANLIB)"
310 +
311 + emake -C "${S}"/nvidia-settings-${PV}/src \
312 + DO_STRIP= \
313 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
314 + LIBDIR="$(get_libdir)" \
315 + NVLD="$(tc-getLD)" \
316 + NVML_ENABLED=0 \
317 + NV_USE_BUNDLED_LIBJANSSON=0 \
318 + NV_VERBOSE=1 \
319 + OUTPUTDIR=.
320 + fi
321 +}
322 +
323 +# Install nvidia library:
324 +# the first parameter is the library to install
325 +# the second parameter is the provided soversion
326 +# the third parameter is the target directory if it is not /usr/lib
327 +donvidia() {
328 + # Full path to library
329 + nv_LIB="${1}"
330 +
331 + # SOVER to use
332 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
333 +
334 + # Where to install
335 + nv_DEST="${2}"
336 +
337 + # Get just the library name
338 + nv_LIBNAME=$(basename "${nv_LIB}")
339 +
340 + if [[ "${nv_DEST}" ]]; then
341 + exeinto ${nv_DEST}
342 + action="doexe"
343 + else
344 + nv_DEST="/usr/$(get_libdir)"
345 + action="dolib.so"
346 + fi
347 +
348 + # Install the library
349 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
350 +
351 + # If the library has a SONAME and SONAME does not match the library name,
352 + # then we need to create a symlink
353 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
354 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER} \
355 + || die "failed to create ${nv_DEST}/${nv_SOVER} symlink"
356 + fi
357 +
358 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so} \
359 + || die "failed to create ${nv_LIBNAME/.so*/.so} symlink"
360 +}
361 +
362 +src_install() {
363 + if use driver && use kernel_linux; then
364 + linux-mod_src_install
365 +
366 + # Add the aliases
367 + # This file is tweaked with the appropriate video group in
368 + # pkg_preinst, see bug #491414
369 + insinto /etc/modprobe.d
370 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
371 + if use uvm; then
372 + doins "${FILESDIR}"/nvidia-rmmod.conf
373 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
374 + else
375 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
376 + > "${T}"/nvidia-rmmod.conf || die
377 + doins "${T}"/nvidia-rmmod.conf
378 + fi
379 +
380 + # Ensures that our device nodes are created when not using X
381 + exeinto "$(get_udevdir)"
382 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
383 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
384 + elif use kernel_FreeBSD; then
385 + if use x86-fbsd; then
386 + insinto /boot/modules
387 + doins "${S}/src/nvidia.kld"
388 + fi
389 +
390 + exeinto /boot/modules
391 + doexe "${S}/src/nvidia.ko"
392 + fi
393 +
394 + # NVIDIA kernel <-> userspace driver config lib
395 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
396 +
397 + # NVIDIA framebuffer capture library
398 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
399 +
400 + # NVIDIA video encode/decode <-> CUDA
401 + if use kernel_linux; then
402 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
403 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
404 + fi
405 +
406 + if use X; then
407 + # Xorg DDX driver
408 + insinto /usr/$(get_libdir)/xorg/modules/drivers
409 + doins ${NV_X11}/nvidia_drv.so
410 +
411 + # Xorg GLX driver
412 + donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
413 + /usr/$(get_libdir)/xorg/modules/extensions
414 +
415 + # Xorg nvidia.conf
416 + if has_version '>=x11-base/xorg-server-1.16'; then
417 + insinto /usr/share/X11/xorg.conf.d
418 + newins {,50-}nvidia-drm-outputclass.conf
419 + fi
420 +
421 + insinto /usr/share/glvnd/egl_vendor.d
422 + doins ${NV_X11}/10_nvidia.json
423 + fi
424 +
425 + if use wayland; then
426 + insinto /usr/share/egl/egl_external_platform.d
427 + doins ${NV_X11}/10_nvidia_wayland.json
428 + fi
429 +
430 + # OpenCL ICD for NVIDIA
431 + if use kernel_linux; then
432 + insinto /etc/OpenCL/vendors
433 + doins ${NV_OBJ}/nvidia.icd
434 + fi
435 +
436 + # Helper Apps
437 + exeinto /opt/bin/
438 +
439 + if use X; then
440 + doexe ${NV_OBJ}/nvidia-xconfig
441 +
442 + insinto /etc/vulkan/icd.d
443 + doins nvidia_icd.json
444 + fi
445 +
446 + if use kernel_linux; then
447 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
448 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
449 + doexe ${NV_OBJ}/nvidia-debugdump
450 + doexe ${NV_OBJ}/nvidia-persistenced
451 + doexe ${NV_OBJ}/nvidia-smi
452 +
453 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
454 + doexe ${NV_OBJ}/nvidia-modprobe
455 + fowners root:video /opt/bin/nvidia-modprobe
456 + fperms 4710 /opt/bin/nvidia-modprobe
457 + dosym /{opt,usr}/bin/nvidia-modprobe
458 +
459 + doman nvidia-cuda-mps-control.1
460 + doman nvidia-modprobe.1
461 + doman nvidia-persistenced.1
462 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
463 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
464 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
465 + fi
466 +
467 + if use tools; then
468 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
469 + DESTDIR="${D}" \
470 + DO_STRIP= \
471 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
472 + LIBDIR="${D}/usr/$(get_libdir)" \
473 + NV_USE_BUNDLED_LIBJANSSON=0 \
474 + NV_VERBOSE=1 \
475 + OUTPUTDIR=. \
476 + PREFIX=/usr \
477 + install
478 +
479 + if use static-libs; then
480 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
481 +
482 + insinto /usr/include/NVCtrl
483 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
484 + fi
485 +
486 + insinto /usr/share/nvidia/
487 + doins nvidia-application-profiles-${PV}-key-documentation
488 +
489 + insinto /etc/nvidia
490 + newins \
491 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
492 +
493 + # There is no icon in the FreeBSD tarball.
494 + use kernel_FreeBSD || \
495 + doicon ${NV_OBJ}/nvidia-settings.png
496 +
497 + domenu "${FILESDIR}"/nvidia-settings.desktop
498 +
499 + exeinto /etc/X11/xinit/xinitrc.d
500 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
501 + fi
502 +
503 + dobin ${NV_OBJ}/nvidia-bug-report.sh
504 +
505 + if has_multilib_profile && use multilib; then
506 + local OABI=${ABI}
507 + for ABI in $(get_install_abis); do
508 + src_install-libs
509 + done
510 + ABI=${OABI}
511 + unset OABI
512 + else
513 + src_install-libs
514 + fi
515 +
516 + is_final_abi || die "failed to iterate through all ABIs"
517 +
518 + # Documentation
519 + if use kernel_FreeBSD; then
520 + dodoc "${NV_DOC}/README"
521 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
522 + use tools && doman "${NV_MAN}"/nvidia-settings.1
523 + else
524 + # Docs
525 + newdoc "${NV_DOC}/README.txt" README
526 + dodoc "${NV_DOC}/NVIDIA_Changelog"
527 + doman "${NV_MAN}"/nvidia-smi.1
528 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
529 + use tools && doman "${NV_MAN}"/nvidia-settings.1
530 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
531 + fi
532 +
533 + readme.gentoo_create_doc
534 +
535 + docinto html
536 + dodoc -r ${NV_DOC}/html/*
537 +}
538 +
539 +src_install-libs() {
540 + local inslibdir=$(get_libdir)
541 + if use libglvnd; then
542 + local GL_ROOT="/usr/$(get_libdir)"
543 + else
544 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
545 + fi
546 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
547 + local nv_libdir="${NV_OBJ}"
548 +
549 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
550 + nv_libdir="${NV_OBJ}"/32
551 + fi
552 +
553 + if use X; then
554 + NV_GLX_LIBRARIES=(
555 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
556 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
557 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
558 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
559 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
560 + "libcuda.so.${NV_SOVER}"
561 + "libnvcuvid.so.${NV_SOVER}"
562 + "libnvidia-compiler.so.${NV_SOVER}"
563 + "libnvidia-eglcore.so.${NV_SOVER}"
564 + "libnvidia-encode.so.${NV_SOVER}"
565 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
566 + "libnvidia-fbc.so.${NV_SOVER}"
567 + "libnvidia-glcore.so.${NV_SOVER}"
568 + "libnvidia-glsi.so.${NV_SOVER}"
569 + "libnvidia-glvkspirv.so.${NV_SOVER}"
570 + "libnvidia-ifr.so.${NV_SOVER}"
571 + "libnvidia-opencl.so.${NV_SOVER}"
572 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
573 + "libvdpau_nvidia.so.${NV_SOVER}"
574 + )
575 + if ! use libglvnd; then
576 + NV_GLX_LIBRARIES+=(
577 + "libEGL.so.$( [[ ${ABI} == "amd64" ]] && usex compat ${NV_SOVER} 1.1.0 || echo 1.1.0) ${GL_ROOT}"
578 + "libGL.so.1.7.0 ${GL_ROOT}"
579 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
580 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
581 + "libGLX.so.0 ${GL_ROOT}"
582 + "libGLdispatch.so.0 ${GL_ROOT}"
583 + "libOpenGL.so.0 ${GL_ROOT}"
584 + )
585 + fi
586 +
587 + if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
588 + then
589 + NV_GLX_LIBRARIES+=(
590 + "libnvidia-egl-wayland.so.1.1.3"
591 + )
592 + fi
593 +
594 + if use kernel_FreeBSD; then
595 + NV_GLX_LIBRARIES+=(
596 + "libnvidia-tls.so.${NV_SOVER}"
597 + )
598 + fi
599 +
600 + if use kernel_linux; then
601 + NV_GLX_LIBRARIES+=(
602 + "libnvidia-ml.so.${NV_SOVER}"
603 + "libnvidia-tls.so.${NV_SOVER}"
604 + )
605 + fi
606 +
607 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
608 + then
609 + NV_GLX_LIBRARIES+=(
610 + "libnvidia-cbl.so.${NV_SOVER}"
611 + "libnvidia-rtcore.so.${NV_SOVER}"
612 + "libnvoptix.so.${NV_SOVER}"
613 + )
614 + fi
615 +
616 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
617 + donvidia "${nv_libdir}"/${NV_LIB}
618 + done
619 + fi
620 +}
621 +
622 +pkg_preinst() {
623 + if use driver && use kernel_linux; then
624 + linux-mod_pkg_preinst
625 +
626 + local videogroup="$(egetent group video | cut -d ':' -f 3)"
627 + if [ -z "${videogroup}" ]; then
628 + eerror "Failed to determine the video group gid"
629 + die "Failed to determine the video group gid"
630 + else
631 + sed -i \
632 + -e "s:PACKAGE:${PF}:g" \
633 + -e "s:VIDEOGID:${videogroup}:" \
634 + "${D}"/etc/modprobe.d/nvidia.conf || die
635 + fi
636 + fi
637 +
638 + # Clean the dynamic libGL stuff's home to ensure
639 + # we dont have stale libs floating around
640 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
641 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
642 + fi
643 + # Make sure we nuke the old nvidia-glx's env.d file
644 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
645 + rm -f "${ROOT}"/etc/env.d/09nvidia
646 + fi
647 +}
648 +
649 +pkg_postinst() {
650 + use driver && use kernel_linux && linux-mod_pkg_postinst
651 +
652 + # Switch to the nvidia implementation
653 + if ! use libglvnd; then
654 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
655 + fi
656 + "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
657 +
658 + readme.gentoo_print_elog
659 +
660 + if ! use X; then
661 + elog "You have elected to not install the X.org driver. Along with"
662 + elog "this the OpenGL libraries and VDPAU libraries were not"
663 + elog "installed. Additionally, once the driver is loaded your card"
664 + elog "and fan will run at max speed which may not be desirable."
665 + elog "Use the 'nvidia-smi' init script to have your card and fan"
666 + elog "speed scale appropriately."
667 + elog
668 + fi
669 + if ! use tools; then
670 + elog "USE=tools controls whether the nvidia-settings application"
671 + elog "is installed. If you would like to use it, enable that"
672 + elog "flag and re-emerge this ebuild. Optionally you can install"
673 + elog "media-video/nvidia-settings"
674 + elog
675 + fi
676 +}
677 +
678 +pkg_prerm() {
679 + if ! use libglvnd; then
680 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
681 + fi
682 +}
683 +
684 +pkg_postrm() {
685 + use driver && use kernel_linux && linux-mod_pkg_postrm
686 + if ! use libglvnd; then
687 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
688 + fi
689 +}