tambre added a comment.

In D108247#3025238 <https://reviews.llvm.org/D108247#3025238>, @tra wrote:

> So, what's the current state of affairs regarding CUDA SDK layout in debian?

`/usr/bin`: most executables 
<https://packages.debian.org/bullseye/amd64/nvidia-cuda-toolkit/filelist>, 
`nvcc` and `nvprof` shims
`/usr/lib/nvidia-cuda-toolkit/bin`: `cicc`, `crt`, `nvcc`, `nvprof`, `g++` and 
`gcc` wrappers for supporting different compilers
`/usr/lib/nvidia-cuda-toolkit/libdevice`: `libdevice.10.bc`
`/usr/lib/cuda/{bin,include,lib64}`: empty directories
`/usr/lib/cuda/nvvm/libdevice`: symlinked to 
`/usr/lib/nvidia-cuda-toolkit/libdevice`
`/usr/include`: headers

> CUDA SDK no longer ships version.txt, so cuda.h is the only reliable 
> mechanism for detecting CUDA version and clang does need to know it.
> In case the version has not been found we also can not choose an arbitrary 
> old version as the default.

Agreed, sensible.

> So, one workaround would be to install CUDA-11.4. AFAICT, we do find the 
> headers and ptxas, but misdetect CUDA version.

I don't think that's going to be acceptable for most distributions, which might 
ship a Clang supporting a newer CUDA than the one they ship.

> Another workaround would be to place a fake /usr/lib/cuda/include/cuda.h with 
> something like this:

My CMake CI bot [[ https://open.cdash.org/test/498767666 | encountered `cmath` 
template errors ]] after I manually symlinked `/usr/lib/cuda/include` to 
`/usr/include`, though that solved the version detection.
Adding a shim like the one you show fixes everything and compiling works.

> Clang does rely on very particular ordering of includes, so having CUDA 
> headers in a location clang does not expect will lead to issues sooner or 
> later.

Having the headers in the system-wide `/usr/include` shouldn't be a problem 
though, right?
I'm not quite sure why simply having `/usr/lib/cuda/include` → `/usr/include` 
symlink breaks as seen on my bot.
Prior to this an empty `/usr/lib/cuda/include` and Clang finding them through 
the regular include search path worked.

> If the headers are not available where --cuda-path points clang to, I'm not 
> sure what clang is supposed to do. Second-guessing explicit user input is not 
> a good idea in general.

I agree that second-guessing is bad, but expecting it to be available in the 
include search path otherwise seems reasonable.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D108247/new/

https://reviews.llvm.org/D108247

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to