#!/bin/bash # This script installs CCache with CUDA support. # Example usage: # ./ccache_setup.sh --path /installed/folder set -e shopt -s expand_aliases # Setup the proxy alias with_proxy="HTTPS_PROXY=http://fwdproxy:8080 HTTP_PROXY=http://fwdproxy:8080 FTP_PROXY=http://fwdproxy:8080 https_proxy=http://fwdproxy:8080 http_proxy=http://fwdproxy:8080 ftp_proxy=http://fwdproxy:8080 http_no_proxy='*.facebook.com|*.tfbnw.net|*.fb.com'" # Parse options path="$HOME/ccache" force=false while [[ $# -gt 0 ]]; do case "$1" in --path) shift path="$1" path=$(realpath "$path") ;; --force) # Force install force=true ;; --help) echo 'usage: ./ccache_setup.py --path /installed/folder [--force]' exit 0 ;; *) echo "Invalid option: $1" exit 1 ;; esac shift done # Check whether you put nvcc in PATH set +e nvcc_path=$(which nvcc) if [[ -z "$nvcc_path" ]]; then nvcc_path="/usr/local/cuda/bin/nvcc" export PATH="/usr/local/cuda/bin:$PATH" fi set -e if [ ! -f "$nvcc_path" ] && ! $force; then # shellcheck disable=SC2016 echo 'nvcc is not detected in $PATH' exit 1 fi echo "nvcc is detected at $nvcc_path" if [ -f "$CUDA_NVCC_EXECUTABLE" ] && [[ "$CUDA_NVCC_EXECUTABLE" == *"ccache"* ]]; then # Heuristic rule if $CUDA_NVCC_EXECUTABLE --version; then if ! $force; then echo "CCache with nvcc support is already installed at $CUDA_NVCC_EXECUTABLE, please add --force" exit 0 fi fi fi # Installing CCache echo "CCache will be installed at $path" if [ -e "$path" ]; then mv --backup=t -T "$path" "${path}.old" fi with_proxy git clone https://github.com/colesbury/ccache.git "$path" -b ccbin cd "$path" ./autogen.sh ./configure make install prefix="$path" mkdir -p "$path/lib" mkdir -p "$path/cuda" ln -sf "$path/bin/ccache" "$path/lib/cc" ln -sf "$path/bin/ccache" "$path/lib/c++" ln -sf "$path/bin/ccache" "$path/lib/gcc" ln -sf "$path/bin/ccache" "$path/lib/g++" ln -sf "$path/bin/ccache" "$path/cuda/nvcc" "$path/bin/ccache" -M 25Gi # Make sure the nvcc wrapped in CCache is runnable "$path/cuda/nvcc" --version echo 'Congrats! The CCache with nvcc support is installed!' echo -e "Please add the following lines to your bash init script:\\n" echo "################ Env Var for CCache with CUDA support ################" # shellcheck disable=SC2016 echo 'export PATH="'"$path"'/lib:$PATH"' echo 'export CUDA_NVCC_EXECUTABLE="'"$path"'/cuda/nvcc"' echo '######################################################################'