|  | #!/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 '######################################################################' |