Skip to content

Add cuda 11.5.2 #196

Merged
merged 4 commits into from
Jun 15, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
174 changes: 174 additions & 0 deletions cuda-11.5.2-0.build.sh
Original file line number Diff line number Diff line change
@@ -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 </dev/null

mkdir -p $PREFIX
cat >$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