Files
UltraGrid/data/scripts/add_cl_if_not_present.sh
2022-09-13 16:36:35 +02:00

49 lines
2.1 KiB
Bash

# shellcheck shell=sh
## This file tries to find cl.exe by using vswhere if nvcc was found in $PATH. This
## is a prerequisity in MSW. Does nothing if cl.exe already in $PATH or given explicitly
## by --with-cuda-host-compiler (obviously also when not in MSW or there is not CUDA).
##
## @note
## This file works with parses arguments passed autogen.sh if the path for cl.exe
## was not given explicitly. Thus it must be sourced by autogen.sh, not executed.
if [ -z "$ORIGDIR" ]; then
echo "Source this file from autogen.sh, not call!"
exit 1
fi
# find MSVC if CUDA is present but no cl in PATH, don't override --with-cuda-host-compiler if explicit
cuda_host_compiler_arg_present() {
while expr $# \> 0 >/dev/null; do
if expr "x$1" : x--with-cuda-host-compiler >/dev/null; then
echo yes
fi
shift
done
echo no
}
is_win() {
SYS=$(uname -s)
if expr "$SYS" : "MSYS" >/dev/null; then
echo yes
fi
echo no
}
is_cuda_host_compiler_arg_present=$(cuda_host_compiler_arg_present "$@")
if [ "$(is_win)" = "yes" ] && [ "$is_cuda_host_compiler_arg_present" = no ]; then
CUDA_PRESENT=$(command -v nvcc >/dev/null && echo yes || echo no)
CL_PRESENT=$(command -v cl >/dev/null && echo yes || echo no)
if [ "$CUDA_PRESENT" = yes ] && [ "$CL_PRESENT" = no ]; then
VSWHERE="/c/Program Files (x86)/Microsoft Visual Studio/Installer/vswhere.exe"
INSTALL_DIR=$("$VSWHERE" -latest -products '*' -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath)
VERSION_FILE="$INSTALL_DIR/VC/Auxiliary/Build/Microsoft.VCToolsVersion.default.txt"
if [ -f "$VERSION_FILE" ]; then
VERSION=$(cat "$VERSION_FILE")
PATH=$PATH:$(cygpath "$INSTALL_DIR/VC/Tools/MSVC/$VERSION/bin/HostX64/x64")
PATH_TO_CL=$(command -v cl.exe)
set -- "$@" "--with-cuda-host-compiler=$PATH_TO_CL"
fi
fi
fi