1 # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 # file Copyright.txt or https://cmake.org/licensing for details.
5 function(cmake_determine_compile_features lang)
7 if("x${lang}" STREQUAL "xC" AND COMMAND cmake_record_c_compile_features)
8 message(CHECK_START "Detecting ${lang} compile features")
10 set(CMAKE_C90_COMPILE_FEATURES)
11 set(CMAKE_C99_COMPILE_FEATURES)
12 set(CMAKE_C11_COMPILE_FEATURES)
13 set(CMAKE_C17_COMPILE_FEATURES)
14 set(CMAKE_C23_COMPILE_FEATURES)
16 include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
18 cmake_record_c_compile_features()
20 if(NOT _result EQUAL 0)
21 message(CHECK_FAIL "failed")
25 if (CMAKE_C17_COMPILE_FEATURES AND CMAKE_C23_COMPILE_FEATURES)
26 list(REMOVE_ITEM CMAKE_C23_COMPILE_FEATURES ${CMAKE_C17_COMPILE_FEATURES})
28 if (CMAKE_C11_COMPILE_FEATURES AND CMAKE_C17_COMPILE_FEATURES)
29 list(REMOVE_ITEM CMAKE_C17_COMPILE_FEATURES ${CMAKE_C11_COMPILE_FEATURES})
31 if (CMAKE_C99_COMPILE_FEATURES AND CMAKE_C11_COMPILE_FEATURES)
32 list(REMOVE_ITEM CMAKE_C11_COMPILE_FEATURES ${CMAKE_C99_COMPILE_FEATURES})
34 if (CMAKE_C90_COMPILE_FEATURES AND CMAKE_C99_COMPILE_FEATURES)
35 list(REMOVE_ITEM CMAKE_C99_COMPILE_FEATURES ${CMAKE_C90_COMPILE_FEATURES})
38 if(NOT CMAKE_C_COMPILE_FEATURES)
39 set(CMAKE_C_COMPILE_FEATURES
40 ${CMAKE_C90_COMPILE_FEATURES}
41 ${CMAKE_C99_COMPILE_FEATURES}
42 ${CMAKE_C11_COMPILE_FEATURES}
43 ${CMAKE_C17_COMPILE_FEATURES}
44 ${CMAKE_C23_COMPILE_FEATURES}
48 set(CMAKE_C_COMPILE_FEATURES ${CMAKE_C_COMPILE_FEATURES} PARENT_SCOPE)
49 set(CMAKE_C90_COMPILE_FEATURES ${CMAKE_C90_COMPILE_FEATURES} PARENT_SCOPE)
50 set(CMAKE_C99_COMPILE_FEATURES ${CMAKE_C99_COMPILE_FEATURES} PARENT_SCOPE)
51 set(CMAKE_C11_COMPILE_FEATURES ${CMAKE_C11_COMPILE_FEATURES} PARENT_SCOPE)
52 set(CMAKE_C17_COMPILE_FEATURES ${CMAKE_C17_COMPILE_FEATURES} PARENT_SCOPE)
53 set(CMAKE_C23_COMPILE_FEATURES ${CMAKE_C23_COMPILE_FEATURES} PARENT_SCOPE)
55 message(CHECK_PASS "done")
57 elseif("x${lang}" STREQUAL "xCXX" AND COMMAND cmake_record_cxx_compile_features)
58 message(CHECK_START "Detecting ${lang} compile features")
60 set(CMAKE_CXX98_COMPILE_FEATURES)
61 set(CMAKE_CXX11_COMPILE_FEATURES)
62 set(CMAKE_CXX14_COMPILE_FEATURES)
63 set(CMAKE_CXX17_COMPILE_FEATURES)
64 set(CMAKE_CXX20_COMPILE_FEATURES)
65 set(CMAKE_CXX23_COMPILE_FEATURES)
67 include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
69 cmake_record_cxx_compile_features()
71 if(NOT _result EQUAL 0)
72 message(CHECK_FAIL "failed")
76 if (CMAKE_CXX20_COMPILE_FEATURES AND CMAKE_CXX23_COMPILE_FEATURES)
77 list(REMOVE_ITEM CMAKE_CXX23_COMPILE_FEATURES ${CMAKE_CXX20_COMPILE_FEATURES})
79 if (CMAKE_CXX17_COMPILE_FEATURES AND CMAKE_CXX20_COMPILE_FEATURES)
80 list(REMOVE_ITEM CMAKE_CXX20_COMPILE_FEATURES ${CMAKE_CXX17_COMPILE_FEATURES})
82 if (CMAKE_CXX14_COMPILE_FEATURES AND CMAKE_CXX17_COMPILE_FEATURES)
83 list(REMOVE_ITEM CMAKE_CXX17_COMPILE_FEATURES ${CMAKE_CXX14_COMPILE_FEATURES})
85 if (CMAKE_CXX11_COMPILE_FEATURES AND CMAKE_CXX14_COMPILE_FEATURES)
86 list(REMOVE_ITEM CMAKE_CXX14_COMPILE_FEATURES ${CMAKE_CXX11_COMPILE_FEATURES})
88 if (CMAKE_CXX98_COMPILE_FEATURES AND CMAKE_CXX11_COMPILE_FEATURES)
89 list(REMOVE_ITEM CMAKE_CXX11_COMPILE_FEATURES ${CMAKE_CXX98_COMPILE_FEATURES})
92 if(NOT CMAKE_CXX_COMPILE_FEATURES)
93 set(CMAKE_CXX_COMPILE_FEATURES
94 ${CMAKE_CXX98_COMPILE_FEATURES}
95 ${CMAKE_CXX11_COMPILE_FEATURES}
96 ${CMAKE_CXX14_COMPILE_FEATURES}
97 ${CMAKE_CXX17_COMPILE_FEATURES}
98 ${CMAKE_CXX20_COMPILE_FEATURES}
99 ${CMAKE_CXX23_COMPILE_FEATURES}
103 set(CMAKE_CXX_COMPILE_FEATURES ${CMAKE_CXX_COMPILE_FEATURES} PARENT_SCOPE)
104 set(CMAKE_CXX98_COMPILE_FEATURES ${CMAKE_CXX98_COMPILE_FEATURES} PARENT_SCOPE)
105 set(CMAKE_CXX11_COMPILE_FEATURES ${CMAKE_CXX11_COMPILE_FEATURES} PARENT_SCOPE)
106 set(CMAKE_CXX14_COMPILE_FEATURES ${CMAKE_CXX14_COMPILE_FEATURES} PARENT_SCOPE)
107 set(CMAKE_CXX17_COMPILE_FEATURES ${CMAKE_CXX17_COMPILE_FEATURES} PARENT_SCOPE)
108 set(CMAKE_CXX20_COMPILE_FEATURES ${CMAKE_CXX20_COMPILE_FEATURES} PARENT_SCOPE)
109 set(CMAKE_CXX23_COMPILE_FEATURES ${CMAKE_CXX23_COMPILE_FEATURES} PARENT_SCOPE)
111 message(CHECK_PASS "done")
113 elseif("x${lang}" STREQUAL "xCUDA" AND COMMAND cmake_record_cuda_compile_features)
114 message(CHECK_START "Detecting ${lang} compile features")
116 set(CMAKE_CUDA03_COMPILE_FEATURES)
117 set(CMAKE_CUDA11_COMPILE_FEATURES)
118 set(CMAKE_CUDA14_COMPILE_FEATURES)
119 set(CMAKE_CUDA17_COMPILE_FEATURES)
120 set(CMAKE_CUDA20_COMPILE_FEATURES)
121 set(CMAKE_CUDA23_COMPILE_FEATURES)
123 include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
125 cmake_record_cuda_compile_features()
127 if(NOT _result EQUAL 0)
128 message(CHECK_FAIL "failed")
132 if (CMAKE_CUDA20_COMPILE_FEATURES AND CMAKE_CUDA23_COMPILE_FEATURES)
133 list(REMOVE_ITEM CMAKE_CUDA23_COMPILE_FEATURES ${CMAKE_CUDA20_COMPILE_FEATURES})
135 if (CMAKE_CUDA17_COMPILE_FEATURES AND CMAKE_CUDA20_COMPILE_FEATURES)
136 list(REMOVE_ITEM CMAKE_CUDA20_COMPILE_FEATURES ${CMAKE_CUDA17_COMPILE_FEATURES})
138 if (CMAKE_CUDA14_COMPILE_FEATURES AND CMAKE_CUDA17_COMPILE_FEATURES)
139 list(REMOVE_ITEM CMAKE_CUDA17_COMPILE_FEATURES ${CMAKE_CUDA14_COMPILE_FEATURES})
141 if (CMAKE_CUDA11_COMPILE_FEATURES AND CMAKE_CUDA14_COMPILE_FEATURES)
142 list(REMOVE_ITEM CMAKE_CUDA14_COMPILE_FEATURES ${CMAKE_CUDA11_COMPILE_FEATURES})
144 if (CMAKE_CUDA03_COMPILE_FEATURES AND CMAKE_CUDA11_COMPILE_FEATURES)
145 list(REMOVE_ITEM CMAKE_CUDA11_COMPILE_FEATURES ${CMAKE_CUDA03_COMPILE_FEATURES})
148 if(NOT CMAKE_CUDA_COMPILE_FEATURES)
149 set(CMAKE_CUDA_COMPILE_FEATURES
150 ${CMAKE_CUDA03_COMPILE_FEATURES}
151 ${CMAKE_CUDA11_COMPILE_FEATURES}
152 ${CMAKE_CUDA14_COMPILE_FEATURES}
153 ${CMAKE_CUDA17_COMPILE_FEATURES}
154 ${CMAKE_CUDA20_COMPILE_FEATURES}
155 ${CMAKE_CUDA23_COMPILE_FEATURES}
159 set(CMAKE_CUDA_COMPILE_FEATURES ${CMAKE_CUDA_COMPILE_FEATURES} PARENT_SCOPE)
160 set(CMAKE_CUDA03_COMPILE_FEATURES ${CMAKE_CUDA03_COMPILE_FEATURES} PARENT_SCOPE)
161 set(CMAKE_CUDA11_COMPILE_FEATURES ${CMAKE_CUDA11_COMPILE_FEATURES} PARENT_SCOPE)
162 set(CMAKE_CUDA14_COMPILE_FEATURES ${CMAKE_CUDA14_COMPILE_FEATURES} PARENT_SCOPE)
163 set(CMAKE_CUDA17_COMPILE_FEATURES ${CMAKE_CUDA17_COMPILE_FEATURES} PARENT_SCOPE)
164 set(CMAKE_CUDA20_COMPILE_FEATURES ${CMAKE_CUDA20_COMPILE_FEATURES} PARENT_SCOPE)
165 set(CMAKE_CUDA23_COMPILE_FEATURES ${CMAKE_CUDA23_COMPILE_FEATURES} PARENT_SCOPE)
167 message(CHECK_PASS "done")
169 elseif(lang STREQUAL HIP AND COMMAND cmake_record_hip_compile_features)
170 message(CHECK_START "Detecting ${lang} compile features")
172 set(CMAKE_HIP98_COMPILE_FEATURES)
173 set(CMAKE_HIP11_COMPILE_FEATURES)
174 set(CMAKE_HIP14_COMPILE_FEATURES)
175 set(CMAKE_HIP17_COMPILE_FEATURES)
176 set(CMAKE_HIP20_COMPILE_FEATURES)
177 set(CMAKE_HIP23_COMPILE_FEATURES)
179 include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
181 cmake_record_hip_compile_features()
183 if(NOT _result EQUAL 0)
184 message(CHECK_FAIL "failed")
188 if (CMAKE_HIP20_COMPILE_FEATURES AND CMAKE_HIP23_COMPILE_FEATURES)
189 list(REMOVE_ITEM CMAKE_HIP23_COMPILE_FEATURES ${CMAKE_HIP20_COMPILE_FEATURES})
191 if (CMAKE_HIP17_COMPILE_FEATURES AND CMAKE_HIP20_COMPILE_FEATURES)
192 list(REMOVE_ITEM CMAKE_HIP20_COMPILE_FEATURES ${CMAKE_HIP17_COMPILE_FEATURES})
194 if (CMAKE_HIP14_COMPILE_FEATURES AND CMAKE_HIP17_COMPILE_FEATURES)
195 list(REMOVE_ITEM CMAKE_HIP17_COMPILE_FEATURES ${CMAKE_HIP14_COMPILE_FEATURES})
197 if (CMAKE_HIP11_COMPILE_FEATURES AND CMAKE_HIP14_COMPILE_FEATURES)
198 list(REMOVE_ITEM CMAKE_HIP14_COMPILE_FEATURES ${CMAKE_HIP11_COMPILE_FEATURES})
200 if (CMAKE_HIP98_COMPILE_FEATURES AND CMAKE_HIP11_COMPILE_FEATURES)
201 list(REMOVE_ITEM CMAKE_HIP11_COMPILE_FEATURES ${CMAKE_HIP98_COMPILE_FEATURES})
204 if(NOT CMAKE_HIP_COMPILE_FEATURES)
205 set(CMAKE_HIP_COMPILE_FEATURES
206 ${CMAKE_HIP98_COMPILE_FEATURES}
207 ${CMAKE_HIP11_COMPILE_FEATURES}
208 ${CMAKE_HIP14_COMPILE_FEATURES}
209 ${CMAKE_HIP17_COMPILE_FEATURES}
210 ${CMAKE_HIP20_COMPILE_FEATURES}
211 ${CMAKE_HIP23_COMPILE_FEATURES}
215 set(CMAKE_HIP_COMPILE_FEATURES ${CMAKE_HIP_COMPILE_FEATURES} PARENT_SCOPE)
216 set(CMAKE_HIP98_COMPILE_FEATURES ${CMAKE_HIP98_COMPILE_FEATURES} PARENT_SCOPE)
217 set(CMAKE_HIP11_COMPILE_FEATURES ${CMAKE_HIP11_COMPILE_FEATURES} PARENT_SCOPE)
218 set(CMAKE_HIP14_COMPILE_FEATURES ${CMAKE_HIP14_COMPILE_FEATURES} PARENT_SCOPE)
219 set(CMAKE_HIP17_COMPILE_FEATURES ${CMAKE_HIP17_COMPILE_FEATURES} PARENT_SCOPE)
220 set(CMAKE_HIP20_COMPILE_FEATURES ${CMAKE_HIP20_COMPILE_FEATURES} PARENT_SCOPE)
221 set(CMAKE_HIP23_COMPILE_FEATURES ${CMAKE_HIP23_COMPILE_FEATURES} PARENT_SCOPE)
223 message(CHECK_PASS "done")