diff --git a/cuda-11.5.2-0.build.sh b/cuda-11.5.2-0.build.sh new file mode 100755 index 0000000..b90a801 --- /dev/null +++ b/cuda-11.5.2-0.build.sh @@ -0,0 +1,174 @@ +#! /bin/bash + +# COOKIE=$(mcookie|cut -c-8); grep -v V_GREP_ME $0 > /dev/shm/runme-$COOKIE.sh ; sleep 0.3; exec bash /dev/shm/runme-$COOKIE.sh +# TESTING=1 + +PKG=cuda +MAJOR=11.5 +MINOR=2 +VERSION=$MAJOR.$MINOR +BUILD=0 +DRIVERVERSION=495.29.05 +CUDAFILE=cuda_${VERSION}_${DRIVERVERSION}_linux.run + +CUDNNVER=8.3.3.40 +CUDNNFILE=cudnn-linux-x86_64-${CUDNNVER}_cuda$MAJOR-archive.tar.xz + +TENSORRTVER=8.4.0.6 +TENSORRTFILE=TensorRT-$TENSORRTVER.Linux.x86_64-gnu.cuda-11.6.cudnn8.3.tar.gz + +NCCLVER=2.11.4-1 +NCCLFILE=nccl_$NCCLVER+cuda${MAJOR}_x86_64.txz + +PREFIX=/pkg/$PKG-$VERSION-$BUILD +if [ -n "$TESTING" ]; then PREFIX=/dev/shm/$PKG-$VERSION-$BUILD ; fi + +set -e +umask 022 + +# make sure we are not run as root, otherwise the cuda-installer will certainly screw up the machine +test $UID = 0 && echo '# Will not run as root!' && exit 1 + +# this will turn out as showstopper if owned by somebody else, thus fail early... +rm -vf /tmp/cuda-installer.log + +# be carefull on machines with 8Gig and less +BUILD_TMPDIR=/dev/shm/$PKG-$VERSION-$BUILD.build.tmp +test -d $BUILD_TMPDIR && rm -rf $BUILD_TMPDIR +mkdir -p $BUILD_TMPDIR/home +mkdir -p $BUILD_TMPDIR/.local/share/applications +export TMPDIR=$BUILD_TMPDIR +export HOME=$BUILD_TMPDIR/home + +exec $PREFIX/profile <<-EOF + PATH=$PREFIX/bin:\$PATH + export CUDA_PATH=$PREFIX + LD_LIBRARY_PATH=$PREFIX/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH + if [ -d $PREFIX/.compatlibs ]; then LD_LIBRARY_PATH=$PREFIX/.compatlibs:\$LD_LIBRARY_PATH; fi + export LD_LIBRARY_PATH + PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig\${PKG_CONFIG_PATH:+:}\$PKG_CONFIG_PATH + export PKG_CONFIG_PATH +EOF +. $PREFIX/profile + +cd $PREFIX +BUILDDIR=$PREFIX/build + +mkdir -p $BUILDDIR +cd $BUILDDIR + + +echo "# Working on: $CUDAFILE" +test -e $CUDAFILE || cp -vp /package/cuda/src/$CUDAFILE . + +# $PREFIX/cuda_tmp_dir: this is owed to the demented cuda installer, which happily fails with +# "Unable to write to directory: /pkg", "Permission denied. Unable to write to /pkg/cuda-11.0.3-0/" - what? +# OTOH the installer bundles its libraries and includes a bit better than before +bash $CUDAFILE \ + --installpath=$PREFIX/cuda_tmp_dir \ + --tmpdir=$TMPDIR \ + --toolkit \ + --samples \ + --silent \ + --nox11 + +### reorganize the tree a bit ### +cd $PREFIX/cuda_tmp_dir + +# fix pc-files (step one) +sed \ + -e '/^cudaroot/ s,/cuda_tmp_dir,,' \ + -i pkgconfig/*.pc + + +# Maybe nsight is of some use, keep it +mv nsight* extras + +# Sanitizer is now at toplevel, put it back to the former location +mv compute-sanitizer extras + +# stuff some of the other 'extras' into 'share', but keep +# - nvvm (nvidia virtual machine, see bin/nvcc.profile) +# - extras (or tensorflow would need extra tweaks, nerve) +mkdir -p share/doc +mv libnvvp nvml tools share + +# fall back to decent locations for lib and include, the other packages do just as different as possible +rm include lib64 +mv targets/x86_64-linux/* . +rm -r targets + +mv pkgconfig lib +# and fix the pc files (step two) +sed \ + -e '/^cudaroot/ s,/$,,' \ + -e 's,/targets/x86_64-linux,,' \ + -i lib/pkgconfig/*.pc + +# adjust nvcc.profile for TARGET_DIR and TARGET_SIZE +sed -e 's,$(_TARGET_SIZE_),,g' \ + -e 's,/$(_TARGET_DIR_),,g' \ + -i bin/nvcc.profile + + +# we don't need this distro aware handler for finding glut & co +for D in $(find -name findgllib.mk -exec dirname {} \;) ; do + test -e $D/Makefile && sed -i -e '/findgllib.mk/ s/include/# include/' $D/Makefile +done + +# and up one level +mv -v * .. ; cd .. ; rmdir cuda_tmp_dir + + +### LIBRARIES ### https://developer.nvidia.com/gpu-accelerated-libraries + +# cudNN +cd $BUILDDIR + +echo "# Working on: $CUDNNFILE" +test -e $CUDNNFILE || cp -vp /package/cuda/src/$CUDNNFILE . +mkdir -p cudnn +cd cudnn +tar -xf ../$CUDNNFILE + +ARCHDIR=${CUDNNFILE%.tar.xz} +mv $ARCHDIR/include/cudnn*.h $PREFIX/include +mv $ARCHDIR/lib/libcudnn* $PREFIX/lib + +# TensorRT +cd $BUILDDIR + +echo "# Working on: $TENSORRTFILE" +test -e $TENSORRTFILE || cp -vp /package/cuda/src/$TENSORRTFILE . +mkdir -p TensorRT +cd TensorRT +tar -xf ../$TENSORRTFILE +mv TensorRT-$TENSORRTVER/bin/* $PREFIX/bin +mv TensorRT-$TENSORRTVER/include/* $PREFIX/include +mv TensorRT-$TENSORRTVER/lib/stubs/* $PREFIX/lib/stubs +rmdir TensorRT-$TENSORRTVER/lib/stubs +mv TensorRT-$TENSORRTVER/lib/* $PREFIX/lib + +# nccl - aka 'nickel' +cd $BUILDDIR + +echo "# Working on: $NCCLFILE" +test -e $NCCLFILE || cp -vp /package/cuda/src/$NCCLFILE . +mkdir -p nccl +cd nccl +tar -xf ../$NCCLFILE +mv nccl_$NCCLVER+cuda${MAJOR}_x86_64/include/* $PREFIX/include +mv nccl_$NCCLVER+cuda${MAJOR}_x86_64/lib/lib* $PREFIX/lib +# and here we have a pkgconfig too :) +sed -e "/^prefix/ s,/usr/local,$PREFIX," -i nccl_$NCCLVER+cuda${MAJOR}_x86_64/lib/pkgconfig/nccl.pc +mv nccl_$NCCLVER+cuda${MAJOR}_x86_64/lib/pkgconfig/nccl.pc $PREFIX/lib/pkgconfig +mv nccl_$NCCLVER+cuda${MAJOR}_x86_64/LICENSE.txt $PREFIX/share/doc/nccl_LICENSE.txt + +# cosmetics ... +chmod -c -x $PREFIX/include/*.{h,hpp} +test -e /tmp/cuda-installer.log && mv -v /tmp/cuda-installer.log $PREFIX + +exit