@@ -106,53 +106,35 @@ if(BUILD_CUDA)
106106
107107 if (CMAKE_CUDA_COMPILER_VERSION VERSION_LESS "11.4" )
108108 message (FATAL_ERROR "CUDA Version < 11.4 is not supported" )
109+ elseif (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "13.0" )
110+ message (FATAL_ERROR "CUDA Version > 12 is not supported" )
109111 endif ()
110112
111- # For CMake < 3.23.0: manually determine supported CUDA architectures
112- if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.23.0" )
113- message (STATUS "CMake < 3.23.0; determining CUDA architectures supported..." )
114-
115- # Base (CUDA 11.4+)
116- set (CMAKE_CUDA_ARCHITECTURES_ALL 80 86 87)
117- set (CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 80)
118-
119- # CUDA 11.8 adds Ada/Hopper
120- if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "11.8" )
121- list (APPEND CMAKE_CUDA_ARCHITECTURES_ALL 89 90)
122- list (APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 90)
123- endif ()
124-
125- # CUDA 12.8 adds Blackwell
126- if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "12.8" )
127- list (APPEND CMAKE_CUDA_ARCHITECTURES_ALL 100 120)
128- list (APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 100 120)
129- endif ()
130-
131- # CUDA 13: drop all architectures <= 80-series
132- if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "13.0" )
133- # Add new SMs introduced in CUDA 13
134- list (APPEND CMAKE_CUDA_ARCHITECTURES_ALL 103 110 121)
135-
136- # Remove all SMs below 80
137- list (REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL
138- 50 52 53 60 61 62 70 72 75)
139-
140- # Remove majors below 90
141- list (REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 50 60 70)
142-
143- # Optionally, keep majors as round numbers only in CUDA 13+
144- list (APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 90 100 120)
145- endif ()
146-
147- # Cleanup: remove duplicates and sort naturally
148- list (REMOVE_DUPLICATES CMAKE_CUDA_ARCHITECTURES_ALL)
149- list (REMOVE_DUPLICATES CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR)
150- list (SORT CMAKE_CUDA_ARCHITECTURES_ALL COMPARE NATURAL)
151- list (SORT CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR COMPARE NATURAL)
152-
153- # (Optional) Use these SMs directly for compilation
154- # set(CMAKE_CUDA_ARCHITECTURES "${CMAKE_CUDA_ARCHITECTURES_ALL}" CACHE STRING "" FORCE)
155- endif ()
113+ # CMake < 3.23.0 does not define CMAKE_CUDA_ARCHITECTURES_ALL.
114+ if (CMAKE_VERSION VERSION_LESS "3.23.0" )
115+ message (STATUS "CMake < 3.23.0; determining CUDA architectures supported..." )
116+
117+ # 11.4+ supports these at a minimum.
118+ if (CMAKE_CUDA_COMPILER_VERSION VERSION_LESS "13.0" )
119+ set (CMAKE_CUDA_ARCHITECTURES_ALL 50 52 53 60 61 62 70 72 75 80 86 87)
120+ set (CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 50 60 70 80)
121+ else ()
122+ set (CMAKE_CUDA_ARCHITECTURES_ALL 75 80 86 87)
123+ set (CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 70 80)
124+ endif ()
125+
126+ # CUDA 11.8 adds support for Ada and Hopper.
127+ if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "11.8" )
128+ list (APPEND CMAKE_CUDA_ARCHITECTURES_ALL 89 90)
129+ list (APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 90)
130+ endif ()
131+
132+ # CUDA 12.8 adds support for Blackwell.
133+ if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "12.8" )
134+ list (APPEND CMAKE_CUDA_ARCHITECTURES_ALL 100 101 120)
135+ list (APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 100 120)
136+ endif ()
137+ endif ()
156138
157139 string (APPEND CMAKE_CUDA_FLAGS " --use_fast_math" )
158140
@@ -161,7 +143,7 @@ if(BUILD_CUDA)
161143 string (APPEND CMAKE_CUDA_FLAGS " -Xptxas=-v" )
162144 endif ()
163145
164- foreach (capability ${CMAKE_CUDA_ARCHITECTURES_ALL} )
146+ foreach (capability ${CMAKE_CUDA_ARCHITECTURES_ALL} )
165147 # Most of the items here are like: `xx-real`, so we just extract the `xx` portion
166148 string (REGEX MATCH "[0-9]+" capability_id "${capability} " )
167149 if (capability_id GREATER 0)
0 commit comments