# yaml-language-server: $schema=/usr/share/ypkg/schema/schema.json name : nvidia-developer-driver version : 580.94.13 release : 350 source : - https://developer.nvidia.com/downloads/vulkan-beta-5809413-linux : 1e0f4b3b11b59f672ea565088bf9a219febbcbfbefcd012c3ad9e2f0acc6c78d extract : false homepage : https://developer.nvidia.com/vulkan-driver license : - EULA summary : - NVIDIA Developer Binary Driver (LTS Kernel) - common : Shared assets for the NVIDIA Developer Dinary Driver - current : NVIDIA Developer Binary Driver (Current Kernel) - modaliases : These files are used by the Software Center for hardware detection component : - kernel.drivers - common : xorg.driver - current : kernel.drivers - modaliases : kernel.drivers - 32bit : xorg.driver description: | NVIDIA Developer Driver (DOES NOT SUPPORT OLD CARDS) rundeps : - 32bit : - egl-gbm-32bit - egl-wayland-32bit - egl-x11-32bit - libglvnd-32bit - nvidia-developer-driver-common - common : - egl-gbm - egl-wayland - egl-x11 - kbd - libglvnd - linux-driver-management - current : nvidia-developer-driver-common - main : nvidia-developer-driver-common conflicts : - nvidia-470-glx-driver - nvidia-glx-driver - nvidia-beta-driver - common : - nvidia-470-glx-driver-common - nvidia-glx-driver-common - nvidia-beta-driver-common - 32bit : - nvidia-470-glx-driver-32bit - nvidia-glx-driver-32bit - nvidia-beta-driver-32bit - current : - nvidia-470-glx-driver-current - nvidia-glx-driver-current - nvidia-beta-driver-current patterns : - common : /* - modaliases : - /usr/share/doflicky/modaliases - /usr/share/linux-driver-management/modaliases - 32bit : /usr/lib32 - main : - /lib64/modules/*.lts - /usr/lib64/kernel/initrd-com.solus-project.lts.* - /usr/lib64/modules/*.lts - current : - /lib64/modules/*.current - /usr/lib64/kernel/initrd-com.solus-project.current.* - /usr/lib64/modules/*.current strip : false debug : false builddeps : - pkgconfig(gtk+-2.0) - pkgconfig(gtk+-3.0) - pkgconfig(libelf) - pkgconfig(xorg-server) - libglvnd-32bit - libxext-32bit - linux-current - linux-current-headers - linux-lts - linux-lts-headers permanent : - /lib64/modules - /usr/lib64/kernel - /usr/lib64/modules environment: | IGNORE_MISSING_MODULE_SYMVERS=1 setup : | versionstring="${version//./}" sh $sources/vulkan-beta-$versionstring-linux --extract-only pushd NVIDIA* pushd kernel %patch -p2 -i $pkgfiles/make-modeset-fbdev-default.diff popd # Prepare kernel trees cp -a kernel lts_kernel cp -a kernel current_kernel # We need systemd units. tar xf nvidia-persistenced-init.tar.bz2 build : | # Build kernel modules %make -C lts_kernel SYSSRC="/lib/modules/%kernel_version_lts%/build" %make -C current_kernel SYSSRC="/lib/modules/%kernel_version_current%/build" install : | # Install LTS kernel drivers install -D -d -m 00755 $installdir/usr/lib64/modules/%kernel_version_lts%/kernel/drivers/video install -m 00644 lts_kernel/*.ko $installdir/usr/lib64/modules/%kernel_version_lts%/kernel/drivers/video/. # Install current kernel drivers install -D -d -m 00755 $installdir/usr/lib64/modules/%kernel_version_current%/kernel/drivers/video install -m 00644 current_kernel/*.ko $installdir/usr/lib64/modules/%kernel_version_current%/kernel/drivers/video/. # Prepare modaliases from the LTS kernel sh -e $pkgfiles/nvidia_supported nvidia ${package} README.txt lts_kernel/nvidia/nv-kernel.o_binary > modalias install -D -m 00644 modalias $installdir/usr/share/doflicky/modaliases/${package}.modaliases # New location, keep the old one around for a short while install -D -m 00644 modalias $installdir/usr/share/linux-driver-management/modaliases/${package}.modaliases # Install nvidia driver for xorg install -D -m 00755 nvidia_drv.so $installdir/%libdir%/xorg/modules/drivers/nvidia_drv.so # Install all binaries install -D -d -m 00755 $installdir/usr/bin install -m 00755 `find . -maxdepth 1 -type f -name "nvidia-*" -executable` $installdir/usr/bin/. rm -v $installdir/usr/bin/nvidia-installer # Needs setuid set to create /dev/ thingies chmod 4755 $installdir/usr/bin/nvidia-modprobe # Install all libraries install -D -d -m 00755 $installdir/usr/lib{32,64} install -m 00755 lib*.so* $installdir/%libdir%/. install -m 00755 32/lib*.so* $installdir/usr/lib32/. # Strip glvnd bits and OpenCL, we have those elsewhere rm -v $installdir/usr/lib{32,64}/{libGLX.so.0,libGL.so.1.7.0,libOpenGL.so.0,libOpenCL.so.1.0.0,libGLdispatch.so*} # Remove the non glvnd portions rm -v $installdir/usr/lib{32,64}/lib{EGL,GLESv1_CM,GLESv2}.so* # Nuke egl-gbm/wayland/x11 conflicts, we package those separately rm -fv $installdir/usr/lib{32,64}/libnvidia-egl-{gbm,wayland,xcb,xlib}* # Remove OpenSSL 1.1 fallback library rm -fv $installdir/%libdir%/libnvidia-pkcs11.so* function redo_libs() { for gl in $* ; do i=`dirname ${gl}` clean=`echo $(basename ${gl})|sed -e 's@\.so\.%version%@@g'` soname=`objdump -p ${gl} | grep SONAME | awk '{print $2}'` if [[ ! -e $i/${soname} ]] ; then ln -sv `basename ${gl}` $i/${soname} fi if [[ ! -e $i/{clean}.so ]]; then ln -sv `basename ${gl}` $i/${clean}.so fi done } redo_libs $installdir/usr/lib{32,64}/lib*.so.%version% # GSP Firmware install -Dm644 -t "$installdir/usr/lib64/firmware/nvidia/$version/" firmware/*.bin # Move vdpau into the final position install -D -d -m 00755 $installdir/usr/lib{32,64}/vdpau mv -v $installdir/%libdir%/libvdpau* $installdir/%libdir%/vdpau/. mv -v $installdir/usr/lib32/libvdpau* $installdir/usr/lib32/vdpau/. # Data files install -D -m 00644 nvidia-settings.desktop $installdir/usr/share/applications/nvidia-settings.desktop sed -e 's@__UTILS_PATH__@/usr/bin@' -i $installdir/usr/share/applications/nvidia-settings.desktop install -D -m 00644 nvidia-settings.png $installdir/usr/share/pixmaps/nvidia-settings.png install -D -m 00644 nvidia.icd $installdir/usr/share/OpenCL/vendors/nvidia.icd install -D -d -m 00755 $installdir/usr/share/nvidia/files.d install -m 00644 nvoptix.bin $installdir/usr/share/nvidia/ install -m 00644 sandboxutils-filelist.json $installdir/usr/share/nvidia/files.d/ # Vulkan install -Dm00644 nvidia_icd.json $installdir/usr/share/vulkan/icd.d/10_nvidia.json install -Dm00644 nvidia_icd_vksc.json $installdir/usr/share/vulkansc/icd.d/nvidia_icd_vksc.json install -Dm00644 nvidia_layers.json $installdir/usr/share/vulkan/implicit_layer.d/nvidia_layers.json # GBM install -D -d -m 00755 $installdir/%libdir%/gbm ln -s "../libnvidia-allocator.so.$version" $installdir/%libdir%/gbm/nvidia-drm_gbm.so # Make sure glvnd knows where to be install -D -d -m 00755 $installdir/usr/share/glvnd/egl_vendor.d install -m 00644 10_nvidia.json $installdir/usr/share/glvnd/egl_vendor.d/10_nvidia.json # Keep settings UI happy install -m 00644 nvidia-application-profiles-${version}-rc -t $installdir/usr/share/nvidia install -m 00644 nvidia-application-profiles-${version}-key-documentation -t $installdir/usr/share/nvidia # Install NVIDIA NGX dll for use with Proton and Wine install -D -d -m 00755 $installdir/%libdir%/nvidia/wine install -m 00644 *nvngx*.dll $installdir/%libdir%/nvidia/wine/. # Blacklist nouveau install -D -d -m 00755 $installdir/usr/lib64/modprobe.d echo "blacklist nouveau" > $installdir/usr/lib64/modprobe.d/nvidia.conf # Fixes Wayland sleep install -D -m 00644 $pkgfiles/nvidia-sleep.modprobe $installdir/usr/lib64/modprobe.d/nvidia-sleep.conf # Init install -D -m 00644 nvidia-persistenced-init/systemd/nvidia-persistenced.service.template \ $installdir/usr/lib64/systemd/system/nvidia-persistenced.service sed -e 's@__USER__@nvidia-persistenced@' -i $installdir/usr/lib64/systemd/system/nvidia-persistenced.service # Additional files install -D -m 00644 $pkgfiles/nvidia.rules $installdir/%libdir%/udev/rules.d/60-nvidia.rules install -D -m 00644 $pkgfiles/nvidia-glx-driver.tmpfiles $installdir/%libdir%/tmpfiles.d/nvidia-glx-driver.conf install -D -m 00644 $pkgfiles/nvidia-glx-driver.sysusers $installdir/%libdir%/sysusers.d/nvidia-glx-driver.conf install -D -m 00644 $pkgfiles/cmdline-nvidia.conf $installdir/usr/lib64/kernel/cmdline.d/40_nvidia.conf # new PM stuff install -D -m 00644 systemd/system/*.service -t $installdir/%libdir%/systemd/system install -D -m 00755 systemd/system-sleep/nvidia $installdir/%libdir%/systemd/system-sleep/nvidia install -D -m 00755 systemd/nvidia-sleep.sh $installdir/usr/bin/nvidia-sleep.sh # enable new PM stuff OOTB install -d -m 00755 $installdir/%libdir%/systemd/system/systemd-hibernate.service.wants ln -sv ../nvidia-hibernate.service $installdir/%libdir%/systemd/system/systemd-hibernate.service.wants/ ln -sv ../nvidia-resume.service $installdir/%libdir%/systemd/system/systemd-hibernate.service.wants/ install -d -m 00755 $installdir/%libdir%/systemd/system/systemd-suspend.service.wants ln -sv ../nvidia-suspend.service $installdir/%libdir%/systemd/system/systemd-suspend.service.wants/ ln -sv ../nvidia-resume.service $installdir/%libdir%/systemd/system/systemd-suspend.service.wants/ # Enable Dynamic Boost support OOTB. install -D -m 00755 nvidia-powerd $installdir/usr/bin/nvidia-powerd install -D -m 00644 nvidia-dbus.conf $installdir/usr/share/dbus-1/system.d/nvidia-dbus.conf install -d -m 00755 $installdir/%libdir%/systemd/system/multi-user.target.wants ln -sv ../nvidia-powerd.service $installdir/%libdir%/systemd/system/multi-user.target.wants/ # Make sure our glx is found, LDM will handle the main config file install -D -m 00644 $pkgfiles/xorg.conf $installdir/usr/share/X11/xorg.conf.d/10-nvidia.conf # install glxserver extension for xorg install -d $installdir/%libdir%/nvidia/modules mv $installdir/usr/lib64/libglxserver_nvidia.so* $installdir/%libdir%/nvidia/modules/ # Check for broken symlinks %symlink_check # Generate per-kernel initrd with embedded nvidia kernel drivers for i in current lts; do mkdir -p init-$i/dracut-nvidia # This file triggers a dracut service that regenerates the depmod index files touch init-$i/.dracut-depmod-invalidate pushd $installdir/usr/lib64/modules/*.$i find . -name "*.ko" -print -exec install -Dm0644 "{}" "${workdir}/init-$i/dracut-nvidia" \; popd # Strip the debug symobls (we can get them from the normal kernel modules). # Don't compress the kernel modules here so that the final archive is slightly smaller find init-$i -name '*.ko' -exec strip --verbose --strip-unneeded {} \; # Create the initrd pushd init-$i find . | cpio --create --format='newc' | zstd -19 > $workdir/initrd-$i # TODO Sign it popd done # Install it (do it here so that we don't copy this again during the second loop of the above for) kernel_current=%kernel_version_current% current_string="${kernel_current/.current}" install -D -m 00644 $workdir/initrd-current $installdir/usr/lib64/kernel/initrd-com.solus-project.current.$current_string.nvidia kernel_lts=%kernel_version_lts% lts_string="${kernel_lts/.lts}" install -D -m 00644 $workdir/initrd-lts $installdir/usr/lib64/kernel/initrd-com.solus-project.lts.$lts_string.nvidia # Generate single initrd (to be shared between current and lts) with the GSP firmware mkdir -p init-firmware/dracut-firmware-nvidia-proprietary && pushd init-firmware cp -rav $installdir/usr/lib64/firmware/nvidia/* dracut-firmware-nvidia-proprietary/ find . | cpio --create --format='newc' | zstd -19 > $workdir/initrd-firmware popd install -D -m 00644 $workdir/initrd-firmware $installdir/usr/lib64/kernel/initrd.d/com.solus-project.nvidia-firmware # Compress modules with zstd. TODO fix this so that we're able to capture the debug symbols (needs ypkg changes) find "$installdir" -name '*.ko' -exec strip --strip-unneeded {} \; -exec zstd -19 {} \; -exec rm -v {} \; # Usr-merge install -dm00755 $installdir/lib64 pushd $installdir/usr file_list=() while IFS= read -r -d $'\0'; do file_list+=("$REPLY") done < <(find lib64/modules -type f -print0) while IFS= read -r -d $'\0'; do file_list+=("$REPLY") done < <(find lib64/firmware -type f -print0) for file in "${file_list[@]}"; do parent=$(dirname "$file") install -dm00755 "$installdir/$parent" ln -srv "$installdir/usr/$file" "$installdir/$file" done popd