# This is the recipe.sh script. It is executed by BPM in a temporary directory when compiling a source package # BPM Expects the source code to be extracted into the automatically created 'source' directory which can be accessed using $BPM_SOURCE # BPM Expects the output files to be present in the automatically created 'output' directory which can be accessed using $BPM_OUTPUT # The prepare function is executed in the root of the temp directory # This function is used for putting downloaded files to the correct location or applying patches prepare() { # Get install script filename script=$(ls -1 NVIDIA-*.run | head -n1) # Extract files chmod +x "$script" ./"$script" --extract-only # Move files to $BPM_SOURCE mv "${script//.run/}"/* -t "$BPM_SOURCE" rm -r "${script//.run/}" } # The build function is executed in the source directory # This function is used to compile the source code package_nvidia-utils() { # Install X driver install -Dm755 nvidia_drv.so -t "$BPM_OUTPUT"/usr/lib/xorg/modules/drivers rm nvidia_drv.so # Install GLX client library install -Dm755 libGLX_nvidia* -t "$BPM_OUTPUT"/usr/lib # Install GLX extension module for X install -Dm755 libglxserver_nvidia* -t "$BPM_OUTPUT"/usr/lib/nvidia/xorg install -d "$BPM_OUTPUT"/usr/share/glvnd/egl_vendor.d install -d "$BPM_OUTPUT"/usr/share/egl/egl_external_platform.d install -m755 15_nvidia_gbm.json -t "$BPM_OUTPUT"/usr/share/egl/egl_external_platform.d install -d "$BPM_OUTPUT"/usr/lib/gbm ln -sf /usr/lib/libnvidia-allactor.so.${BPM_PKG_VERSION} "$BPM_OUTPUT"/usr/lib/gbm/nvidia-drm_gbm.so install -m755 10_nvidia.json "$BPM_OUTPUT"/usr/share/glvnd/egl_vendor.d install -m755 10_nvidia_wayland.json "$BPM_OUTPUT"/usr/share/egl/egl_external_platform.d # Install Vulkan core libraries install -Dm755 libEGL_nvidia* -t "$BPM_OUTPUT"/usr/lib install -Dm755 libGLESv1_CM_nvidia* -t "$BPM_OUTPUT"/usr/lib install -Dm755 libGLESv2_nvidia* -t "$BPM_OUTPUT"/usr/lib # Install nvidia libraries install -Dm755 libnvidia* -t "$BPM_OUTPUT"/usr/lib rm "$BPM_OUTPUT"/usr/lib/libnvidia-opencl.so* # Install GLX client libraries install -Dm755 libGLX_nvidia* -t "$BPM_OUTPUT"/usr/lib # Install VDPAU libraries install -Dm755 libvdpau_nvidia* -t "$BPM_OUTPUT"/usr/lib # Install CUDA libraries install -Dm755 libcuda* -t "$BPM_OUTPUT"/usr/lib install -Dm755 libnvcuvid* -t"$BPM_OUTPUT"/usr/lib # Install optix ray tracing engine install -Dm755 libnvoptix* -t "$BPM_OUTPUT"/usr/lib install -Dm755 nvoptix.bin -t "$BPM_OUTPUT"/usr/share/nvidia # Symlink libraries find "$BPM_OUTPUT" -type f -name '*.so*' ! -path '*xorg/*' -print0 | while read -d $'\0' _lib; do _soname=$(dirname "${_lib}")/$(readelf -d "${_lib}" | grep -Po 'SONAME.*: \[\K[^]]*' || true) _base=$(echo ${_soname} | sed -r 's/(.*)\.so.*/\1.so/') [[ -e "${_soname}" ]] || ln -s $(basename "${_lib}") "${_soname}" [[ -e "${_base}" ]] || ln -s $(basename "${_soname}") "${_base}" done ln -srf ../libnvidia-allactor.so.${BPM_PKG_VERSION} "$BPM_OUTPUT"/usr/lib/gbm/nvidia-drm_gbm.so ln -sf libglxserver_nvidia.so.${BPM_PKG_VERSION} "$BPM_OUTPUT"/usr/lib/nvidia/xorg/libglxserver_nvidia.so.1 ln -sf libglxserver_nvidia.so.${BPM_PKG_VERSION} "$BPM_OUTPUT"/usr/lib/nvidia/xorg/libglxserver_nvidia.so # Install firmware files for fw in gsp_ga10x.bin gsp_tu10x.bin; do install -Dm644 firmware/$fw -t "$BPM_OUTPUT"/usr/lib/firmware/nvidia/${BPM_PKG_VERSION} done # Vulkan icd install -Dm644 nvidia_icd.json -t "$BPM_OUTPUT"/usr/share/vulkan/icd.d # Install nvngx dll install -Dm755 _nvngx.dll -t "$BPM_OUTPUT"/usr/lib/nvidia/wine install -Dm755 nvngx.dll -t "$BPM_OUTPUT"/usr/lib/nvidia/wine # Install nvidia-powerd install -Dm644 "$BPM_WORKDIR"/nvidia-powerd.esv "$BPM_OUTPUT"/etc/esvm/services/nvidia-powerd.esv install -Dm644 nvidia-dbus.conf -t "$BPM_OUTPUT"/usr/share/dbus-1/system.d install -Dm755 "$BPM_WORKDIR"/nvidia-sleep.sh "$BPM_OUTPUT"/usr/libexec/system-sleep/nvidia.sh # Install nvidia-settings desktop file and icon sed -e 's|__UTILS_PATH__|/usr/bin|' \ -e 's|__PIXMAPTH_PATH__|/usr/share/pixmaps|' \ nvidia-settings.desktop | install -Dm644 /dev/stdin "$BPM_OUTPUT"/usr/share/applications/nvidia-settings.desktop install -Dm644 nvidia-settings.png -t "$BPM_OUTPUT"/usr/share/pixmaps # Install application profiles install -Dm644 nvidia-application-profiles-${BPM_PKG_VERSION}-key-documentation -t "$BPM_OUTPUT"/usr/share/nvidia install -Dm644 nvidia-application-profiles-${BPM_PKG_VERSION}-rc -t "$BPM_OUTPUT"/usr/share/nvidia # Install Xorg config for PRIME install -Dm644 "$BPM_WORKDIR"/nvidia-drm-outputclass.conf "$BPM_OUTPUT"/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf # Install binaries install -Dm755 nvidia-cuda-mps-control -t "$BPM_OUTPUT"/usr/bin install -Dm755 nvidia-cuda-mps-server -t "$BPM_OUTPUT"/usr/bin install -Dm755 nvidia-xconfig -t "$BPM_OUTPUT"/usr/bin install -Dm755 nvidia-settings -t "$BPM_OUTPUT"/usr/bin install -Dm755 nvidia-bug-report.sh "$BPM_OUTPUT"/usr/bin/nvidia-bug-report install -Dm755 nvidia-debugdump -t "$BPM_OUTPUT"/usr/bin install -Dm755 nvidia-smi -t "$BPM_OUTPUT"/usr/bin install -Dm4755 nvidia-modprobe -t "$BPM_OUTPUT"/usr/bin install -Dm755 nvidia-persistenced -t "$BPM_OUTPUT"/usr/bin install -Dm755 nvidia-powerd -t "$BPM_OUTPUT"/usr/bin install -Dm755 systemd/nvidia-sleep.sh -t "$BPM_OUTPUT"/usr/bin install -Dm755 nvidia-ngx-updater -t "$BPM_OUTPUT"/usr/bin install -Dm755 "$BPM_WORKDIR"/prime-run -t "$BPM_OUTPUT"/usr/bin # Install man pages zcat nvidia-cuda-mps-control.1.gz | install -Dm644 /dev/stdin "$BPM_OUTPUT"/usr/share/man/man1/nvidia-cuda-mps-control.1 zcat nvidia-xconfig.1.gz | install -Dm644 /dev/stdin "$BPM_OUTPUT"/usr/share/man/man1/nvidia-xconfig.1 zcat nvidia-settings.1.gz | install -Dm644 /dev/stdin "$BPM_OUTPUT"/usr/share/man/man1/nvidia-settings.1 zcat nvidia-smi.1.gz | install -Dm644 /dev/stdin "$BPM_OUTPUT"/usr/share/man/man1/nvidia-smi.1 zcat nvidia-modprobe.1.gz | install -Dm644 /dev/stdin "$BPM_OUTPUT"/usr/share/man/man1/nvidia-modprobe.1 zcat nvidia-persistenced.1.gz | install -Dm644 /dev/stdin "$BPM_OUTPUT"/usr/share/man/man1/nvidia-persistenced.1 # Install package license install -Dm644 "$BPM_SOURCE"/LICENSE "$BPM_OUTPUT"/usr/share/licenses/nvidia-utils/LICENSE } package_opencl-nvidia() { install -Dm755 libnvidia-opencl.so.${BPM_PKG_VERSION} -t "$BPM_OUTPUT"/usr/lib ln -sf libnvidia-opencl.so.${BPM_PKG_VERSION} "$BPM_OUTPUT"/usr/lib/libnvidia-opencl.so.1 ln -sf libnvidia-opencl.so.${BPM_PKG_VERSION} "$BPM_OUTPUT"/usr/lib/libnvidia-opencl.so install -Dm644 nvidia.icd -t "$BPM_OUTPUT"/etc/OpenCL/vendors install -Dm644 nvidia_layers.json -t "$BPM_OUTPUT"/usr/share/vulkan/implicit_layer.d # Install package license install -Dm644 "$BPM_SOURCE"/LICENSE "$BPM_OUTPUT"/usr/share/licenses/opencl-nvidia/LICENSE } package_nvidia-kernel-modules() { # Install dkms files install -d "$BPM_OUTPUT"/usr/src/nvidia-${BPM_PKG_VERSION} cp -r kernel-open/* "$BPM_OUTPUT"/usr/src/nvidia-${BPM_PKG_VERSION} sed -e "s/%VERSION%/${BPM_PKG_VERSION}/g" "$BPM_WORKDIR"/dkms.conf | install -Dm644 /dev/stdin "$BPM_OUTPUT"/usr/src/nvidia-${BPM_PKG_VERSION}/dkms.conf # Blacklist nouveau and nova modules install -d "$BPM_OUTPUT"/usr/lib/modprobe.d echo "blacklist nouveau" >> "$BPM_OUTPUT"/usr/lib/modprobe.d/nvidia.conf echo "blacklist nova_core" >> "$BPM_OUTPUT"/usr/lib/modprobe.d/nvidia.conf echo "blacklist nova_drm" >> "$BPM_OUTPUT"/usr/lib/modprobe.d/nvidia.conf # Install package license install -Dm644 "$BPM_SOURCE"/LICENSE "$BPM_OUTPUT"/usr/share/licenses/opencl-nvidia/LICENSE }