Skip to content

Instantly share code, notes, and snippets.

@eyecreate
Created July 30, 2018 02:37
Show Gist options
  • Save eyecreate/36c8a34addc24dce2742c43efd753d22 to your computer and use it in GitHub Desktop.
Save eyecreate/36c8a34addc24dce2742c43efd753d22 to your computer and use it in GitHub Desktop.
nvidia 396.45 package build script for Solus
name : nvidia-glx-driver
version : '396.45'
release : 253
source :
- http://us.download.nvidia.com/XFree86/Linux-x86_64/396.45/NVIDIA-Linux-x86_64-396.45.run : 30c2e29a45794227079730eac7c452da5290ea8f336ed2286dafd488e3695f20
extract : no
homepage : https://nvidia.com
license :
- EULA
summary :
- NVIDIA Binary Driver (LTS Kernel)
- common : Shared assets for the NVIDIA GLX Driver
- current : NVIDIA Binary Driver (Current Kernel)
- modaliases : Files to help with DoFlicky driver detection
component :
- kernel.drivers
- common : xorg.driver
- current : kernel.drivers
- modaliases : kernel.drivers
- 32bit : xorg.driver
description: |
NVIDIA Binary Driver
rundeps :
- common :
- linux-driver-management
- libva-vdpau-driver
- egl-wayland
- libglvnd
- 32bit :
- nvidia-glx-driver-common
- libva-vdpau-driver-32bit
- libglvnd-32bit
- main : nvidia-glx-driver-common
- current : nvidia-glx-driver-common
conflicts :
- common :
- nvidia-304-glx-driver-common
- nvidia-340-glx-driver-common
patterns :
- common : /*
- modaliases :
- /usr/share/doflicky/modaliases
- /usr/share/linux-driver-management/modaliases
- 32bit : /usr/lib32
- main : /lib/modules/*.lts
- current : /lib/modules/*.current
strip : no
debug : no
builddeps :
- pkgconfig(gtk+-2.0)
- pkgconfig(gtk+-3.0)
- pkgconfig(libelf)
- pkgconfig(xorg-server)
- linux-lts
- linux-lts-headers
- linux-current
- linux-current-headers
- libglvnd-32bit
permanent :
- /lib/modules
setup : |
# sh $sources/NVIDIA-Linux-x86_64-$version.run --extract-only
sh $sources/NVIDIA-Linux-x86_64-$version.run --extract-only
pushd NVIDIA*
# Prepare kernel trees
cp -a kernel lts_kernel
cp -a kernel current_kernel
# Patch for 4.14
pushd current_kernel
%patch -p2 < $pkgfiles/4.14_task.patch
popd
# 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/lib/modules/%kernel_version_lts%/kernel/drivers/video
install -m 00644 lts_kernel/*.ko $installdir/lib/modules/%kernel_version_lts%/kernel/drivers/video/.
# Install current kernel drivers
install -D -d -m 00755 $installdir/lib/modules/%kernel_version_current%/kernel/drivers/video
install -m 00644 current_kernel/*.ko $installdir/lib/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
# Install all libraries
install -D -d -m 00755 $installdir/usr/lib{32,64}
install -m 00755 lib*.so* $installdir/%libdir%/.
install -m 00755 tls/lib*.so* $installdir/%libdir%/.
install -m 00755 32/lib*.so* $installdir/usr/lib32/.
install -m 00755 32/tls/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*}
# Get weird guys in order first
ln -sv libGLESv2_nvidia.so.${version} $installdir/%libdir%/libGLESv2_nvidia.so.2
ln -sv libGLESv2_nvidia.so.${version} $installdir/usr/lib32/libGLESv2_nvidia.so.2
ln -sv libGLX_nvidia.so.${version} $installdir/%libdir%/libGLX_nvidia.so.0
ln -sv libGLX_nvidia.so.${version} $installdir/usr/lib32/libGLX_nvidia.so.0
function redo_libs() {
for gl in $* ; do
i=`dirname ${gl}`
clean=`echo $(basename ${gl})|sed -e 's@\.so\.%version%@@g'`
if [[ ! -e $i/${clean}.so.2 ]] ; then
if [[ ! -e $i/${clean}.so.1 ]] && [[ ! -e $i/${clean}.so.0 ]] ; then
ln -sv `basename ${gl}` $i/${clean}.so.1
fi
fi
if [[ ! -e $i/{clean}.so ]]; then
ln -sv `basename ${gl}` $i/${clean}.so
fi
done
}
redo_libs $installdir/usr/lib64/lib*.so.%version%
redo_libs $installdir/usr/lib32/lib*.so.%version%
# Remove the non glvnd portions
rm -v $installdir/{%libdir%,/usr/lib32}/lib{EGL,GL,GLESv1_CM,GLESv2}.so*
rm -v $installdir/%libdir%/libglx.so*
# 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@' -e 's@__PIXMAP_PATH__@/usr/share/pixmaps@' -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
# Vulkan
install -D -m 00644 nvidia_icd.json.template $installdir/usr/share/vulkan/icd.d/10_nvidia.json
sed -e 's@__NV_VK_ICD__@libGLX_nvidia.so.0@' -i $installdir/usr/share/vulkan/icd.d/10_nvidia.json
# EGL
install -D -m 00644 10_nvidia_wayland.json $installdir/usr/share/egl/egl_external_platform.d/10_nvidia_wayland.json
install -D -m 00644 10_nvidia.json $installdir/usr/share/egl/egl_external_platform.d/10_nvidia.json
# Make sure glvnd knows where to be
install -D -d -m 00755 $installdir/usr/share/glvnd/egl_vendor.d
install -m 00644 10_nvidia_wayland.json $installdir/usr/share/glvnd/egl_vendor.d/10_nvidia_wayland.json
install -m 00644 10_nvidia.json $installdir/usr/share/glvnd/egl_vendor.d/10_nvidia.json
# Keep settings UI happy
install -D -d -m 00755 $installdir/usr/share/nvidia
install -m 00644 nvidia-application-profiles-${version}-key-documentation $installdir/usr/share/nvidia/.
# Blacklist nouveau
install -D -d -m 00755 $installdir/usr/lib/modprobe.d
echo "blacklist nouveau" > $installdir/usr/lib/modprobe.d/nvidia.conf
# Init
install -D -m 00644 nvidia-persistenced-init/systemd/nvidia-persistenced.service.template \
$installdir/usr/lib/systemd/system/nvidia-persistenced.service
sed -e 's@__USER__@nvidia-persistenced@' -i $installdir/usr/lib/systemd/system/nvidia-persistenced.service
# Additional files
install -D -m 00644 $pkgfiles/71-nvidia.rules $installdir/%libdir%/udev/rules.d/71-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 00755 $pkgfiles/create-uvm-dev-node $installdir/sbin/create-uvm-dev-node
# 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 -D -m 00644 libglx.so.${version} $installdir/%libdir%/nvidia/modules/libglx.so
ln -sv libglx.so $installdir/%libdir%/nvidia/modules/libglx.so.1
# Nuke egl wayland conflict, we package it separately
rm -fv $installdir/%libdir%/libnvidia-egl-wayland*
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment