Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
executable file 173 lines (137 sloc) 4.98 KB
#! /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.1
MINOR=1
VERSION=$MAJOR.$MINOR
BUILD=0
DRIVERVERSION=455.32.00
CUDNNVER=8.0.4.30
CUDNNFILE=cudnn-$MAJOR-linux-x64-v$CUDNNVER.tgz
TENSORRTVER=7.2.1.6
TENSORRTFILE=TensorRT-$TENSORRTVER.Ubuntu-18.04.x86_64-gnu.cuda-$MAJOR.cudnn8.0.tar.gz
NCCLVER=2.7.8-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
# https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda_11.0.3_450.51.06_linux.run
INSTALLFILE=cuda_${VERSION}_${DRIVERVERSION}_linux.run
URL=https://developer.download.nvidia.com/compute/cuda/$VERSION/local_installers/$INSTALLFILE
# in case it was downloaded before
if [ ! -e $INSTALLFILE -a -e /package/cuda/src/$INSTALLFILE ]; then
cp -vp /package/cuda/src/$INSTALLFILE $INSTALLFILE
fi
if [ ! -e $INSTALLFILE ]; then
wget $URL
fi
# $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 $INSTALLFILE \
--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
# cudNN
cd $BUILDDIR
test -e $CUDNNFILE || cp /package/cuda/src/$CUDNNFILE .
mkdir -p cudnn
cd cudnn
tar -xf ../$CUDNNFILE
mv cuda/include/cudnn*.h $PREFIX/include
mv cuda/lib64/libcudnn* $PREFIX/lib
mv cuda/NVIDIA_SLA_cuDNN_Support.txt $PREFIX/share/doc
# TensorRT
cd $BUILDDIR
test -e $TENSORRTFILE || cp /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
test -e $NCCLFILE || cp /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