Skip to content

Instantly share code, notes, and snippets.

@sugarme
Created April 14, 2021 12:15
Show Gist options
  • Save sugarme/53805b2d030ee9023e56ec366dff7fbe to your computer and use it in GitHub Desktop.
Save sugarme/53805b2d030ee9023e56ec366dff7fbe to your computer and use it in GitHub Desktop.
#!/bin/bash
GOTCH_VERSION="${GOTCH_VER:-v0.3.8}"
CUDA_VERSION="${CUDA_VER:-10.1}"
GOTCH_PATH="$GOPATH/pkg/mod/github.com/sugarme/gotch@$GOTCH_VERSION"
# Install gotch
#==============
echo "GOPATH:'$GOPATH'"
echo "GOTCH_VERSION: '$GOTCH_VERSION'"
echo "CUDA_VERSION: '$CUDA_VERSION'"
cwd=$(pwd)
GOTCH_TEST_DIR="/tmp/gotch-test"
if [ -d $GOTCH_TEST_DIR ]; then
sudo rm -rf $GOTCH_TEST_DIR
fi
mkdir $GOTCH_TEST_DIR
cd $GOTCH_TEST_DIR
go mod init "github.com/sugarme/gotch-test"
go get -d "github.com/sugarme/gotch@$GOTCH_VERSION"
rm -rf $GOTCH_TEST_DIR
cd $cwd
# Setup gotch for CUDA or non-CUDA device:
#=========================================
DUMMY_CUDA_FILE="$GOTCH_PATH/libtch/dummy_cuda_dependency.cpp"
# Check and delete old file if existing
if [ -f $DUMMY_CUDA_FILE ]
then
echo "$DUMMY_CUDA_FILE existing. Deleting..."
sudo rm $DUMMY_CUDA_FILE
fi
GOTCH_LIB_FILE="$GOTCH_PATH/libtch/lib.go"
if [ -f $GOTCH_LIB_FILE ]
then
echo "$GOTCH_LIB_FILE existing. Deleting..."
sudo rm $GOTCH_LIB_FILE
fi
# Create files for CUDA or non-CUDA device
if [ $CUDA_VERSION == "cpu" ]; then
echo "creating $DUMMY_CUDA_FILE for CPU"
sudo tee -a $DUMMY_CUDA_FILE > /dev/null <<EOT
extern "C" {
void dummy_cuda_dependency();
}
void dummy_cuda_dependency() {}
EOT
echo "creating $GOTCH_LIB_FILE for CPU"
sudo tee -a $GOTCH_LIB_FILE > /dev/null <<EOT
package libtch
// #cgo CFLAGS: -I${SRCDIR} -O3 -Wall -Wno-unused-variable -Wno-deprecated-declarations -Wno-c++11-narrowing -g -Wno-sign-compare -Wno-unused-function
// #cgo CFLAGS: -I/usr/local/include
// #cgo CFLAGS: -D_GLIBCXX_USE_CXX11_ABI=1
// #cgo LDFLAGS: -lstdc++ -ltorch -lc10 -ltorch_cpu -L/lib64
// #cgo CXXFLAGS: -std=c++17 -I${SRCDIR} -g -O3
// #cgo CFLAGS: -I${SRCDIR}/libtorch/lib -I${SRCDIR}/libtorch/include -I${SRCDIR}/libtorch/include/torch/csrc/api/include -I${SRCDIR}/libtorch/include/torch/csrc
// #cgo LDFLAGS: -L${SRCDIR}/libtorch/lib
// #cgo CXXFLAGS: -I${SRCDIR}/libtorch/lib -I${SRCDIR}/libtorch/include -I${SRCDIR}/libtorch/include/torch/csrc/api/include -I${SRCDIR}/libtorch/include/torch/csrc
import "C"
EOT
else
echo "creating $DUMMY_CUDA_FILE for GPU"
sudo tee -a $DUMMY_CUDA_FILE > /dev/null <<EOT
extern "C" {
void dummy_cuda_dependency();
}
namespace at {
namespace cuda {
int warp_size();
}
}
void dummy_cuda_dependency() {
at::cuda::warp_size();
}
EOT
echo "creating $GOTCH_LIB_FILE for GPU"
sudo tee -a $GOTCH_LIB_FILE > /dev/null <<EOT
package libtch
// #cgo LDFLAGS: -lstdc++ -ltorch -lc10 -ltorch_cpu
// #cgo LDFLAGS: -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcudnn -lcaffe2_nvrtc -lnvrtc-builtins -lnvrtc -lnvToolsExt -lc10_cuda -ltorch_cuda
// #cgo CFLAGS: -I${SRCDIR} -O3 -Wall -Wno-unused-variable -Wno-deprecated-declarations -Wno-c++11-narrowing -g -Wno-sign-compare -Wno-unused-function
// #cgo CFLAGS: -D_GLIBCXX_USE_CXX11_ABI=1
// #cgo CFLAGS: -I/usr/local/cuda/include
// #cgo CXXFLAGS: -std=c++17 -I${SRCDIR} -g -O3
import "C"
EOT
fi
sudo ldconfig
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment