During implementation of #22860 (closed) and investigation of #23010 (closed) I found a few additional small holes and potential improvement issues. So this turned once again into a bit of a re-work of the architecture detection and handling. However, nearing two years I feel this is finally getting into a solid shape.
- CUDA: Actually use reverse architecture deprecation order for Clang
- CUDA: Support all and all-major on Visual Studio
- CUDA: Generic all and all-major support (implements #22860 (closed))
- CUDA: Error on empty/invalid CMAKE_CUDA_ARCHITECTURES set by user
- CUDA: Fix issuing error if default architecture detection fails (fixes #23010 (closed))
Everything except the generic support was split out into !6912 (merged) to ensure those make it in time for CMake 3.23.