Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1if [ -e .attrs.sh ]; then source .attrs.sh; fi 2source $stdenv/setup 3 4unpackManually() { 5 skip=$(sed 's/^skip=//; t; d' $src) 6 tail -n +$skip $src | bsdtar xvf - 7 sourceRoot=. 8} 9 10 11unpackFile() { 12 sh $src -x || unpackManually 13} 14 15 16buildPhase() { 17 if [ -n "$bin" ]; then 18 # Create the module. 19 echo "Building linux driver against kernel: $kernel"; 20 cd kernel 21 unset src # used by the nv makefile 22 make $makeFlags -j $NIX_BUILD_CORES module 23 24 cd .. 25 fi 26} 27 28 29installPhase() { 30 # Install libGL and friends. 31 32 # since version 391, 32bit libraries are bundled in the 32/ sub-directory 33 if [ "$i686bundled" = "1" ]; then 34 mkdir -p "$lib32/lib" 35 cp -prd 32/*.so.* "$lib32/lib/" 36 if [ -d 32/tls ]; then 37 cp -prd 32/tls "$lib32/lib/" 38 fi 39 fi 40 41 mkdir -p "$out/lib" 42 cp -prd *.so.* "$out/lib/" 43 if [ -d tls ]; then 44 cp -prd tls "$out/lib/" 45 fi 46 47 # Install systemd power management executables 48 if [ -e systemd/nvidia-sleep.sh ]; then 49 mv systemd/nvidia-sleep.sh ./ 50 fi 51 if [ -e nvidia-sleep.sh ]; then 52 sed -E 's#(PATH=).*#\1"$PATH"#' nvidia-sleep.sh > nvidia-sleep.sh.fixed 53 install -Dm755 nvidia-sleep.sh.fixed $out/bin/nvidia-sleep.sh 54 fi 55 56 if [ -e systemd/system-sleep/nvidia ]; then 57 mv systemd/system-sleep/nvidia ./ 58 fi 59 if [ -e nvidia ]; then 60 sed -E "s#/usr(/bin/nvidia-sleep.sh)#$out\\1#" nvidia > nvidia.fixed 61 install -Dm755 nvidia.fixed $out/lib/systemd/system-sleep/nvidia 62 fi 63 64 for i in $lib32 $out; do 65 rm -f $i/lib/lib{glx,nvidia-wfb}.so.* # handled separately 66 rm -f $i/lib/libnvidia-gtk* # built from source 67 if [ "$useGLVND" = "1" ]; then 68 # Pre-built libglvnd 69 rm $i/lib/lib{GL,GLX,EGL,GLESv1_CM,GLESv2,OpenGL,GLdispatch}.so.* 70 fi 71 # Use ocl-icd instead 72 rm -f $i/lib/libOpenCL.so* 73 # Move VDPAU libraries to their place 74 mkdir $i/lib/vdpau 75 mv $i/lib/libvdpau* $i/lib/vdpau 76 77 # Install ICDs, make absolute paths. 78 # Be careful not to modify any original files because this runs twice. 79 80 # OpenCL 81 sed -E "s#(libnvidia-opencl)#$i/lib/\\1#" nvidia.icd > nvidia.icd.fixed 82 install -Dm644 nvidia.icd.fixed $i/etc/OpenCL/vendors/nvidia.icd 83 84 # Vulkan 85 if [ -e nvidia_icd.json.template ] || [ -e nvidia_icd.json ]; then 86 if [ -e nvidia_icd.json.template ]; then 87 # template patching for version < 435 88 sed "s#__NV_VK_ICD__#$i/lib/libGLX_nvidia.so#" nvidia_icd.json.template > nvidia_icd.json.fixed 89 else 90 sed -E "s#(libGLX_nvidia)#$i/lib/\\1#" nvidia_icd.json > nvidia_icd.json.fixed 91 fi 92 93 # nvidia currently only supports x86_64 and i686 94 if [ "$i" == "$lib32" ]; then 95 install -Dm644 nvidia_icd.json.fixed $i/share/vulkan/icd.d/nvidia_icd.i686.json 96 else 97 install -Dm644 nvidia_icd.json.fixed $i/share/vulkan/icd.d/nvidia_icd.x86_64.json 98 fi 99 fi 100 101 if [ -e nvidia_layers.json ]; then 102 sed -E "s#(libGLX_nvidia)#$i/lib/\\1#" nvidia_layers.json > nvidia_layers.json.fixed 103 install -Dm644 nvidia_layers.json.fixed $i/share/vulkan/implicit_layer.d/nvidia_layers.json 104 fi 105 106 # EGL 107 if [ "$useGLVND" = "1" ]; then 108 sed -E "s#(libEGL_nvidia)#$i/lib/\\1#" 10_nvidia.json > 10_nvidia.json.fixed 109 sed -E "s#(libnvidia-egl-wayland)#$i/lib/\\1#" 10_nvidia_wayland.json > 10_nvidia_wayland.json.fixed 110 111 install -Dm644 10_nvidia.json.fixed $i/share/glvnd/egl_vendor.d/10_nvidia.json 112 install -Dm644 10_nvidia_wayland.json.fixed $i/share/egl/egl_external_platform.d/10_nvidia_wayland.json 113 114 if [[ -f "15_nvidia_gbm.json" ]]; then 115 sed -E "s#(libnvidia-egl-gbm)#$i/lib/\\1#" 15_nvidia_gbm.json > 15_nvidia_gbm.json.fixed 116 install -Dm644 15_nvidia_gbm.json.fixed $i/share/egl/egl_external_platform.d/15_nvidia_gbm.json 117 118 mkdir -p $i/lib/gbm 119 ln -s $i/lib/libnvidia-allocator.so $i/lib/gbm/nvidia-drm_gbm.so 120 fi 121 fi 122 123 # Install libraries needed by Proton to support DLSS 124 if [ -e nvngx.dll ] && [ -e _nvngx.dll ]; then 125 install -Dm644 -t $i/lib/nvidia/wine/ nvngx.dll _nvngx.dll 126 fi 127 128 if [ -e nvoptix.bin ]; then 129 install -Dm444 -t $i/share/nvidia/ nvoptix.bin 130 fi 131 done 132 133 if [ -n "$bin" ]; then 134 # Install the X drivers. 135 mkdir -p $bin/lib/xorg/modules 136 if [ -f libnvidia-wfb.so ]; then 137 cp -p libnvidia-wfb.* $bin/lib/xorg/modules/ 138 fi 139 mkdir -p $bin/lib/xorg/modules/drivers 140 cp -p nvidia_drv.so $bin/lib/xorg/modules/drivers 141 mkdir -p $bin/lib/xorg/modules/extensions 142 cp -p libglx*.so* $bin/lib/xorg/modules/extensions 143 144 # Install the kernel module. 145 mkdir -p $bin/lib/modules/$kernelVersion/misc 146 for i in $(find ./kernel -name '*.ko'); do 147 nuke-refs $i 148 cp $i $bin/lib/modules/$kernelVersion/misc/ 149 done 150 151 # Install application profiles. 152 if [ "$useProfiles" = "1" ]; then 153 mkdir -p $bin/share/nvidia 154 cp nvidia-application-profiles-*-rc $bin/share/nvidia/nvidia-application-profiles-rc 155 cp nvidia-application-profiles-*-key-documentation $bin/share/nvidia/nvidia-application-profiles-key-documentation 156 fi 157 fi 158 159 if [ -n "$firmware" ]; then 160 # Install the GSP firmware 161 install -Dm644 -t $firmware/lib/firmware/nvidia/$version firmware/gsp*.bin 162 fi 163 164 # All libs except GUI-only are installed now, so fixup them. 165 for libname in $(find "$out/lib/" $(test -n "$lib32" && echo "$lib32/lib/") $(test -n "$bin" && echo "$bin/lib/") -name '*.so.*') 166 do 167 # I'm lazy to differentiate needed libs per-library, as the closure is the same. 168 # Unfortunately --shrink-rpath would strip too much. 169 if [[ -n $lib32 && $libname == "$lib32/lib/"* ]]; then 170 patchelf --set-rpath "$lib32/lib:$libPath32" "$libname" 171 else 172 patchelf --set-rpath "$out/lib:$libPath" "$libname" 173 fi 174 175 libname_short=`echo -n "$libname" | sed 's/so\..*/so/'` 176 177 if [[ "$libname" != "$libname_short" ]]; then 178 ln -srnf "$libname" "$libname_short" 179 fi 180 181 if [[ $libname_short =~ libEGL.so || $libname_short =~ libEGL_nvidia.so || $libname_short =~ libGLX.so || $libname_short =~ libGLX_nvidia.so ]]; then 182 major=0 183 else 184 major=1 185 fi 186 187 if [[ "$libname" != "$libname_short.$major" ]]; then 188 ln -srnf "$libname" "$libname_short.$major" 189 fi 190 done 191 192 if [ -n "$bin" ]; then 193 # Install /share files. 194 mkdir -p $bin/share/man/man1 195 cp -p *.1.gz $bin/share/man/man1 196 rm -f $bin/share/man/man1/{nvidia-xconfig,nvidia-settings,nvidia-persistenced}.1.gz 197 198 # Install the programs. 199 for i in nvidia-cuda-mps-control nvidia-cuda-mps-server nvidia-smi nvidia-debugdump; do 200 if [ -e "$i" ]; then 201 install -Dm755 $i $bin/bin/$i 202 # unmodified binary backup for mounting in containers 203 install -Dm755 $i $bin/origBin/$i 204 patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ 205 --set-rpath $out/lib:$libPath $bin/bin/$i 206 fi 207 done 208 # FIXME: needs PATH and other fixes 209 # install -Dm755 nvidia-bug-report.sh $bin/bin/nvidia-bug-report.sh 210 fi 211} 212 213genericBuild