commit:     17be18a95d1781f58ca6ec7d864cf6404916c916
Author:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
AuthorDate: Tue Jun 27 03:07:11 2023 +0000
Commit:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
CommitDate: Tue Jun 27 03:49:00 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=17be18a9

x11-drivers/nvidia-drivers: add 470.199.02

This also brings kernel 6.4 support to the 0/470 branch.

Signed-off-by: Ionen Wolkens <ionen <AT> gentoo.org>

 x11-drivers/nvidia-drivers/Manifest                |   6 +
 .../nvidia-drivers-470.199.02.ebuild               | 500 +++++++++++++++++++++
 2 files changed, 506 insertions(+)

diff --git a/x11-drivers/nvidia-drivers/Manifest 
b/x11-drivers/nvidia-drivers/Manifest
index e4e4cd7226ac..d665e7ddedd4 100644
--- a/x11-drivers/nvidia-drivers/Manifest
+++ b/x11-drivers/nvidia-drivers/Manifest
@@ -3,6 +3,7 @@ DIST NVIDIA-Linux-aarch64-535.54.03.run 276543093 BLAKE2B 
13db9a63a91f87a1d1f78d
 DIST NVIDIA-Linux-x86-390.157.run 49417041 BLAKE2B 
435b5e0e60468cc74b41cc5d9b5bb0105d29c11a2d408457835212a96519c9334ecf19278b36749d3ff7f498f5b0ae45a2efae2d428703dac21245c62f1efebe
 SHA512 
dae9ac2c12f9ad90f7441e00e01a984147c577892421911d7f67f6a31e616ac1cb7d434bc9c7f58fbd9b8ae909521b5bece607a63c79588c0bb9d99c6bad5fb0
 DIST NVIDIA-Linux-x86_64-390.157.run 85835541 BLAKE2B 
44b855cd11f3b2f231f9fb90492ae2e67a67ea3ea83c413e7c90956d38c9730a8bd0321281ae03c6afce633d102f5b499aed25622b9bfd31bdd2c98f0717e95b
 SHA512 
4780503a4cff0180b1b1f37d20a6ba3438dd78b51fa7f69b98d35521835e5d61099129746929d51d63afa2d47b672b3e145e1e1897584dc3799e7f822c5b3a0a
 DIST NVIDIA-Linux-x86_64-470.182.03.run 271685302 BLAKE2B 
47acdc53dea1698558fea8e18f481341dd542b725153a83563f9da420844b59db41f69a8eb7ad7e16a22050a7a6cffc2265a9cb8832cb5a6439c6a5b0910bfce
 SHA512 
73619d65bd3267427acaf2deee07a2c98c490df937aa13e2c95d54cfd19ce2a82a91d3a5aa886dbe88f6230251f9cf54c38f5841cfacd77e53301e8d61fa3d7d
+DIST NVIDIA-Linux-x86_64-470.199.02.run 273256770 BLAKE2B 
5ceca89da4b4c7de701602d3dbf26e71a1163be26e0e5eac65354ecd40bfc8d68c981a6ef75b13e95079835c95ef7f9e10e5f95a0ed09beffd5bc22cb81a5330
 SHA512 
e1265b6266473af652e9d7bf85dcd76e312af281c5f4f158ab322e34d378738acb87c30cfff7bf1f6e1b238883e7f665d9fc5151b1e0078dd9aece5a52655405
 DIST NVIDIA-Linux-x86_64-525.116.04.run 413341618 BLAKE2B 
f769c72bb38c10e16f88bdf655ef77a480097c31b5856de00858494e1b1708bc243d8d562e37b15c7fc4641c7c4937472cf16f84fc1b3b3dc837ace35a3570de
 SHA512 
8e511e4965f11c849ae0bb3f399bc79eb004bb3a15612b35e6c7b9ec236a73085b58cc4e8cb37b5ffde7e7fe202928a08618b5dd3328235795bb942bde339195
 DIST NVIDIA-Linux-x86_64-525.47.27.run 414752583 BLAKE2B 
e38c1e9015ea240e32f8c1e3c9e47124574c060e90172352ca1db28b1e548babae216f2e8c6391fdf2708304e49321b3dae86fee0d3a353cc576291583813791
 SHA512 
170291b58e37db1e1598b4703d86ffcd6a756a9b338f0394a77d790aea6c38d85d2806960d4fc8d125c1c6c7fb43d69500c3efe2f85cb0d00397935b8cd0af58
 DIST NVIDIA-Linux-x86_64-535.54.03.run 347109768 BLAKE2B 
6fce56e4e840b3719b835cc72a749ed807d604ae5cbec63cc42b6ee32fbfa273507029190ed1198ad1f54fd53096dfa0573d043aaa59ffd07cf1607ae6c7943b
 SHA512 
45b72b34272d3df14b56136bb61537d00145d55734b72d58390af4694d96f03b2b49433beb4a5bede4d978442b707b08e05f2f31b2fcfd9453091e7f0b945cff
@@ -10,22 +11,27 @@ DIST NVIDIA-kernel-module-source-525.116.04.tar.xz 10114352 
BLAKE2B 672e85f8c253
 DIST NVIDIA-kernel-module-source-535.54.03.tar.xz 12653208 BLAKE2B 
4f7f4787d407d5508b664dd725685e477e113b34cc18f93308096872d490d67394be827eddf2ce11b291cb5878adef56652c5f1cf066f19f77ed86d04c3fdead
 SHA512 
51e04293ba52ae3041c4bb3a1f41d1cee99918e06eb4c5cc994209ff4e6d602c77a6a1faf2823366b48eeff881969bce4bb792e3f69d3ee36569ec0d3dc9286e
 DIST nvidia-installer-390.157.tar.bz2 150323 BLAKE2B 
8058ca87a6dea956d564af9f7eab9b1fc82b1f2382bd5cb2f6d97cbe2e19292533522d5f8f2eacbeb16520372715fcb72f8f9b0998962af5d4e75522c8d74524
 SHA512 
93a7ece648602157496c8e27a88864ede341a100f5328a4c1a25faf8f0b94d252060e5e2f71d0c302fd0566c10773c30b76b3b5f431d8039b71c90a7969f7d7e
 DIST nvidia-installer-470.182.03.tar.bz2 146269 BLAKE2B 
bfd1c1bac525e9bd6502a7a356064a96030b61a0e037e893506c397ac95d48bb513a8bc6e1a6060d39f6441191538b0be50c12a3199fd0e720c0f5c2872e5d5e
 SHA512 
d3ff67619e260e1bf4519b087637a9126406600519bcc42d938e12bbd2bbca45e8ec39bec4d23c95ac1c3c8eff0430f90e8e360769d8516ef30e57e99bd4aeb2
+DIST nvidia-installer-470.199.02.tar.bz2 146367 BLAKE2B 
0b49350a884c1e2e39fbb3a393aec0e00678ba84d8f15b3a031628593724ec2a91b162075bcb282d2d2efdc199f8c58bbd0a3c2657592bc548d4c0ec35101518
 SHA512 
e3a2bca22dfc8618a52e5b188bc76718bce0d5a09a136154fbc664aae32c54a6bebaab279f7830e36116bb93e514e81b845f5a7e745dbbdaa0cc6f9284dcc3c3
 DIST nvidia-installer-525.116.04.tar.bz2 147752 BLAKE2B 
9f40a0bd0b4bfd9164ef31bd7c9c7ef2e368872794f374ccf0f24ff899e4055198861c9864f105754d189829a9d91dec52e844e70bfd89f61c126acc708c8aa7
 SHA512 
05e32adbdd33dd744f464dffc4b5b42a08369ab21a48c52bd83ddc796e92698ffafecad9ac28e565352432223ad590af67a6ac2b40862ccf0c2f6b4fff8cb30c
 DIST nvidia-installer-535.54.03.tar.bz2 148051 BLAKE2B 
accd10d3fef1461dd2816d1dbc9379e6da310c292776d43947ccfa18aa7a9d8ac4de4760fe772cf6919670af17ceae63d18d199e2146565352f31630d60f17d4
 SHA512 
41db0545d7c7d051aec9f0b73c9d00c7aa7d78d45f898627e2694c35fc539fa1ee2492ddea6c236cc19e4dcd5713adf62670aa57f46f39c41f368730d2f191ac
 DIST nvidia-modprobe-390.157.tar.bz2 35306 BLAKE2B 
80d202b39c2f95ec0f909712c2e101483af50124092c32efb33bd98ff58ddfb97b737ff07f1ddc941f688c1b4c26a15f392566d522e18506771f10422fcd571c
 SHA512 
109bbe24a3758b568ea65fe1e9d78f69fae6108ec0497b796c885a3912825fe04ffd7389a3e22987f1a10a2926bf6eaa384faabc59478aa3ee244dd3ac91c6d3
 DIST nvidia-modprobe-470.182.03.tar.bz2 38816 BLAKE2B 
67718e61b3a3a753f8c979c516db537ebd5d6a8117524417022969d3cff2779027cd823233e28ff269c4bf311f86c3fd488ac89c8fe93ba93d9c2d177a4d081f
 SHA512 
df313af02c0130ad18d7758800d6acc55c55dbff12117691a1f57dd110d5477309958cb406e6d59154e7c85978c9cb79a7d6445bb5f2fffdabb37dc32db2692d
+DIST nvidia-modprobe-470.199.02.tar.bz2 38786 BLAKE2B 
e72ea8d97f94c804411bcd8ad52653bf4a00114c4c65822a006a28076a51803a39b7168273c46cd0391c094837593ff8bd415357541fe73222c9c87b554e0798
 SHA512 
f66707d1e754d55ebc109d0d03f21143f5702d42ab56785c451b93aa577007de99526d453d732e32ddd273647e041bfe4cd5f4305c7535f2420bac17878c843d
 DIST nvidia-modprobe-525.116.04.tar.bz2 40425 BLAKE2B 
efa536d1c4573b584eb7eb04d7f374b7e44ae859998d7b969495be1f33c4b9a9b8f2450ab2b1c656c3a80c1d127b0419e2c2547ed1729bc9ffa59e5d7d2ff5f9
 SHA512 
b646288dd72f9d041f92a51fa8629228acd7ec62153bf6422461a6f3312832e30165af17d5391ef2659fb751c6cada117983e73a49492eb7d8f958d783cbaf1b
 DIST nvidia-modprobe-535.54.03.tar.bz2 40422 BLAKE2B 
1964aee27e9d4cda3e636c739df73d6dc8219c60f25ecca64f0281b2b6f4d57ebfaa7eb97877f39926d87c8a198a14fc73c458d831d479e958315d0b2766cda7
 SHA512 
edf06cbd892e53c2f04aaf6533d2bda70b92d4770f1d7f056c88c767e1fb3907bf1b18e8f071c430a57a8c00c5f7fb6f00ff57f114e984470ba241210f76cfcf
 DIST nvidia-persistenced-390.157.tar.bz2 48654 BLAKE2B 
2cf6c92da90acff55e8c180a06b0c6a29d48be9fd8ca3c541202fd14f0697220fba6b66452942aa7ae7cc8821f5c5eb9fa8f7a31d2248624e5f9141d83a176b8
 SHA512 
70f0707ed6f2b877e69ef90cf782f66cbc9d2071db53ca09ceb7b89427b0fe176708517340621fa251539b7d481b238adeeb60261674eed74de1f62db6dbb72e
 DIST nvidia-persistenced-470.182.03.tar.bz2 46527 BLAKE2B 
614cc5bf88e8b0d1ff7b74d68049e1c7d78718c9a3801d3c88a7b34bbf13d0ede6438118402139a997985bb5c757aedf609e8fa6dcd1bac37441cfd61950605b
 SHA512 
a80c3c78430f354ad1a03eb2576948d0bbbe066f64b97429b7c8aa02070a10d7f3a7f60db898d5589696cf0a77f04edba26069d4a89be6d0a492642caab5ab96
+DIST nvidia-persistenced-470.199.02.tar.bz2 46558 BLAKE2B 
67cf26b1915d29898769ffe91399c5204e61a71a0bd205d35daae4516bfe06b978323aea5a8af3341dfd497ac6bf7bb7519e33030a3d622d84f3f8f70e5d510f
 SHA512 
8c4ac45954db02311f323d2dd79cbfeb7d6724e96b881069f1dd2d156be089ad2b3723cdc43c83d5a65bee28d45558fc55ebdc74f971abc4640cc5be0444f5e4
 DIST nvidia-persistenced-525.116.04.tar.bz2 48041 BLAKE2B 
ae7f1ab6e9d46df9af3d95871c8ee8c4e05544da3599dca62dfce92c2d17861711d891ba8e412745f4730e7d7d621d8113aab9d90de6fc82dd21e9fe7ba7987e
 SHA512 
b366fabc4080456d3df6155ffabb0035834b68fb54e6608f09612a17c8adf568c6d1ab31fbf1f2d973d5004de6ae3550cd7292810441b4f3b4db3acdc7c55239
 DIST nvidia-persistenced-535.54.03.tar.bz2 48749 BLAKE2B 
f4bb2eea418dafc770724c9658ea6e3a67a89f8997de632aa4635ed65b6340e75e35efbf20286552aed29f149edab468a55f75be7399151c2be9a67f9f33f5cc
 SHA512 
e68d5ccd17482c8a2eee63cb6591c936ace48b22fdb46e91d26a5c1d7c4a305c990371b26c74ac6af396a05f53c40f41c62de4282e98c6e5da60266c6d4a2235
 DIST nvidia-settings-390.157.tar.bz2 1108938 BLAKE2B 
d9ec1ab5d7f157d74627272adf752a671dd17e2ede02069437b6180b927fe315b15cc6416d584ab2f038b76fe01e5b64514a834f24d88ac16676e55205fdecdd
 SHA512 
b16699009bf56a1ff3b623a528c58061c4f5a2c5c4a373756a07bcd667743a1df7c733a572d2d0baa835a904ac2fda8a5c85890dcc00c3a0f223e0467aea902d
 DIST nvidia-settings-470.182.03.tar.bz2 1061536 BLAKE2B 
488a5f44259f6d26d37b65ab2b88b7ed008f3cb583d41bb5492bdaeb768d7d58ba239cd16349e6b08d8305ddb5663002c5101fb47a24e7759c42f55d2babe467
 SHA512 
38fd820d7a1227376f612e89afc7139563c7f87bfb9256037e71a7f33556286570b09f9c7f057596a8d6cf89f18fee73f4be8fd590e2da879cabf12903ec858c
+DIST nvidia-settings-470.199.02.tar.bz2 1062171 BLAKE2B 
d247b4a9e8d836b3e37116b51e8dfc36fa23ffc45bf4e21e84d6174adbc45ea8605675b146cf109311412e736995a51d0d0503d182a35507690f384e87202005
 SHA512 
0a2794e795ddf579f6bc27de2795119e62c6b9cc8e1641ada3e4954a89ef2a7796e88e3299cea113f269838b5bf084ed3c07304d5d34d410c5483c135b13b356
 DIST nvidia-settings-525.116.04.tar.bz2 1087420 BLAKE2B 
f37b52937d7a121a1ffd7bb6fb2958f4668b5d6df0a28eae9dc030077828d4a8bd7c51ff8f966f1d8797140573624cf55e796bb959feeb1271998b9064c78036
 SHA512 
911de09f2e2f2481219be9afa680f5c6909bf0068ad6b3833ca27ab29fe95dcb624559d2b828adad2a7c0f107260f0e632a3d892abe0aa584afce09ebd0d7cb7
 DIST nvidia-settings-535.54.03.tar.bz2 1093436 BLAKE2B 
b3cf57b318fe057918ae65288cf55f57851c043c1e360849143a10f021fa18e83fc20cf96151b080b8f5dc2b8ad009b79d43d9de733bf87910ec3b5b37842caa
 SHA512 
58ed2d57cecb82f077e8912186ded16974fb6400f6d5f4b08d5b66be16290efa348631ce2f48401d1e504edda41701bf39d01e205112803ca8bb5c70a84a54d8
 DIST nvidia-xconfig-390.157.tar.bz2 107399 BLAKE2B 
0cbb3b1ba508ddc3ba4a161c290b31bf7a67f67880bdbd01171a962c5fa97ca945b1ef17932403f8589309380743f1da632c728d8accb6d4e56dbd895e7486bb
 SHA512 
50b390811c9bf091b14add41f886925b17496b41006b7d3981d2398caa65cf5db8a579c8cebed78278384bf3acc629befb07b54339c61abcc75852c0dcb8b8ca
 DIST nvidia-xconfig-470.182.03.tar.bz2 108697 BLAKE2B 
3c2d5e3288fd8dcb253c5980b2528678ce1b1322920fee44a1ec29cfa15d799aa51a613ba3a2f25ce0a169eb4768c886e0f4703c27dd8d99fb5102ea7382b076
 SHA512 
942450fb3eb07297ea4b5fe6d9653c96257a41bd4ef819b339e080489c5a6d2b78d826859886701e954b7e3dcce8af6d8a78ab0dca2de44ca930370baff27954
+DIST nvidia-xconfig-470.199.02.tar.bz2 108683 BLAKE2B 
80e5b356f1b2a10b2f0d1a139b511fa79af925d5cdac80ebd04fe53b4ec26df599985a3ee4be1cb466415ec8fb292e3b8b85013aaa21226a9301351490ddb28b
 SHA512 
0c1d18af896b8cb3a4992025ed207c9bcf2211e6a8e904755d51ce1d3791db89c0baa4571f9eb5198a5fcd13ffd41deec416c622f8207bb7dd23decd9864ad89
 DIST nvidia-xconfig-525.116.04.tar.bz2 110583 BLAKE2B 
7fa42ffddee83dd6df0f3d86259831a34eb123dcb4aa7689e94ae40bbd463b30795b9a0f6f9a78ec869858625c5e19c3a5faec75fad0257500adbf7b8f5cb2d3
 SHA512 
2528616c78d4d0f1b28c479c0e211fe35653823f65a5a23b32f3bc2681b9730fd2a10907e46e264dff2fb80dad92b4aad29b659696acaef8f6ed6d244d41ac51
 DIST nvidia-xconfig-535.54.03.tar.bz2 110606 BLAKE2B 
99af140f7742e23db430fdf392ce985c035c7669f619bff709987a4739e4872ff03991f2324ffbf40f53259906832464f02baf0ba485a16ecdea52af66ab958b
 SHA512 
5927ba6514d25cd0c4a05e42533ea082d5c91c0e05f8cdadedc6fbb5c0b6f0e424d057cee0dfd4dec937514a85f1d28e81c5ea7e2aa8ee374476ba376255d035
 DIST open-gpu-kernel-modules-525.47.27.tar.gz 10324085 BLAKE2B 
b9f7297ada26dc8db9652ddc37144b69f28d473e9c7638acce0b6abb26ab6dc5f3fe31a5b666f8b99857c9d4d5443e46fba5140d4969a244697a26f0da49a34d
 SHA512 
bd1a434aaea27ff1db33dbbd30b32247a870e2079d925d272b09a41d09f50ed192a3246a57dd5c78649ad77a898710701981effa55f574495f7c504e2fb9b8e8

diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-470.199.02.ebuild 
b/x11-drivers/nvidia-drivers/nvidia-drivers-470.199.02.ebuild
new file mode 100644
index 000000000000..920266f42c5c
--- /dev/null
+++ b/x11-drivers/nvidia-drivers/nvidia-drivers-470.199.02.ebuild
@@ -0,0 +1,500 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MODULES_OPTIONAL_IUSE=+modules
+inherit desktop flag-o-matic linux-mod-r1 multilib readme.gentoo-r1
+inherit systemd toolchain-funcs unpacker user-info
+
+MODULES_KERNEL_MAX=6.4
+NV_URI="https://download.nvidia.com/XFree86/";
+
+DESCRIPTION="NVIDIA Accelerated Graphics Driver"
+HOMEPAGE="https://www.nvidia.com/download/index.aspx";
+SRC_URI="
+       ${NV_URI}Linux-x86_64/${PV}/NVIDIA-Linux-x86_64-${PV}.run
+       $(printf "${NV_URI}%s/%s-${PV}.tar.bz2 " \
+               nvidia-{installer,modprobe,persistenced,settings,xconfig}{,})"
+# nvidia-installer is unused but here for GPL-2's "distribute sources"
+S="${WORKDIR}"
+
+LICENSE="NVIDIA-r2 BSD BSD-2 GPL-2 MIT ZLIB curl openssl"
+SLOT="0/${PV%%.*}"
+KEYWORDS="-* ~amd64"
+IUSE="+X abi_x86_32 abi_x86_64 persistenced +static-libs +tools wayland"
+
+COMMON_DEPEND="
+       acct-group/video
+       sys-libs/glibc
+       persistenced? (
+               acct-user/nvpd
+               net-libs/libtirpc:=
+       )
+       tools? (
+               >=app-accessibility/at-spi2-core-2.46:2
+               dev-libs/glib:2
+               dev-libs/jansson:=
+               media-libs/harfbuzz:=
+               x11-libs/cairo
+               x11-libs/gdk-pixbuf:2
+               x11-libs/gtk+:3[X]
+               x11-libs/libX11
+               x11-libs/libXext
+               x11-libs/libXxf86vm
+               x11-libs/pango
+       )"
+RDEPEND="
+       ${COMMON_DEPEND}
+       X? (
+               media-libs/libglvnd[X,abi_x86_32(-)?]
+               x11-libs/libX11[abi_x86_32(-)?]
+               x11-libs/libXext[abi_x86_32(-)?]
+       )
+       wayland? (
+               ~gui-libs/egl-wayland-1.1.7
+               media-libs/libglvnd
+       )"
+DEPEND="
+       ${COMMON_DEPEND}
+       static-libs? (
+               x11-libs/libX11
+               x11-libs/libXext
+       )
+       tools? (
+               media-libs/libglvnd
+               sys-apps/dbus
+               x11-base/xorg-proto
+               x11-libs/libXrandr
+               x11-libs/libXv
+               x11-libs/libvdpau
+       )"
+BDEPEND="
+       sys-devel/m4
+       virtual/pkgconfig"
+
+QA_PREBUILT="lib/firmware/* opt/bin/* usr/lib*"
+
+PATCHES=(
+       "${FILESDIR}"/nvidia-drivers-470.141.03-clang15.patch
+       "${FILESDIR}"/nvidia-modprobe-390.141-uvm-perms.patch
+       "${FILESDIR}"/nvidia-settings-390.144-desktop.patch
+       "${FILESDIR}"/nvidia-settings-390.144-no-gtk2.patch
+       "${FILESDIR}"/nvidia-settings-390.144-raw-ldflags.patch
+)
+
+pkg_setup() {
+       use modules && [[ ${MERGE_TYPE} != binary ]] || return
+
+       local CONFIG_CHECK="
+               PROC_FS
+               ~DRM_KMS_HELPER
+               ~SYSVIPC
+               ~!AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT
+               ~!LOCKDEP
+               ~!SLUB_DEBUG_ON
+               ~!X86_KERNEL_IBT
+               !DEBUG_MUTEXES"
+       local ERROR_DRM_KMS_HELPER="CONFIG_DRM_KMS_HELPER: is not set but 
needed for Xorg auto-detection
+       of drivers (no custom config), and for wayland / nvidia-drm.modeset=1.
+       Cannot be directly selected in the kernel's menuconfig, and may need
+       selection of a DRM device even if unused, e.g. CONFIG_DRM_AMDGPU=m or
+       DRM_I915=y, DRM_NOUVEAU=m also acceptable if a module and not built-in."
+       local ERROR_X86_KERNEL_IBT="CONFIG_X86_KERNEL_IBT: is set, this should 
be fine and is supposed
+       to be fixed but, *if* modules fail to load, then try to either unset
+       or pass ibt=off to the kernel (ignore this message otherwise)"
+
+       use amd64 && kernel_is -ge 5 8 && CONFIG_CHECK+=" X86_PAT" #817764
+
+       linux-mod-r1_pkg_setup
+
+       # do some extra checks manually as it gets messy to handle builtin-only
+       # and some other conditional checks through CONFIG_CHECK
+       # TODO?: maybe move other custom checks here for uniformity
+       local warn=()
+
+       if linux_chkconfig_builtin DRM_NOUVEAU; then
+               # suggest =m given keeps KMS_HELPER enabled and can serve as 
fallback
+               warn+=(
+                       "  CONFIG_DRM_NOUVEAU: is builtin (=y), and will 
prevent loading NVIDIA"
+                       "    modules (can be safely kept as a module (=m) 
instead)."
+               )
+       fi
+
+       if linux_chkconfig_builtin DRM_SIMPLEDRM; then
+               # wrt prebuilts, Fedora is pushing =y and gentoo-kernel-bin 
uses its
+               # configs (bug #840439), but without Fedora's kernel patch to
+               # workaround this issue (which is unlikely to work for us 
anyway)
+               # https://github.com/NVIDIA/open-gpu-kernel-modules/issues/228
+               warn+=(
+                       "  CONFIG_DRM_SIMPLEDRM: is builtin (=y), and may 
conflict with NVIDIA"
+                       "    (i.e. blanks when X/wayland starts, and tty loses 
display)."
+                       "    For prebuilt kernels, unfortunately no known good 
workarounds."
+               )
+       fi
+
+       if ! linux_chkconfig_present FB_EFI &&
+               ! linux_chkconfig_present FB_SIMPLE &&
+               ! linux_chkconfig_present FB_VESA
+       then
+               # nvidia-drivers does not handle the tty (beside mode 
restoration) but,
+               # given few options are viable, try to warn if all missing
+               warn+=(
+                       "  CONFIG_FB_(EFI|SIMPLE|VESA): none set, but note at 
least one is normally"
+                       "    needed to get a display for the tty console. In 
most cases, it is"
+                       "    recommended to enable FB_EFI=y and disable 
FB_SIMPLE (can be quirky)."
+                       "    Non-EFI systems are likely to want FB_VESA=y. 
Users with multiple GPUs"
+                       "    or not using the tty may be able to safely ignore 
this warning."
+               )
+       fi
+
+       if kernel_is -ge 5 18 13; then
+               if linux_chkconfig_present FB_SIMPLE; then
+                       warn+=(
+                               "  CONFIG_FB_SIMPLE: is set, recommended to 
disable and switch to FB_EFI or"
+                               "    FB_VESA as it currently may be broken with 
>=kernel-5.18.13 + NVIDIA:"
+                               "    
https://github.com/NVIDIA/open-gpu-kernel-modules/issues/341";
+                               "    (feel free to ignore this if it works for 
you)"
+                       )
+               fi
+
+               if linux_chkconfig_present SYSFB_SIMPLEFB &&
+                       { linux_chkconfig_present FB_EFI || 
linux_chkconfig_present FB_VESA; }
+               then
+                       warn+=(
+                               "  CONFIG_SYSFB_SIMPLEFB: is set, this may 
prevent FB_EFI or FB_VESA"
+                               "    from providing a working tty console 
display (ignore if unused)."
+                       )
+               fi
+       fi
+
+       (( ${#warn[@]} )) &&
+               ewarn "Detected potential configuration issues with used 
kernel:${warn[*]/#/$'\n'}"
+}
+
+src_prepare() {
+       # make patches usable across versions
+       rm nvidia-modprobe && mv nvidia-modprobe{-${PV},} || die
+       rm nvidia-persistenced && mv nvidia-persistenced{-${PV},} || die
+       rm nvidia-settings && mv nvidia-settings{-${PV},} || die
+       rm nvidia-xconfig && mv nvidia-xconfig{-${PV},} || die
+
+       default
+
+       # prevent detection of incomplete kernel DRM support (bug #603818)
+       sed 's/defined(CONFIG_DRM/defined(CONFIG_DRM_KMS_HELPER/g' \
+               -i kernel/conftest.sh || die
+
+       sed 's/__USER__/nvpd/' \
+               
nvidia-persistenced/init/systemd/nvidia-persistenced.service.template \
+               > "${T}"/nvidia-persistenced.service || die
+
+       # use alternative vulkan icd option if USE=-X (bug #909181)
+       use X || sed -i 's/"libGLX/"libEGL/' nvidia_{layers,icd}.json || die
+
+       # enable nvidia-drm.modeset=1 by default with USE=wayland
+       cp "${FILESDIR}"/nvidia-470.conf "${T}"/nvidia.conf || die
+       use !wayland || sed -i '/^#.*modeset=1$/s/^#//' "${T}"/nvidia.conf || 
die
+}
+
+src_compile() {
+       tc-export AR CC CXX LD OBJCOPY OBJDUMP
+       local -x RAW_LDFLAGS="$(get_abi_LDFLAGS) $(raw-ldflags)" # 
raw-ldflags.patch
+
+       local xnvflags=-fPIC #840389
+       # lto static libraries tend to cause problems without fat objects
+       is-flagq '-flto@(|=*)' && xnvflags+=" $(test-flags-CC 
-ffat-lto-objects)"
+
+       NV_ARGS=(
+               PREFIX="${EPREFIX}"/usr
+               HOST_CC="$(tc-getBUILD_CC)"
+               HOST_LD="$(tc-getBUILD_LD)"
+               NV_USE_BUNDLED_LIBJANSSON=0
+               NV_VERBOSE=1 DO_STRIP= MANPAGE_GZIP= OUTPUTDIR=out
+               XNVCTRL_CFLAGS="${xnvflags}"
+       )
+
+       local modlist=( nvidia{,-drm,-modeset,-peermem,-uvm}=video:kernel )
+       local modargs=(
+               IGNORE_CC_MISMATCH=yes NV_VERBOSE=1
+               SYSOUT="${KV_OUT_DIR}" SYSSRC="${KV_DIR}"
+       )
+
+       linux-mod-r1_src_compile
+       emake "${NV_ARGS[@]}" -C nvidia-modprobe
+       use persistenced && emake "${NV_ARGS[@]}" -C nvidia-persistenced
+       use X && emake "${NV_ARGS[@]}" -C nvidia-xconfig
+
+       if use tools; then
+               # cflags: avoid noisy logs, only use here and set first to let 
override
+               CFLAGS="-Wno-deprecated-declarations ${CFLAGS}" \
+                       emake "${NV_ARGS[@]}" -C nvidia-settings
+       elif use static-libs; then
+               emake "${NV_ARGS[@]}" -C nvidia-settings/src out/libXNVCtrl.a
+       fi
+}
+
+src_install() {
+       local libdir=$(get_libdir) libdir32=$(ABI=x86 get_libdir)
+
+       NV_ARGS+=( DESTDIR="${D}" LIBDIR="${ED}"/usr/${libdir} )
+
+       local -A paths=(
+               [APPLICATION_PROFILE]=/usr/share/nvidia
+               [CUDA_ICD]=/etc/OpenCL/vendors
+               
[EGL_EXTERNAL_PLATFORM_JSON]=/usr/share/egl/egl_external_platform.d
+               [FIRMWARE]=/lib/firmware/nvidia/${PV}
+               [GLVND_EGL_ICD_JSON]=/usr/share/glvnd/egl_vendor.d
+               [VULKAN_ICD_JSON]=/usr/share/vulkan
+               [WINE_LIB]=/usr/${libdir}/nvidia/wine
+               [XORG_OUTPUTCLASS_CONFIG]=/usr/share/X11/xorg.conf.d
+
+               [GLX_MODULE_SHARED_LIB]=/usr/${libdir}/xorg/modules/extensions
+               [GLX_MODULE_SYMLINK]=/usr/${libdir}/xorg/modules
+               [XMODULE_SHARED_LIB]=/usr/${libdir}/xorg/modules
+       )
+
+       local skip_files=(
+               $(usev !X "libGLX_nvidia libglxserver_nvidia libnvidia-ifr")
+               $(usev !wayland libnvidia-vulkan-producer)
+               libGLX_indirect # non-glvnd unused fallback
+               libnvidia-gtk nvidia-{settings,xconfig} # built from source
+               libnvidia-egl-wayland 10_nvidia_wayland # gui-libs/egl-wayland
+       )
+       local skip_modules=(
+               $(usev !X "nvfbc vdpau xdriver")
+               $(usev !modules gsp)
+               installer nvpd # handled separately / built from source
+       )
+       local skip_types=(
+               GLVND_LIB GLVND_SYMLINK EGL_CLIENT.\* GLX_CLIENT.\* # 
media-libs/libglvnd
+               OPENCL_WRAPPER.\* # virtual/opencl
+               DOCUMENTATION DOT_DESKTOP .\*_SRC DKMS_CONF # handled 
separately / unused
+       )
+
+       local DOCS=(
+               README.txt NVIDIA_Changelog supported-gpus/supported-gpus.json
+               nvidia-settings/doc/{FRAMELOCK,NV-CONTROL-API}.txt
+       )
+       local HTML_DOCS=( html/. )
+       einstalldocs
+
+       local DISABLE_AUTOFORMATTING=yes
+       local DOC_CONTENTS="\
+Trusted users should be in the 'video' group to use NVIDIA devices.
+You can add yourself by using: gpasswd -a my-user video\
+$(usev modules "
+
+Like all out-of-tree kernel modules, it is necessary to rebuild
+${PN} after upgrading or rebuilding the Linux kernel
+by for example running \`emerge @module-rebuild\`. Alternatively,
+if using a distribution kernel (sys-kernel/gentoo-kernel{,-bin}),
+this can be automated by setting USE=dist-kernel globally.
+
+Loaded kernel modules also must not mismatch with the installed
+${PN} version (excluding -r revision), meaning should
+ensure \`eselect kernel list\` points to the kernel that will be
+booted before building and preferably reboot after upgrading
+${PN} (the ebuild will emit a warning if mismatching).
+
+See '${EPREFIX}/etc/modprobe.d/nvidia.conf' for modules options.")\
+$(use amd64 && usev !abi_x86_32 "
+
+Note that without USE=abi_x86_32 on ${PN}, 32bit applications
+(typically using wine / steam) will not be able to use GPU acceleration.")
+
+For general information on using ${PN}, please see:
+https://wiki.gentoo.org/wiki/NVIDIA/nvidia-drivers";
+       readme.gentoo_create_doc
+
+       if use modules; then
+               linux-mod-r1_src_install
+
+               insinto /etc/modprobe.d
+               doins "${T}"/nvidia.conf
+
+               # used for gpu verification with binpkgs (not kept, see 
pkg_preinst)
+               insinto /usr/share/nvidia
+               doins supported-gpus/supported-gpus.json
+       fi
+
+       emake "${NV_ARGS[@]}" -C nvidia-modprobe install
+       fowners :video /usr/bin/nvidia-modprobe #505092
+       fperms 4710 /usr/bin/nvidia-modprobe
+
+       if use persistenced; then
+               emake "${NV_ARGS[@]}" -C nvidia-persistenced install
+               newconfd "${FILESDIR}"/nvidia-persistenced.confd 
nvidia-persistenced
+               newinitd "${FILESDIR}"/nvidia-persistenced.initd 
nvidia-persistenced
+               systemd_dounit "${T}"/nvidia-persistenced.service
+       fi
+
+       if use tools; then
+               emake "${NV_ARGS[@]}" -C nvidia-settings install
+
+               doicon nvidia-settings/doc/nvidia-settings.png
+               domenu nvidia-settings/doc/nvidia-settings.desktop
+
+               exeinto /etc/X11/xinit/xinitrc.d
+               newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
+       fi
+
+       if use static-libs; then
+               dolib.a nvidia-settings/src/out/libXNVCtrl.a
+
+               insinto /usr/include/NVCtrl
+               doins nvidia-settings/src/libXNVCtrl/NVCtrl{Lib,}.h
+       fi
+
+       use X && emake "${NV_ARGS[@]}" -C nvidia-xconfig install
+
+       # mimic nvidia-installer by reading .manifest to install files
+       # 0:file 1:perms 2:type 3+:subtype/arguments -:module
+       local m into
+       while IFS=' ' read -ra m; do
+               ! [[ ${#m[@]} -ge 2 && ${m[-1]} =~ MODULE: ]] ||
+                       [[ " ${m[0]##*/}" =~ ^(\ ${skip_files[*]/%/.*|\\} )$ ]] 
||
+                       [[ " ${m[2]}" =~ ^(\ ${skip_types[*]/%/|\\} )$ ]] ||
+                       has ${m[-1]#MODULE:} "${skip_modules[@]}" && continue
+
+               case ${m[2]} in
+                       MANPAGE)
+                               gzip -dc ${m[0]} | newman - ${m[0]%.gz}; assert
+                               continue
+                       ;;
+                       VDPAU_SYMLINK) m[4]=vdpau/; m[5]=${m[5]#vdpau/};; # .so 
to vdpau/
+               esac
+
+               if [[ -v 'paths[${m[2]}]' ]]; then
+                       into=${paths[${m[2]}]}
+               elif [[ ${m[2]} == *_BINARY ]]; then
+                       into=/opt/bin
+               elif [[ ${m[3]} == COMPAT32 ]]; then
+                       use abi_x86_32 || continue
+                       into=/usr/${libdir32}
+               elif [[ ${m[2]} == *_@(LIB|SYMLINK) ]]; then
+                       into=/usr/${libdir}
+               else
+                       die "No known installation path for ${m[0]}"
+               fi
+               [[ ${m[3]: -2} == ?/ ]] && into+=/${m[3]%/}
+               [[ ${m[4]: -2} == ?/ ]] && into+=/${m[4]%/}
+
+               if [[ ${m[2]} =~ _SYMLINK$ ]]; then
+                       [[ ${m[4]: -1} == / ]] && m[4]=${m[5]}
+                       dosym ${m[4]} ${into}/${m[0]}
+                       continue
+               fi
+               [[ ${m[0]} =~ ^libnvidia-ngx.so ]] &&
+                       dosym ${m[0]} ${into}/${m[0]%.so*}.so.1 # soname not in 
.manifest
+
+               printf -v m[1] %o $((m[1] | 0200)) # 444->644
+               insopts -m${m[1]}
+               insinto ${into}
+               doins ${m[0]}
+       done < .manifest || die
+       insopts -m0644 # reset
+
+       # MODULE:installer non-skipped extras
+       : "$(systemd_get_sleepdir)"
+       exeinto "${_#"${EPREFIX}"}"
+       doexe systemd/system-sleep/nvidia
+       dobin systemd/nvidia-sleep.sh
+       systemd_dounit systemd/system/nvidia-{hibernate,resume,suspend}.service
+
+       dobin nvidia-bug-report.sh
+
+       # symlink non-versioned so nvidia-settings can use it even if 
misdetected
+       dosym nvidia-application-profiles-${PV}-key-documentation \
+               
${paths[APPLICATION_PROFILE]}/nvidia-application-profiles-key-documentation
+
+       # don't attempt to strip firmware files (silences errors)
+       dostrip -x ${paths[FIRMWARE]}
+
+       # sandbox issues with /dev/nvidiactl (and /dev/char wrt bug #904292)
+       # are widespread and sometime affect revdeps of packages built with
+       # USE=opencl/cuda making it hard to manage in ebuilds (minimal set,
+       # ebuilds should handle manually if need others or addwrite)
+       insinto /etc/sandbox.d
+       newins - 20nvidia <<<'SANDBOX_PREDICT="/dev/nvidiactl:/dev/char"'
+}
+
+pkg_preinst() {
+       has_version "${CATEGORY}/${PN}[wayland]" && NV_HAD_WAYLAND=
+
+       use modules || return
+
+       # set video group id based on live system (bug #491414)
+       local g=$(egetent group video | cut -d: -f3)
+       [[ ${g} =~ ^[0-9]+$ ]] || die "Failed to determine video group id (got 
'${g}')"
+       sed -i "s/@VIDEOGID@/${g}/" "${ED}"/etc/modprobe.d/nvidia.conf || die
+
+       # try to find driver mismatches using temporary supported-gpus.json
+       for g in $(grep -l 0x10de /sys/bus/pci/devices/*/vendor 2>/dev/null); do
+               g=$(grep -io 
"\"devid\":\"$(<${g%vendor}device)\"[^}]*branch\":\"[0-9]*" \
+                       "${ED}"/usr/share/nvidia/supported-gpus.json 
2>/dev/null)
+               if [[ ${g} ]]; then
+                       g=$((${g##*\"}+1))
+                       if ver_test -ge ${g}; then
+                               NV_LEGACY_MASK=">=${CATEGORY}/${PN}-${g}"
+                               break
+                       fi
+               fi
+       done
+       rm "${ED}"/usr/share/nvidia/supported-gpus.json || die
+}
+
+pkg_postinst() {
+       linux-mod-r1_pkg_postinst
+
+       readme.gentoo_print_elog
+
+       if [[ -r /proc/driver/nvidia/version &&
+               $(</proc/driver/nvidia/version) != *"  ${PV}  "* ]]; then
+               ewarn "Currently loaded NVIDIA modules do not match the newly 
installed"
+               ewarn "libraries and may prevent launching GPU-accelerated 
applications."
+               if use modules; then
+                       ewarn "Easiest way to fix this is normally to reboot. 
If still run into issues"
+                       ewarn "(e.g. API mismatch messages in the \`dmesg\` 
output), please verify"
+                       ewarn "that the running kernel is ${KV_FULL} and that 
(if used) the"
+                       ewarn "initramfs does not include NVIDIA modules (or at 
least, not old ones)."
+               fi
+       fi
+
+       if [[ $(</proc/cmdline) == *slub_debug=[!-]* ]]; then
+               ewarn "Detected that the current kernel command line is using 
'slub_debug=',"
+               ewarn "this may lead to system instability/freezes with this 
version of"
+               ewarn "${PN}. Bug: https://bugs.gentoo.org/796329";
+       fi
+
+       if [[ -v NV_LEGACY_MASK ]]; then
+               ewarn
+               ewarn "***WARNING***"
+               ewarn
+               ewarn "You are installing a version of ${PN} known not to work"
+               ewarn "with a GPU of the current system. If unwanted, add the 
mask:"
+               if [[ -d ${EROOT}/etc/portage/package.mask ]]; then
+                       ewarn "  echo '${NV_LEGACY_MASK}' > 
${EROOT}/etc/portage/package.mask/${PN}"
+               else
+                       ewarn "  echo '${NV_LEGACY_MASK}' >> 
${EROOT}/etc/portage/package.mask"
+               fi
+               ewarn "...then downgrade to a legacy[1] branch if possible (not 
all old versions"
+               ewarn "are available or fully functional, may need to consider 
nouveau[2])."
+               ewarn "[1] https://www.nvidia.com/object/IO_32667.html";
+               ewarn "[2] https://wiki.gentoo.org/wiki/Nouveau";
+       fi
+
+       if use wayland && use modules && [[ ! -v NV_HAD_WAYLAND ]]; then
+               elog
+               elog "With USE=wayland, this version of ${PN} sets 
nvidia-drm.modeset=1"
+               elog "in '${EROOT}/etc/modprobe.d/nvidia.conf'. This feature is 
considered"
+               elog "experimental but is required for wayland."
+               elog
+               elog "If you experience issues, either disable wayland or edit 
nvidia.conf."
+               elog "Of note, may possibly cause issues with SLI and Reverse 
PRIME."
+               elog
+               elog "This version of ${PN} only supports EGLStream which is 
only"
+               elog "supported by a few wayland compositors (e.g. kwin / 
mutter, not sway),"
+               elog "and is barely tested (X11 is recommended for this legacy 
branch)."
+       fi
+}

Reply via email to