-
-
Notifications
You must be signed in to change notification settings - Fork 23
/
activate.sh
130 lines (112 loc) · 4.08 KB
/
activate.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/bash
# Set `CUDA_HOME` in an activation script.
# Backup environment variables (only if the variables are set)
if [[ ! -z "${CUDA_HOME+x}" ]]
then
export CUDA_HOME_CONDA_NVCC_BACKUP="${CUDA_HOME:-}"
fi
if [[ ! -z "${CUDA_PATH+x}" ]]
then
export CUDA_PATH_CONDA_NVCC_BACKUP="${CUDA_PATH:-}"
fi
if [[ ! -z "${CFLAGS+x}" ]]
then
export CFLAGS_CONDA_NVCC_BACKUP="${CFLAGS:-}"
fi
if [[ ! -z "${CPPFLAGS+x}" ]]
then
export CPPFLAGS_CONDA_NVCC_BACKUP="${CPPFLAGS:-}"
fi
if [[ ! -z "${CXXFLAGS+x}" ]]
then
export CXXFLAGS_CONDA_NVCC_BACKUP="${CXXFLAGS:-}"
fi
if [[ ! -z "${CMAKE_ARGS+x}" ]]
then
export CMAKE_ARGS_CONDA_NVCC_BACKUP="${CMAKE_ARGS:-}"
fi
# Default to using $(cuda-gdb) to specify $(CUDA_HOME).
if [[ -z "${CUDA_HOME+x}" ]]
then
CUDA_GDB_EXECUTABLE=$(which cuda-gdb || exit 0)
if [[ -n "$CUDA_GDB_EXECUTABLE" ]]
then
CUDA_HOME=$(dirname $(dirname $CUDA_GDB_EXECUTABLE))
else
echo "Cannot determine CUDA_HOME: cuda-gdb not in PATH"
return 1
fi
fi
if [[ ! -d "${CUDA_HOME}" ]]
then
echo "Directory specified in CUDA_HOME(=${CUDA_HOME}) doesn't exist"
return 1
fi
if [[ "${CONDA_BUILD_CROSS_COMPILATION:-0}" == "1" ]]; then
if [[ "${target_platform:-}" == "linux-aarch64" ]]; then
TARGET_ROOT=/targets/sbsa-linux
LIBCUDA_STUB_FILE="${CUDA_HOME}/targets/sbsa-linux/lib/stubs/libcuda.so"
CUDA_INCLUDE_DIR="${CUDA_HOME}/targets/sbsa-linux/include"
elif [[ "${target_platform:-}" == "linux-ppc64le" ]]; then
TARGET_ROOT=/targets/ppc64le-linux
LIBCUDA_STUB_FILE="${CUDA_HOME}/targets/ppc64le-linux/lib/stubs/libcuda.so"
CUDA_INCLUDE_DIR="${CUDA_HOME}/targets/ppc64le-linux/include"
elif [[ "${target_platform:-}" == "linux-64" ]]; then
TARGET_ROOT=/targets/x86_64-linux
LIBCUDA_STUB_FILE="${CUDA_HOME}/targets/x86_64-linux/lib/stubs/libcuda.so"
CUDA_INCLUDE_DIR="${CUDA_HOME}/targets/x86_64-linux/include"
fi
else
TARGET_ROOT=""
LIBCUDA_STUB_FILE="${CUDA_HOME}/lib64/stubs/libcuda.so"
CUDA_INCLUDE_DIR="${CUDA_HOME}/include"
fi
if [[ ! -f "${LIBCUDA_STUB_FILE}" ]]
then
echo "File ${LIBCUDA_STUB_FILE} doesn't exist"
return 1
fi
if [[ -z "$(${CUDA_HOME}/bin/nvcc --version | grep "Cuda compilation tools, release __PKG_VERSION__")" ]]
then
if [ "${CONDA_BUILD}" = "1" ]
then
echo "Error: Version of installed CUDA didn't match package"
return 1
else
echo "Warning: Version of installed CUDA didn't match package"
fi
fi
export CUDA_HOME="${CUDA_HOME}"
export CFLAGS="${CFLAGS} -isystem ${CUDA_INCLUDE_DIR}"
export CPPFLAGS="${CPPFLAGS} -isystem ${CUDA_INCLUDE_DIR}"
export CXXFLAGS="${CXXFLAGS} -isystem ${CUDA_INCLUDE_DIR}"
### CMake configurations
# CMake looks up components in CUDA_PATH, not CUDA_HOME
export CUDA_PATH="${CUDA_HOME}"
# New-style CUDA integrations in CMake
CMAKE_ARGS="${CMAKE_ARGS:-} -DCUDAToolkit_ROOT=${CUDA_HOME}${TARGET_ROOT}"
# Old-style CUDA integrations in CMake
## See https://github.com/conda-forge/nvcc-feedstock/pull/58#issuecomment-752179349
CMAKE_ARGS+=" -DCUDA_TOOLKIT_ROOT_DIR=${CUDA_HOME}"
## Avoid https://github.com/conda-forge/openmm-feedstock/pull/44#issuecomment-753560234
## We need CUDA_HOME in _front_ of CMAKE_FIND_ROOT_PATH
CMAKE_ARGS="$(echo ${CMAKE_ARGS} | sed -E -e "s|(-DCMAKE_FIND_ROOT_PATH=)(\S+)|\1$CUDA_HOME;\2|")"
export CMAKE_ARGS="${CMAKE_ARGS}"
### /CMake configurations
# Add $(libcuda.so) shared object stub to the compiler sysroot.
# Needed for things that want to link to $(libcuda.so).
# Stub is used to avoid getting driver code linked into binaries.
if [[ ! -z "${CONDA_BUILD_SYSROOT+x}" ]]
then
mkdir -p "${CONDA_BUILD_SYSROOT}/lib"
# Make a backup of $(libcuda.so)
LIBCUDA_SO_CONDA_NVCC_BACKUP="${CONDA_BUILD_SYSROOT}/lib/libcuda.so-conda-nvcc-backup"
if [[ -f "${CONDA_BUILD_SYSROOT}/lib/libcuda.so" ]]
then
mv -f "${CONDA_BUILD_SYSROOT}/lib/libcuda.so" "${LIBCUDA_SO_CONDA_NVCC_BACKUP}"
fi
ln -s "${LIBCUDA_STUB_FILE}" "${CONDA_BUILD_SYSROOT}/lib/libcuda.so"
else
mkdir -p "${CONDA_PREFIX}/lib/stubs"
ln -sf "${LIBCUDA_STUB_FILE}" "${CONDA_PREFIX}/lib/stubs/libcuda.so"
fi