When cross-compiling NVPTX we use the triple to indicate which paths to
search for the CUDA toolchain. Currently this uses the default target
triple. This might not be exactly correct, as this is the default triple
used to compile binaries, not the host system. We want the host triple
because it indicates which folders should hold CUDA.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
The change may be an improvement, but we may still have a potential issue here.
E.g. ideally we may want to be able to cross-compile a CUDA app on a powerpc or ARM build host targeting NVIDIA GPU on a x86 host. So, the compilation tools would need to be found for the powerpc/arm host, but the the pair of triples used during compilation would have to be x86 and nvptx.
In this situation the LLVM_HOST_TRIPLE would not be the right triple at all. Does OpenMP currently handle the cross-compilation scenario above?
So, this triple is only used for locating the CUDA library itself. In that case it's generally assumed that it will match whatever file structure the host computer is using. Specifically, right now all it's used for is HostTriple.isOSWindows().
In this situation the LLVM_HOST_TRIPLE would not be the right triple at all. Does OpenMP currently handle the cross-compilation scenario above?
I don't think anyone's tried OpenMP with cross compilation. Most likely because it's only supported on Linux currently. I actually don't know what would happen if you tried.
right now all it's used for is HostTriple.isOSWindows()
OK.
In that case we may want to rename the parameter to BuildHostTriple to make it clear which host we have in mind.