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/
Date: Thu, 17 Sep 2020 20:29:37
Message-Id: 1600374572.d0bac3b2fc36658254cae08eec9a10833a578663.jer@gentoo
1 commit: d0bac3b2fc36658254cae08eec9a10833a578663
2 Author: Jeroen Roovers <jer <AT> gentoo <DOT> org>
3 AuthorDate: Thu Sep 17 20:28:23 2020 +0000
4 Commit: Jeroen Roovers <jer <AT> gentoo <DOT> org>
5 CommitDate: Thu Sep 17 20:29:32 2020 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d0bac3b2
7
8 x11-drivers/nvidia-drivers: Version 455.23.04
9
10 Package-Manager: Portage-3.0.7, Repoman-3.0.1
11 Signed-off-by: Jeroen Roovers <jer <AT> gentoo.org>
12
13 x11-drivers/nvidia-drivers/Manifest | 3 +
14 x11-drivers/nvidia-drivers/nvidia-drivers- | 595 +++++++++++++++++++++
15 .../nvidia-drivers/nvidia-drivers-455.23.04.ebuild | 595 +++++++++++++++++++++
16 3 files changed, 1193 insertions(+)
17
18 diff --git a/x11-drivers/nvidia-drivers/Manifest b/x11-drivers/nvidia-drivers/Manifest
19 index aac9b5ca9e0..05ff0e528b9 100644
20 --- a/x11-drivers/nvidia-drivers/Manifest
21 +++ b/x11-drivers/nvidia-drivers/Manifest
22 @@ -5,6 +5,7 @@ DIST NVIDIA-FreeBSD-x86_64-390.138.tar.gz 65280213 BLAKE2B 36d5651ceaf90cefcf9e8
23 DIST NVIDIA-FreeBSD-x86_64-435.21.tar.gz 64153630 BLAKE2B fee655cc843c004ac0c1ec85b9417292016a013136e04ad047d2513edbdc7c732561d6bcc4603c658905972dce6618de49d4d6ac583e84fdf212cf45397b48c1 SHA512 2c160c06ca58e3009deb1ba4a4a28d39419e251ced3bfa9a442942f9cce17003d67e8a8bfa23036d3916cc0e66f4bff0fbedaae73db6f10b995235a56d7eba7c
24 DIST NVIDIA-FreeBSD-x86_64-440.100.tar.gz 82523267 BLAKE2B 9d8eddcf3a58787a03fab207c197d722ff047f8bc840ea41e8d38815fbfab9e54759b9fbeaa26e3d147f54cb4a510eec421708d3bbb21197922f4dc175ed6df5 SHA512 96f57e1f308f0e5f00ef09a128e91a68ac55033893000e84cf4ff1a910a88798743c911b3effcc26c3f27ae224b733d8c2f87e9ec0596149f65ad7bcd71edbc5
25 DIST NVIDIA-FreeBSD-x86_64-450.66.tar.gz 82963662 BLAKE2B 8b0e0993600b4b9b5fa1648444f677c5a9f27523cdd8e3edbd67d7cecf67a7bcc2b975dface68dfa16e7d31f2219b0283f9313f4bd37023344bb8c4515a85c0f SHA512 744e912d7433a8db2af27f91854361054cc0085067951c03278a0ca1c6daacc7f9e34ed6db5bd87d78932c0836b28e77a79f306d6b5d3b43c2d21288774fb9fe
26 +DIST NVIDIA-FreeBSD-x86_64-455.23.04.tar.gz 94602240 BLAKE2B ea9ea6904b0dd59c3f35d2c94a9bd80f06376119c601cb03abc2312b5a94f3c92269c9d5b55e8fe9cd1cb08c6a1929078ba7f88a1ae40e562078f26c5226fd00 SHA512 876b1b969bcd35801edf7d4dda7e6d8e65a61720d48884a6a4381b9f4b8838622582b9bd38e396d0a03dfd2ae9dfdc23e581722e95bdf7ac53c29ff95af4735a
27 DIST NVIDIA-Linux-armv7l-gnueabihf-390.132.run 29084574 BLAKE2B 4727627de610928f0808c0213c9d359c5566900972ab9fbd3d0c58b36c0a1331799ceea22b4defdcfb81c3132f6124d8a6357de8124921eef608938afdc1380d SHA512 2f78a722ec31ceda86afc1831cb42d0eab8f8698b94c7fbc8569a6d34693b50e74453d5aaf3c0180f1fc2511b8c237ac635aceb24bcbea468f2a092cb44f98ee
28 DIST NVIDIA-Linux-armv7l-gnueabihf-390.138.run 28540622 BLAKE2B 342852dd6fa371f86d19547d73edef582fe3f04cf4f6e9ec247767951180671ba46f3ed2ee7bab11b0cf2f8bb1eb846b1d7481d318789c14ce79b54fefe0f830 SHA512 e04b8aca202c1df305f7b67ec372322494fa7b77f27cbf04f240527dcac0ce3ffa5e0e9df36b52045ac13fbc2f84b5033784040884ed19072f66f41385d11b97
29 DIST NVIDIA-Linux-x86-390.132.run 48152101 BLAKE2B f1e76c2796d12476a35701607226483a34ee3b50a0c7dc03e3626e8cab4250b07c0f5aa238a0d5d5b65b79dc504963f2723089108281668b2f4fae03f4bf25c5 SHA512 12b0f80b4bbaebc984c7dbacd365795646c7697606242b05095ac61d69d89ab89fded47d583b4b99793ebcea9e38ec1e7b63dda1c2fdce53ab697cafcdbb3a85
30 @@ -14,8 +15,10 @@ DIST NVIDIA-Linux-x86_64-390.138.run 83780873 BLAKE2B 5e6a9d77dd2b9de17d92319810
31 DIST NVIDIA-Linux-x86_64-435.21.run 144387574 BLAKE2B e9afd6335182a28f5136dbef55195a2f2d8f768376ebc148190a0a82470a34d008ce04170ffc1aab36585605910c1300567a90443b5f58cb46ec3bff6ab9409c SHA512 e83b6dff80434971c0b254815945d485a45c978b8a19994244f50a463658863948b2eac8bc62d667bb10c23f41cf1c3521c409d23ac2ab6a0c0cd094a6e20270
32 DIST NVIDIA-Linux-x86_64-440.100.run 144653408 BLAKE2B a62e6324f5ac6033c1c4b59486c86a6d4f81b240e5a7ddf9f861f9cfec4daedbe08ef3af6556c1cd4260a5a6fcd1b8bfed886ae617677d87c3a900d0e313267b SHA512 274b3a8e4c801b67a3f71f11da93134bc1a16a48bc85a6bf63265c00bb3fd8caf935dd23c85c40285a162e83c146bd5e34bb0b1d74fc34e7122bfc4c3a8c81e7
33 DIST NVIDIA-Linux-x86_64-450.66.run 141068918 BLAKE2B de8f76eade30bcd040d4a022edb96ab00be00190ed2a86b96584a4b147a2da935f8e83411f01d03f747c875a652f8e6f843bf273f905f1e8fa334e263bd941f3 SHA512 d4408cf2274602b7ee28f1056b8875468e8b9dae9f9e2dd8fe2dc505cbcdbb76eff2e2182252b8d5182008046ed5ca33c2fdc15d46e4c854b7ca46325724bc67
34 +DIST NVIDIA-Linux-x86_64-455.23.04.run 167691811 BLAKE2B 6a3baf79f6cbada9bf7a21604a60657d88f3df477d308222f8a75e1e9e9bc51ccad4d7de8f32e6cab4c4c910abb65aff1e932a8118a732ce5ef98d9d272dc637 SHA512 96e8267ea76bf42f0c8be67d27b4d2a6f180cbea9348feb19c313805dc7957a945992d11ea4a1233d7cf96c75254b717d48153db0fe6aed8146bffd041f50a6e
35 DIST nvidia-settings-390.132.tar.bz2 1109373 BLAKE2B cec60b7409f6d352afe3845a2ec65db96183d1fe009340fa3601166718f21b43bb08b63c5eaaaf4c266c7b16e7d374f6ecc00691763d5ae1b6902c8002da5bea SHA512 12553edc1a1ba9c3f578e0e921b25ec7114cbc80a55621cbd612a1bd85c9a518e221b30809058e4df5da6ae75ea7a1cd5c3d9c8f02a0898bc8c08ac9c22ccee3
36 DIST nvidia-settings-390.138.tar.bz2 1109175 BLAKE2B 4171c12de0a6fb97b655567d4cc8b4e6fb92e340aae6d65f0a0583db159478fb11f8d5c4cf0fa5ef87098ec1582ccb896fec9f2bf81e4c748b8ff5ee5d73af6b SHA512 6c54ff039840098c23f2091b4c33ab2b712ff90c16829c568bc39c9375cb2f4fb677bb5ab90efcf2034b15a1d93d13f1fbb40dde1d90092073af7d9f3c16de97
37 DIST nvidia-settings-435.21.tar.bz2 1131222 BLAKE2B 855f5c7667f4a5ec0f917fbb017d70ec6ee5e768f7087e77e54a66dea852c471bd1810a2163fb33204e5f381998a27a4254e0a5d2c73e2b6b624813ff8294f24 SHA512 8b408cc70118df3a138a99fe7fc14f6370d500b8ae26888b27b07de22f6fc6eebd65bd437d83ee82e18a1d8ee4cceec601c414b1947302ca808fff48165f31bb
38 DIST nvidia-settings-440.100.tar.bz2 1129171 BLAKE2B bc8b28ae5743df50177c51a9269ef2b5d11c69dd9f30441179d81e42e7f77c54f327c87a7a5c6a410540bed35eb1ba0cc289b5b98a046deda376dccb29a8206b SHA512 4fe8fbbca1f805652235d898e8451ba89263c81f53e78da471b13ba0668d0d528d04d098b276df6fd2bf7ea7a219a3aa3c4d0bada0a483767c00c0654a5a8818
39 DIST nvidia-settings-450.66.tar.bz2 1057263 BLAKE2B 8ec77f96bafec823b1e668cb695dfbe84ec31aa86310b0584bb416299dcf378324c97c4924112a89015bbbdeefb3c8556fc6fb5d76f973c29ce80766241af4db SHA512 82d20b479e5d11862b304dfa0b15e724b1f63692765237cb3d0fc4e5cd6f6d954a36f2c6872d0ccb2d29cfcd31b0c207f1172112a623b79a0e49b276223c7785
40 +DIST nvidia-settings-455.23.04.tar.bz2 1056064 BLAKE2B b9ee7bd874d693f45eafa1dfa55fec9839147195b9d10db740392694304b54fd5e7482eb6d5084e72a74056101047a58f1251086e80421b9299b73f780dad3b5 SHA512 55b71944da62a529e7ba7776b7e584213cd97469e76183dde5e98723b276a33ba8ac0ee6052849001875902a101a0363408d5546e8327707ef4135775c98d6e3
41
42 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers- b/x11-drivers/nvidia-drivers/nvidia-drivers-
43 new file mode 100644
44 index 00000000000..8c40fd807cc
45 --- /dev/null
46 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-
47 @@ -0,0 +1,595 @@
48 +# Copyright 1999-2020 Gentoo Authors
49 +# Distributed under the terms of the GNU General Public License v2
50 +
51 +EAPI=7
52 +inherit desktop flag-o-matic linux-info linux-mod multilib-minimal \
53 + nvidia-driver portability systemd toolchain-funcs unpacker udev
54 +
55 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
56 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
57 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
58 +
59 +NV_URI="https://us.download.nvidia.com/XFree86/"
60 +SRC_URI="
61 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
62 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
63 + tools? (
64 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
65 + )
66 +"
67 +
68 +EMULTILIB_PKG="true"
69 +KEYWORDS="-* amd64"
70 +LICENSE="GPL-2 NVIDIA-r2"
71 +SLOT="0/${PV%.*}"
72 +
73 +IUSE="compat +driver gtk3 kernel_FreeBSD kernel_linux +kms +libglvnd multilib static-libs +tools uvm wayland +X"
74 +REQUIRED_USE="
75 + tools? ( X )
76 + static-libs? ( tools )
77 +"
78 +
79 +COMMON="
80 + driver? ( kernel_linux? ( acct-group/video ) )
81 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
82 + tools? (
83 + dev-libs/atk
84 + dev-libs/glib:2
85 + dev-libs/jansson
86 + gtk3? (
87 + x11-libs/gtk+:3
88 + )
89 + x11-libs/cairo
90 + x11-libs/gdk-pixbuf[X]
91 + x11-libs/gtk+:2
92 + x11-libs/libX11
93 + x11-libs/libXext
94 + x11-libs/libXrandr
95 + x11-libs/libXv
96 + x11-libs/libXxf86vm
97 + x11-libs/pango[X]
98 + )
99 + X? (
100 + !libglvnd? ( >=app-eselect/eselect-opengl-1.0.9 )
101 + libglvnd? (
102 + media-libs/libglvnd[${MULTILIB_USEDEP}]
103 + !app-eselect/eselect-opengl
104 + )
105 + app-misc/pax-utils
106 + )
107 +"
108 +DEPEND="
109 + ${COMMON}
110 + kernel_linux? ( virtual/linux-sources )
111 + tools? ( sys-apps/dbus )
112 +"
113 +RDEPEND="
114 + ${COMMON}
115 + tools? ( !media-video/nvidia-settings )
116 + uvm? ( >=virtual/opencl-3 )
117 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
118 + X? (
119 + <x11-base/xorg-server-1.20.99:=
120 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
121 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
122 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
123 + sys-libs/zlib[${MULTILIB_USEDEP}]
124 + )
125 + kernel_linux? ( net-libs/libtirpc )
126 +"
127 +QA_PREBUILT="opt/* usr/lib*"
128 +S=${WORKDIR}/
129 +PATCHES=(
130 + "${FILESDIR}"/${PN}-440.26-locale.patch
131 +)
132 +NV_KV_MAX_PLUS="5.9"
133 +CONFIG_CHECK="
134 + !DEBUG_MUTEXES
135 + ~!I2C_NVIDIA_GPU
136 + ~!LOCKDEP
137 + ~DRM
138 + ~DRM_KMS_HELPER
139 + ~SYSVIPC
140 +"
141 +
142 +pkg_pretend() {
143 + nvidia-driver_check
144 +}
145 +
146 +pkg_setup() {
147 + nvidia-driver_check
148 +
149 + # try to turn off distcc and ccache for people that have a problem with it
150 + export DISTCC_DISABLE=1
151 + export CCACHE_DISABLE=1
152 +
153 + if use driver && use kernel_linux; then
154 + MODULE_NAMES="nvidia(video:${S}/kernel)"
155 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
156 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
157 +
158 + # This needs to run after MODULE_NAMES (so that the eclass checks
159 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
160 + # is set (so that KV_DIR is populated).
161 + linux-mod_pkg_setup
162 +
163 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
164 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
165 +
166 + # linux-mod_src_compile calls set_arch_to_kernel, which
167 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
168 + # expects x86_64 or i386 and then converts it to x86
169 + # later on in the build process
170 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
171 +
172 + if kernel_is lt 2 6 9; then
173 + eerror "You must build this against 2.6.9 or higher kernels."
174 + fi
175 + fi
176 +
177 + # set variables to where files are in the package structure
178 + if use kernel_FreeBSD; then
179 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
180 + NV_DOC="${S}/doc"
181 + NV_OBJ="${S}/obj"
182 + NV_SRC="${S}/src"
183 + NV_MAN="${S}/x11/man"
184 + NV_X11="${S}/obj"
185 + NV_SOVER=1
186 + elif use kernel_linux; then
187 + NV_DOC="${S}"
188 + NV_OBJ="${S}"
189 + NV_SRC="${S}/kernel"
190 + NV_MAN="${S}"
191 + NV_X11="${S}"
192 + NV_SOVER=${PV}
193 + else
194 + die "Could not determine proper NVIDIA package"
195 + fi
196 +}
197 +
198 +src_configure() {
199 + tc-export AR CC LD OBJCOPY
200 +
201 + default
202 +}
203 +
204 +src_prepare() {
205 + local man_file
206 + for man_file in "${NV_MAN}"/*1.gz; do
207 + gunzip $man_file || die
208 + done
209 +
210 + if use tools; then
211 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
212 + sed -i \
213 + -e "s:@PV@:${PV}:g" \
214 + "${WORKDIR}"/nvidia-settings-linker.patch \
215 + || die
216 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
217 + fi
218 +
219 + default
220 +
221 + if ! [ -f nvidia_icd.json ]; then
222 + cp nvidia_icd.json.template nvidia_icd.json || die
223 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
224 + fi
225 +}
226 +
227 +src_compile() {
228 + cd "${NV_SRC}"
229 + if use kernel_FreeBSD; then
230 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
231 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
232 + elif use driver && use kernel_linux; then
233 + BUILD_TARGETS=module linux-mod_src_compile \
234 + KERNELRELEASE="${KV_FULL}" \
235 + src="${KERNEL_DIR}"
236 + fi
237 +
238 + if use tools; then
239 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
240 + DO_STRIP= \
241 + LIBDIR="$(get_libdir)" \
242 + NVLD="$(tc-getLD)" \
243 + NV_VERBOSE=1 \
244 + OUTPUTDIR=. \
245 + RANLIB="$(tc-getRANLIB)"
246 +
247 + emake -C "${S}"/nvidia-settings-${PV}/src \
248 + DO_STRIP= \
249 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
250 + LIBDIR="$(get_libdir)" \
251 + NVLD="$(tc-getLD)" \
252 + NVML_ENABLED=0 \
253 + NV_USE_BUNDLED_LIBJANSSON=0 \
254 + NV_VERBOSE=1 \
255 + OUTPUTDIR=.
256 + fi
257 +}
258 +
259 +# Install nvidia library:
260 +# the first parameter is the library to install
261 +# the second parameter is the provided soversion
262 +# the third parameter is the target directory if it is not /usr/lib
263 +donvidia() {
264 + # Full path to library
265 + nv_LIB="${1}"
266 +
267 + # SOVER to use
268 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
269 +
270 + # Where to install
271 + nv_DEST="${2}"
272 +
273 + # Get just the library name
274 + nv_LIBNAME=$(basename "${nv_LIB}")
275 +
276 + if [[ "${nv_DEST}" ]]; then
277 + exeinto ${nv_DEST}
278 + action="doexe"
279 + else
280 + nv_DEST="/usr/$(get_libdir)"
281 + action="dolib.so"
282 + fi
283 +
284 + # Install the library
285 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
286 +
287 + # If the library has a SONAME and SONAME does not match the library name,
288 + # then we need to create a symlink
289 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
290 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER}
291 + fi
292 +
293 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so}
294 +}
295 +
296 +src_install() {
297 + if use driver && use kernel_linux; then
298 + linux-mod_src_install
299 +
300 + # Add the aliases
301 + # This file is tweaked with the appropriate video group in
302 + # pkg_preinst, see bug #491414
303 + insinto /etc/modprobe.d
304 + newins "${FILESDIR}"/nvidia-430.conf nvidia.conf
305 +
306 + if use uvm; then
307 + doins "${FILESDIR}"/nvidia-rmmod.conf
308 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
309 + else
310 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
311 + > "${T}"/nvidia-rmmod.conf || die
312 + doins "${T}"/nvidia-rmmod.conf
313 + fi
314 +
315 + # Ensures that our device nodes are created when not using X
316 + exeinto "$(get_udevdir)"
317 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
318 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
319 + elif use kernel_FreeBSD; then
320 + if use x86-fbsd; then
321 + insinto /boot/modules
322 + doins "${S}/src/nvidia.kld"
323 + fi
324 +
325 + exeinto /boot/modules
326 + doexe "${S}/src/nvidia.ko"
327 + fi
328 +
329 + # NVIDIA kernel <-> userspace driver config lib
330 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
331 +
332 + # NVIDIA framebuffer capture library
333 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
334 +
335 + # NVIDIA video encode/decode <-> CUDA
336 + if use kernel_linux; then
337 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
338 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
339 + fi
340 +
341 + if use X; then
342 + # Xorg DDX driver
343 + insinto /usr/$(get_libdir)/xorg/modules/drivers
344 + doins ${NV_X11}/nvidia_drv.so
345 +
346 + # Xorg GLX driver
347 + donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
348 + /usr/$(get_libdir)/xorg/modules/extensions
349 +
350 + # Xorg nvidia.conf
351 + if has_version '>=x11-base/xorg-server-1.16'; then
352 + insinto /usr/share/X11/xorg.conf.d
353 + newins {,50-}nvidia-drm-outputclass.conf
354 + fi
355 +
356 + insinto /usr/share/glvnd/egl_vendor.d
357 + doins ${NV_X11}/10_nvidia.json
358 + fi
359 +
360 + if use wayland; then
361 + insinto /usr/share/egl/egl_external_platform.d
362 + doins ${NV_X11}/10_nvidia_wayland.json
363 + fi
364 +
365 + insinto /etc/vulkan/icd.d
366 + doins nvidia_icd.json
367 +
368 + insinto /etc/vulkan/implicit_layer.d
369 + doins nvidia_layers.json
370 +
371 + # OpenCL ICD for NVIDIA
372 + if use kernel_linux; then
373 + insinto /etc/OpenCL/vendors
374 + doins ${NV_OBJ}/nvidia.icd
375 + fi
376 +
377 + # Helper Apps
378 + exeinto /opt/bin/
379 +
380 + if use X; then
381 + doexe ${NV_OBJ}/nvidia-xconfig
382 + fi
383 +
384 + if use kernel_linux; then
385 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
386 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
387 + doexe ${NV_OBJ}/nvidia-debugdump
388 + doexe ${NV_OBJ}/nvidia-persistenced
389 + doexe ${NV_OBJ}/nvidia-smi
390 +
391 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
392 + doexe ${NV_OBJ}/nvidia-modprobe
393 + fowners root:video /opt/bin/nvidia-modprobe
394 + fperms 4710 /opt/bin/nvidia-modprobe
395 + dosym /{opt,usr}/bin/nvidia-modprobe
396 +
397 + doman nvidia-cuda-mps-control.1
398 + doman nvidia-modprobe.1
399 + doman nvidia-persistenced.1
400 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
401 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
402 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
403 + fi
404 +
405 + if use tools; then
406 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
407 + DESTDIR="${D}" \
408 + DO_STRIP= \
409 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
410 + LIBDIR="${D}/usr/$(get_libdir)" \
411 + NV_USE_BUNDLED_LIBJANSSON=0 \
412 + NV_VERBOSE=1 \
413 + OUTPUTDIR=. \
414 + PREFIX=/usr \
415 + install
416 +
417 + if use static-libs; then
418 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
419 +
420 + insinto /usr/include/NVCtrl
421 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
422 + fi
423 +
424 + insinto /usr/share/nvidia/
425 + doins nvidia-application-profiles-${PV}-key-documentation
426 +
427 + insinto /etc/nvidia
428 + newins \
429 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
430 +
431 + # There is no icon in the FreeBSD tarball.
432 + use kernel_FreeBSD || \
433 + doicon ${NV_OBJ}/nvidia-settings.png
434 +
435 + domenu "${FILESDIR}"/nvidia-settings.desktop
436 +
437 + exeinto /etc/X11/xinit/xinitrc.d
438 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
439 + fi
440 +
441 + dobin ${NV_OBJ}/nvidia-bug-report.sh
442 +
443 + systemd_dounit *.service
444 + dobin nvidia-sleep.sh
445 + exeinto /lib/systemd/system-sleep
446 + doexe nvidia
447 +
448 + if has_multilib_profile && use multilib; then
449 + local OABI=${ABI}
450 + for ABI in $(multilib_get_enabled_abis); do
451 + src_install-libs
452 + done
453 + ABI=${OABI}
454 + unset OABI
455 + else
456 + src_install-libs
457 + fi
458 +
459 + is_final_abi || die "failed to iterate through all ABIs"
460 +
461 + # Documentation
462 + if use kernel_FreeBSD; then
463 + dodoc "${NV_DOC}/README"
464 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
465 + use tools && doman "${NV_MAN}"/nvidia-settings.1
466 + else
467 + # Docs
468 + newdoc "${NV_DOC}/README.txt" README
469 + dodoc "${NV_DOC}/NVIDIA_Changelog"
470 + doman "${NV_MAN}"/nvidia-smi.1
471 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
472 + use tools && doman "${NV_MAN}"/nvidia-settings.1
473 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
474 + fi
475 +
476 + readme.gentoo_create_doc
477 +
478 + dodoc supported-gpus.json
479 +
480 + docinto html
481 + dodoc -r ${NV_DOC}/html/*
482 +}
483 +
484 +src_install-libs() {
485 + local inslibdir=$(get_libdir)
486 + if use libglvnd; then
487 + local GL_ROOT="/usr/$(get_libdir)"
488 + else
489 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
490 + fi
491 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
492 + local nv_libdir="${NV_OBJ}"
493 +
494 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
495 + nv_libdir="${NV_OBJ}"/32
496 + fi
497 +
498 + if use X; then
499 + NV_GLX_LIBRARIES=(
500 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
501 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
502 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
503 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
504 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
505 + "libcuda.so.${NV_SOVER}"
506 + "libnvcuvid.so.${NV_SOVER}"
507 + "libnvidia-compiler.so.${NV_SOVER}"
508 + "libnvidia-eglcore.so.${NV_SOVER}"
509 + "libnvidia-encode.so.${NV_SOVER}"
510 + "libnvidia-fbc.so.${NV_SOVER}"
511 + "libnvidia-glcore.so.${NV_SOVER}"
512 + "libnvidia-glsi.so.${NV_SOVER}"
513 + "libnvidia-glvkspirv.so.${NV_SOVER}"
514 + "libnvidia-ifr.so.${NV_SOVER}"
515 + "libnvidia-opencl.so.${NV_SOVER}"
516 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
517 + "libvdpau_nvidia.so.${NV_SOVER}"
518 + )
519 + if ! use libglvnd; then
520 + NV_GLX_LIBRARIES+=(
521 + "libEGL.so.$( [[ ${ABI} == "amd64" ]] && usex compat ${NV_SOVER} 1.1.0 || echo 1.1.0) ${GL_ROOT}"
522 + "libGL.so.1.7.0 ${GL_ROOT}"
523 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
524 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
525 + "libGLX.so.0 ${GL_ROOT}"
526 + "libGLdispatch.so.0 ${GL_ROOT}"
527 + "libOpenGL.so.0 ${GL_ROOT}"
528 + )
529 + fi
530 +
531 + if use wayland && [[ ${ABI} == "amd64" ]];
532 + then
533 + NV_GLX_LIBRARIES+=(
534 + "libnvidia-egl-wayland.so.1.1.4"
535 + )
536 + fi
537 +
538 + if use kernel_FreeBSD; then
539 + NV_GLX_LIBRARIES+=(
540 + "libnvidia-tls.so.${NV_SOVER}"
541 + )
542 + fi
543 +
544 + if use kernel_linux; then
545 + NV_GLX_LIBRARIES+=(
546 + "libnvidia-ml.so.${NV_SOVER}"
547 + "libnvidia-tls.so.${NV_SOVER}"
548 + )
549 + fi
550 +
551 + if use kernel_linux && [[ ${ABI} == "amd64" ]];
552 + then
553 + NV_GLX_LIBRARIES+=(
554 + "libnvidia-cbl.so.${NV_SOVER}"
555 + "libnvidia-ngx.so.${NV_SOVER}"
556 + "libnvidia-rtcore.so.${NV_SOVER}"
557 + "libnvoptix.so.${NV_SOVER}"
558 + )
559 + fi
560 +
561 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
562 + donvidia "${nv_libdir}"/${NV_LIB}
563 + done
564 + fi
565 +}
566 +
567 +pkg_preinst() {
568 + if use driver && use kernel_linux; then
569 + linux-mod_pkg_preinst
570 +
571 + local videogroup="$(getent group video | cut -d ':' -f 3)"
572 + if [ -z "${videogroup}" ]; then
573 + eerror "Failed to determine the video group gid"
574 + die "Failed to determine the video group gid"
575 + else
576 + sed -i \
577 + -e "s:PACKAGE:${PF}:g" \
578 + -e "s:VIDEOGID:${videogroup}:" \
579 + "${D}"/etc/modprobe.d/nvidia.conf || die
580 + fi
581 + fi
582 +
583 + # Clean the dynamic libGL stuff's home to ensure
584 + # we dont have stale libs floating around
585 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
586 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
587 + fi
588 + # Make sure we nuke the old nvidia-glx's env.d file
589 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
590 + rm -f "${ROOT}"/etc/env.d/09nvidia
591 + fi
592 +}
593 +
594 +pkg_postinst() {
595 + use driver && use kernel_linux && linux-mod_pkg_postinst
596 +
597 + # Switch to the nvidia implementation
598 + if ! use libglvnd; then
599 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
600 + fi
601 +
602 + readme.gentoo_print_elog
603 +
604 + if ! use X; then
605 + elog "You have elected to not install the X.org driver. Along with"
606 + elog "this the OpenGL libraries and VDPAU libraries were not"
607 + elog "installed. Additionally, once the driver is loaded your card"
608 + elog "and fan will run at max speed which may not be desirable."
609 + elog "Use the 'nvidia-smi' init script to have your card and fan"
610 + elog "speed scale appropriately."
611 + elog
612 + fi
613 + if ! use tools; then
614 + elog "USE=tools controls whether the nvidia-settings application"
615 + elog "is installed. If you would like to use it, enable that"
616 + elog "flag and re-emerge this ebuild. Optionally you can install"
617 + elog "media-video/nvidia-settings"
618 + elog
619 + fi
620 +
621 + elog "To enable nvidia sleep services under systemd, run these commands:"
622 + elog " systemctl enable nvidia-suspend.service"
623 + elog " systemctl enable nvidia-hibernate.service"
624 + elog " systemctl enable nvidia-resume.service"
625 + elog "Set the NVreg_TemporaryFilePath kernel module parameter to a"
626 + elog "suitable path in case the default of /tmp does not work for you"
627 + elog "For more information see:"
628 + elog "${ROOT}/usr/share/doc/${PF}/html/powermanagement.html"
629 +}
630 +
631 +pkg_prerm() {
632 + if ! use libglvnd; then
633 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
634 + fi
635 +}
636 +
637 +pkg_postrm() {
638 + use driver && use kernel_linux && linux-mod_pkg_postrm
639 + if ! use libglvnd; then
640 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
641 + fi
642 +}
643
644 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-455.23.04.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-455.23.04.ebuild
645 new file mode 100644
646 index 00000000000..fc0599c5b21
647 --- /dev/null
648 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-455.23.04.ebuild
649 @@ -0,0 +1,595 @@
650 +# Copyright 1999-2020 Gentoo Authors
651 +# Distributed under the terms of the GNU General Public License v2
652 +
653 +EAPI=7
654 +inherit desktop flag-o-matic linux-info linux-mod multilib-minimal \
655 + nvidia-driver portability systemd toolchain-funcs unpacker udev
656 +
657 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
658 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
659 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
660 +
661 +NV_URI="https://us.download.nvidia.com/XFree86/"
662 +SRC_URI="
663 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
664 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
665 + tools? (
666 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
667 + )
668 +"
669 +
670 +EMULTILIB_PKG="true"
671 +KEYWORDS="-* ~amd64"
672 +LICENSE="GPL-2 NVIDIA-r2"
673 +SLOT="0/${PV%.*}"
674 +
675 +IUSE="compat +driver gtk3 kernel_FreeBSD kernel_linux +kms +libglvnd multilib static-libs +tools uvm wayland +X"
676 +REQUIRED_USE="
677 + tools? ( X )
678 + static-libs? ( tools )
679 +"
680 +
681 +COMMON="
682 + driver? ( kernel_linux? ( acct-group/video ) )
683 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
684 + tools? (
685 + dev-libs/atk
686 + dev-libs/glib:2
687 + dev-libs/jansson
688 + gtk3? (
689 + x11-libs/gtk+:3
690 + )
691 + x11-libs/cairo
692 + x11-libs/gdk-pixbuf[X]
693 + x11-libs/gtk+:2
694 + x11-libs/libX11
695 + x11-libs/libXext
696 + x11-libs/libXrandr
697 + x11-libs/libXv
698 + x11-libs/libXxf86vm
699 + x11-libs/pango[X]
700 + )
701 + X? (
702 + !libglvnd? ( >=app-eselect/eselect-opengl-1.0.9 )
703 + libglvnd? (
704 + media-libs/libglvnd[${MULTILIB_USEDEP}]
705 + !app-eselect/eselect-opengl
706 + )
707 + app-misc/pax-utils
708 + )
709 +"
710 +DEPEND="
711 + ${COMMON}
712 + kernel_linux? ( virtual/linux-sources )
713 + tools? ( sys-apps/dbus )
714 +"
715 +RDEPEND="
716 + ${COMMON}
717 + tools? ( !media-video/nvidia-settings )
718 + uvm? ( >=virtual/opencl-3 )
719 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
720 + X? (
721 + <x11-base/xorg-server-1.20.99:=
722 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
723 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
724 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
725 + sys-libs/zlib[${MULTILIB_USEDEP}]
726 + )
727 + kernel_linux? ( net-libs/libtirpc )
728 +"
729 +QA_PREBUILT="opt/* usr/lib*"
730 +S=${WORKDIR}/
731 +PATCHES=(
732 + "${FILESDIR}"/${PN}-440.26-locale.patch
733 +)
734 +NV_KV_MAX_PLUS="5.9"
735 +CONFIG_CHECK="
736 + !DEBUG_MUTEXES
737 + ~!I2C_NVIDIA_GPU
738 + ~!LOCKDEP
739 + ~DRM
740 + ~DRM_KMS_HELPER
741 + ~SYSVIPC
742 +"
743 +
744 +pkg_pretend() {
745 + nvidia-driver_check
746 +}
747 +
748 +pkg_setup() {
749 + nvidia-driver_check
750 +
751 + # try to turn off distcc and ccache for people that have a problem with it
752 + export DISTCC_DISABLE=1
753 + export CCACHE_DISABLE=1
754 +
755 + if use driver && use kernel_linux; then
756 + MODULE_NAMES="nvidia(video:${S}/kernel)"
757 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
758 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
759 +
760 + # This needs to run after MODULE_NAMES (so that the eclass checks
761 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
762 + # is set (so that KV_DIR is populated).
763 + linux-mod_pkg_setup
764 +
765 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
766 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
767 +
768 + # linux-mod_src_compile calls set_arch_to_kernel, which
769 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
770 + # expects x86_64 or i386 and then converts it to x86
771 + # later on in the build process
772 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
773 +
774 + if kernel_is lt 2 6 9; then
775 + eerror "You must build this against 2.6.9 or higher kernels."
776 + fi
777 + fi
778 +
779 + # set variables to where files are in the package structure
780 + if use kernel_FreeBSD; then
781 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
782 + NV_DOC="${S}/doc"
783 + NV_OBJ="${S}/obj"
784 + NV_SRC="${S}/src"
785 + NV_MAN="${S}/x11/man"
786 + NV_X11="${S}/obj"
787 + NV_SOVER=1
788 + elif use kernel_linux; then
789 + NV_DOC="${S}"
790 + NV_OBJ="${S}"
791 + NV_SRC="${S}/kernel"
792 + NV_MAN="${S}"
793 + NV_X11="${S}"
794 + NV_SOVER=${PV}
795 + else
796 + die "Could not determine proper NVIDIA package"
797 + fi
798 +}
799 +
800 +src_configure() {
801 + tc-export AR CC LD OBJCOPY
802 +
803 + default
804 +}
805 +
806 +src_prepare() {
807 + local man_file
808 + for man_file in "${NV_MAN}"/*1.gz; do
809 + gunzip $man_file || die
810 + done
811 +
812 + if use tools; then
813 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
814 + sed -i \
815 + -e "s:@PV@:${PV}:g" \
816 + "${WORKDIR}"/nvidia-settings-linker.patch \
817 + || die
818 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
819 + fi
820 +
821 + default
822 +
823 + if ! [ -f nvidia_icd.json ]; then
824 + cp nvidia_icd.json.template nvidia_icd.json || die
825 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
826 + fi
827 +}
828 +
829 +src_compile() {
830 + cd "${NV_SRC}"
831 + if use kernel_FreeBSD; then
832 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
833 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
834 + elif use driver && use kernel_linux; then
835 + BUILD_TARGETS=module linux-mod_src_compile \
836 + KERNELRELEASE="${KV_FULL}" \
837 + src="${KERNEL_DIR}"
838 + fi
839 +
840 + if use tools; then
841 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
842 + DO_STRIP= \
843 + LIBDIR="$(get_libdir)" \
844 + NVLD="$(tc-getLD)" \
845 + NV_VERBOSE=1 \
846 + OUTPUTDIR=. \
847 + RANLIB="$(tc-getRANLIB)"
848 +
849 + emake -C "${S}"/nvidia-settings-${PV}/src \
850 + DO_STRIP= \
851 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
852 + LIBDIR="$(get_libdir)" \
853 + NVLD="$(tc-getLD)" \
854 + NVML_ENABLED=0 \
855 + NV_USE_BUNDLED_LIBJANSSON=0 \
856 + NV_VERBOSE=1 \
857 + OUTPUTDIR=.
858 + fi
859 +}
860 +
861 +# Install nvidia library:
862 +# the first parameter is the library to install
863 +# the second parameter is the provided soversion
864 +# the third parameter is the target directory if it is not /usr/lib
865 +donvidia() {
866 + # Full path to library
867 + nv_LIB="${1}"
868 +
869 + # SOVER to use
870 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
871 +
872 + # Where to install
873 + nv_DEST="${2}"
874 +
875 + # Get just the library name
876 + nv_LIBNAME=$(basename "${nv_LIB}")
877 +
878 + if [[ "${nv_DEST}" ]]; then
879 + exeinto ${nv_DEST}
880 + action="doexe"
881 + else
882 + nv_DEST="/usr/$(get_libdir)"
883 + action="dolib.so"
884 + fi
885 +
886 + # Install the library
887 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
888 +
889 + # If the library has a SONAME and SONAME does not match the library name,
890 + # then we need to create a symlink
891 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
892 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER}
893 + fi
894 +
895 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so}
896 +}
897 +
898 +src_install() {
899 + if use driver && use kernel_linux; then
900 + linux-mod_src_install
901 +
902 + # Add the aliases
903 + # This file is tweaked with the appropriate video group in
904 + # pkg_preinst, see bug #491414
905 + insinto /etc/modprobe.d
906 + newins "${FILESDIR}"/nvidia-430.conf nvidia.conf
907 +
908 + if use uvm; then
909 + doins "${FILESDIR}"/nvidia-rmmod.conf
910 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
911 + else
912 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
913 + > "${T}"/nvidia-rmmod.conf || die
914 + doins "${T}"/nvidia-rmmod.conf
915 + fi
916 +
917 + # Ensures that our device nodes are created when not using X
918 + exeinto "$(get_udevdir)"
919 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
920 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
921 + elif use kernel_FreeBSD; then
922 + if use x86-fbsd; then
923 + insinto /boot/modules
924 + doins "${S}/src/nvidia.kld"
925 + fi
926 +
927 + exeinto /boot/modules
928 + doexe "${S}/src/nvidia.ko"
929 + fi
930 +
931 + # NVIDIA kernel <-> userspace driver config lib
932 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
933 +
934 + # NVIDIA framebuffer capture library
935 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
936 +
937 + # NVIDIA video encode/decode <-> CUDA
938 + if use kernel_linux; then
939 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
940 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
941 + fi
942 +
943 + if use X; then
944 + # Xorg DDX driver
945 + insinto /usr/$(get_libdir)/xorg/modules/drivers
946 + doins ${NV_X11}/nvidia_drv.so
947 +
948 + # Xorg GLX driver
949 + donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
950 + /usr/$(get_libdir)/xorg/modules/extensions
951 +
952 + # Xorg nvidia.conf
953 + if has_version '>=x11-base/xorg-server-1.16'; then
954 + insinto /usr/share/X11/xorg.conf.d
955 + newins {,50-}nvidia-drm-outputclass.conf
956 + fi
957 +
958 + insinto /usr/share/glvnd/egl_vendor.d
959 + doins ${NV_X11}/10_nvidia.json
960 + fi
961 +
962 + if use wayland; then
963 + insinto /usr/share/egl/egl_external_platform.d
964 + doins ${NV_X11}/10_nvidia_wayland.json
965 + fi
966 +
967 + insinto /etc/vulkan/icd.d
968 + doins nvidia_icd.json
969 +
970 + insinto /etc/vulkan/implicit_layer.d
971 + doins nvidia_layers.json
972 +
973 + # OpenCL ICD for NVIDIA
974 + if use kernel_linux; then
975 + insinto /etc/OpenCL/vendors
976 + doins ${NV_OBJ}/nvidia.icd
977 + fi
978 +
979 + # Helper Apps
980 + exeinto /opt/bin/
981 +
982 + if use X; then
983 + doexe ${NV_OBJ}/nvidia-xconfig
984 + fi
985 +
986 + if use kernel_linux; then
987 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
988 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
989 + doexe ${NV_OBJ}/nvidia-debugdump
990 + doexe ${NV_OBJ}/nvidia-persistenced
991 + doexe ${NV_OBJ}/nvidia-smi
992 +
993 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
994 + doexe ${NV_OBJ}/nvidia-modprobe
995 + fowners root:video /opt/bin/nvidia-modprobe
996 + fperms 4710 /opt/bin/nvidia-modprobe
997 + dosym /{opt,usr}/bin/nvidia-modprobe
998 +
999 + doman nvidia-cuda-mps-control.1
1000 + doman nvidia-modprobe.1
1001 + doman nvidia-persistenced.1
1002 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
1003 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
1004 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
1005 + fi
1006 +
1007 + if use tools; then
1008 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
1009 + DESTDIR="${D}" \
1010 + DO_STRIP= \
1011 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
1012 + LIBDIR="${D}/usr/$(get_libdir)" \
1013 + NV_USE_BUNDLED_LIBJANSSON=0 \
1014 + NV_VERBOSE=1 \
1015 + OUTPUTDIR=. \
1016 + PREFIX=/usr \
1017 + install
1018 +
1019 + if use static-libs; then
1020 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
1021 +
1022 + insinto /usr/include/NVCtrl
1023 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
1024 + fi
1025 +
1026 + insinto /usr/share/nvidia/
1027 + doins nvidia-application-profiles-${PV}-key-documentation
1028 +
1029 + insinto /etc/nvidia
1030 + newins \
1031 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
1032 +
1033 + # There is no icon in the FreeBSD tarball.
1034 + use kernel_FreeBSD || \
1035 + doicon ${NV_OBJ}/nvidia-settings.png
1036 +
1037 + domenu "${FILESDIR}"/nvidia-settings.desktop
1038 +
1039 + exeinto /etc/X11/xinit/xinitrc.d
1040 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
1041 + fi
1042 +
1043 + dobin ${NV_OBJ}/nvidia-bug-report.sh
1044 +
1045 + systemd_dounit *.service
1046 + dobin nvidia-sleep.sh
1047 + exeinto /lib/systemd/system-sleep
1048 + doexe nvidia
1049 +
1050 + if has_multilib_profile && use multilib; then
1051 + local OABI=${ABI}
1052 + for ABI in $(multilib_get_enabled_abis); do
1053 + src_install-libs
1054 + done
1055 + ABI=${OABI}
1056 + unset OABI
1057 + else
1058 + src_install-libs
1059 + fi
1060 +
1061 + is_final_abi || die "failed to iterate through all ABIs"
1062 +
1063 + # Documentation
1064 + if use kernel_FreeBSD; then
1065 + dodoc "${NV_DOC}/README"
1066 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
1067 + use tools && doman "${NV_MAN}"/nvidia-settings.1
1068 + else
1069 + # Docs
1070 + newdoc "${NV_DOC}/README.txt" README
1071 + dodoc "${NV_DOC}/NVIDIA_Changelog"
1072 + doman "${NV_MAN}"/nvidia-smi.1
1073 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
1074 + use tools && doman "${NV_MAN}"/nvidia-settings.1
1075 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
1076 + fi
1077 +
1078 + readme.gentoo_create_doc
1079 +
1080 + dodoc supported-gpus.json
1081 +
1082 + docinto html
1083 + dodoc -r ${NV_DOC}/html/*
1084 +}
1085 +
1086 +src_install-libs() {
1087 + local inslibdir=$(get_libdir)
1088 + if use libglvnd; then
1089 + local GL_ROOT="/usr/$(get_libdir)"
1090 + else
1091 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
1092 + fi
1093 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
1094 + local nv_libdir="${NV_OBJ}"
1095 +
1096 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
1097 + nv_libdir="${NV_OBJ}"/32
1098 + fi
1099 +
1100 + if use X; then
1101 + NV_GLX_LIBRARIES=(
1102 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1103 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1104 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1105 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1106 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
1107 + "libcuda.so.${NV_SOVER}"
1108 + "libnvcuvid.so.${NV_SOVER}"
1109 + "libnvidia-compiler.so.${NV_SOVER}"
1110 + "libnvidia-eglcore.so.${NV_SOVER}"
1111 + "libnvidia-encode.so.${NV_SOVER}"
1112 + "libnvidia-fbc.so.${NV_SOVER}"
1113 + "libnvidia-glcore.so.${NV_SOVER}"
1114 + "libnvidia-glsi.so.${NV_SOVER}"
1115 + "libnvidia-glvkspirv.so.${NV_SOVER}"
1116 + "libnvidia-ifr.so.${NV_SOVER}"
1117 + "libnvidia-opencl.so.${NV_SOVER}"
1118 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
1119 + "libvdpau_nvidia.so.${NV_SOVER}"
1120 + )
1121 + if ! use libglvnd; then
1122 + NV_GLX_LIBRARIES+=(
1123 + "libEGL.so.$( [[ ${ABI} == "amd64" ]] && usex compat ${NV_SOVER} 1.1.0 || echo 1.1.0) ${GL_ROOT}"
1124 + "libGL.so.1.7.0 ${GL_ROOT}"
1125 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
1126 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
1127 + "libGLX.so.0 ${GL_ROOT}"
1128 + "libGLdispatch.so.0 ${GL_ROOT}"
1129 + "libOpenGL.so.0 ${GL_ROOT}"
1130 + )
1131 + fi
1132 +
1133 + if use wayland && [[ ${ABI} == "amd64" ]];
1134 + then
1135 + NV_GLX_LIBRARIES+=(
1136 + "libnvidia-egl-wayland.so.1.1.5"
1137 + )
1138 + fi
1139 +
1140 + if use kernel_FreeBSD; then
1141 + NV_GLX_LIBRARIES+=(
1142 + "libnvidia-tls.so.${NV_SOVER}"
1143 + )
1144 + fi
1145 +
1146 + if use kernel_linux; then
1147 + NV_GLX_LIBRARIES+=(
1148 + "libnvidia-ml.so.${NV_SOVER}"
1149 + "libnvidia-tls.so.${NV_SOVER}"
1150 + )
1151 + fi
1152 +
1153 + if use kernel_linux && [[ ${ABI} == "amd64" ]];
1154 + then
1155 + NV_GLX_LIBRARIES+=(
1156 + "libnvidia-cbl.so.${NV_SOVER}"
1157 + "libnvidia-ngx.so.${NV_SOVER}"
1158 + "libnvidia-rtcore.so.${NV_SOVER}"
1159 + "libnvoptix.so.${NV_SOVER}"
1160 + )
1161 + fi
1162 +
1163 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
1164 + donvidia "${nv_libdir}"/${NV_LIB}
1165 + done
1166 + fi
1167 +}
1168 +
1169 +pkg_preinst() {
1170 + if use driver && use kernel_linux; then
1171 + linux-mod_pkg_preinst
1172 +
1173 + local videogroup="$(getent group video | cut -d ':' -f 3)"
1174 + if [ -z "${videogroup}" ]; then
1175 + eerror "Failed to determine the video group gid"
1176 + die "Failed to determine the video group gid"
1177 + else
1178 + sed -i \
1179 + -e "s:PACKAGE:${PF}:g" \
1180 + -e "s:VIDEOGID:${videogroup}:" \
1181 + "${D}"/etc/modprobe.d/nvidia.conf || die
1182 + fi
1183 + fi
1184 +
1185 + # Clean the dynamic libGL stuff's home to ensure
1186 + # we dont have stale libs floating around
1187 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
1188 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
1189 + fi
1190 + # Make sure we nuke the old nvidia-glx's env.d file
1191 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
1192 + rm -f "${ROOT}"/etc/env.d/09nvidia
1193 + fi
1194 +}
1195 +
1196 +pkg_postinst() {
1197 + use driver && use kernel_linux && linux-mod_pkg_postinst
1198 +
1199 + # Switch to the nvidia implementation
1200 + if ! use libglvnd; then
1201 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
1202 + fi
1203 +
1204 + readme.gentoo_print_elog
1205 +
1206 + if ! use X; then
1207 + elog "You have elected to not install the X.org driver. Along with"
1208 + elog "this the OpenGL libraries and VDPAU libraries were not"
1209 + elog "installed. Additionally, once the driver is loaded your card"
1210 + elog "and fan will run at max speed which may not be desirable."
1211 + elog "Use the 'nvidia-smi' init script to have your card and fan"
1212 + elog "speed scale appropriately."
1213 + elog
1214 + fi
1215 + if ! use tools; then
1216 + elog "USE=tools controls whether the nvidia-settings application"
1217 + elog "is installed. If you would like to use it, enable that"
1218 + elog "flag and re-emerge this ebuild. Optionally you can install"
1219 + elog "media-video/nvidia-settings"
1220 + elog
1221 + fi
1222 +
1223 + elog "To enable nvidia sleep services under systemd, run these commands:"
1224 + elog " systemctl enable nvidia-suspend.service"
1225 + elog " systemctl enable nvidia-hibernate.service"
1226 + elog " systemctl enable nvidia-resume.service"
1227 + elog "Set the NVreg_TemporaryFilePath kernel module parameter to a"
1228 + elog "suitable path in case the default of /tmp does not work for you"
1229 + elog "For more information see:"
1230 + elog "${ROOT}/usr/share/doc/${PF}/html/powermanagement.html"
1231 +}
1232 +
1233 +pkg_prerm() {
1234 + if ! use libglvnd; then
1235 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1236 + fi
1237 +}
1238 +
1239 +pkg_postrm() {
1240 + use driver && use kernel_linux && linux-mod_pkg_postrm
1241 + if ! use libglvnd; then
1242 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1243 + fi
1244 +}