Browse Source

Merge topic 'hip-std'

c299fd8266 Tests/CompileFeatures: Cover hip_std_## meta-features
5d93c421f1 HIP: Populate CMAKE_HIP_KNOWN_FEATURES global property

Acked-by: Kitware Robot <[email protected]>
Merge-request: !9555
Brad King 1 year ago
parent
commit
a5269e0693

+ 1 - 0
.gitlab/ci/configure_debian12_hip_radeon.cmake

@@ -1,3 +1,4 @@
 set(CMake_TEST_HIP "amd" CACHE BOOL "")
+set(CMake_TEST_HIP_STANDARDS "98;11;14;17;20;23" CACHE STRING "")
 
 include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")

+ 1 - 0
.gitlab/ci/configure_fedora39_hip_radeon.cmake

@@ -1,3 +1,4 @@
 set(CMake_TEST_HIP "amd" CACHE BOOL "")
+set(CMake_TEST_HIP_STANDARDS "98;11;14;17;20;23;26" CACHE STRING "")
 
 include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")

+ 1 - 0
.gitlab/ci/configure_hip5.5_nvidia.cmake

@@ -1,3 +1,4 @@
 set(CMake_TEST_HIP "nvidia" CACHE BOOL "")
+set(CMake_TEST_HIP_STANDARDS "98;11;14;17" CACHE STRING "")
 
 include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")

+ 1 - 0
.gitlab/ci/configure_hip5.5_radeon.cmake

@@ -1,3 +1,4 @@
 set(CMake_TEST_HIP "amd" CACHE BOOL "")
+set(CMake_TEST_CUDA_STANDARDS "98;11;14;17;20;23;26" CACHE STRING "")
 
 include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")

+ 1 - 0
Help/manual/cmake-properties.7.rst

@@ -25,6 +25,7 @@ Properties of Global Scope
    /prop_gbl/CMAKE_C_KNOWN_FEATURES
    /prop_gbl/CMAKE_CUDA_KNOWN_FEATURES
    /prop_gbl/CMAKE_CXX_KNOWN_FEATURES
+   /prop_gbl/CMAKE_HIP_KNOWN_FEATURES
    /prop_gbl/CMAKE_ROLE
    /prop_gbl/DEBUG_CONFIGURATIONS
    /prop_gbl/DISABLED_FEATURES

+ 1 - 0
Help/manual/cmake-variables.7.rst

@@ -590,6 +590,7 @@ Variables for Languages
    /variable/CMAKE_Fortran_MODDIR_FLAG
    /variable/CMAKE_Fortran_MODOUT_FLAG
    /variable/CMAKE_HIP_ARCHITECTURES
+   /variable/CMAKE_HIP_COMPILE_FEATURES
    /variable/CMAKE_HIP_EXTENSIONS
    /variable/CMAKE_HIP_PLATFORM
    /variable/CMAKE_HIP_STANDARD

+ 42 - 0
Help/prop_gbl/CMAKE_HIP_KNOWN_FEATURES.rst

@@ -0,0 +1,42 @@
+CMAKE_HIP_KNOWN_FEATURES
+------------------------
+
+.. versionadded:: 3.30
+
+List of HIP features known to this version of CMake.
+
+The features listed in this global property may be known to be available to the
+HIP compiler.  If the feature is available with the HIP compiler, it will
+be listed in the :variable:`CMAKE_HIP_COMPILE_FEATURES` variable.
+
+The features listed here may be used with the :command:`target_compile_features`
+command.  See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+
+The features known to this version of CMake are:
+
+``hip_std_98``
+  Compiler mode is at least HIP/C++ 98.
+
+``hip_std_11``
+  Compiler mode is at least HIP/C++ 11.
+
+``hip_std_14``
+  Compiler mode is at least HIP/C++ 14.
+
+``hip_std_17``
+  Compiler mode is at least HIP/C++ 17.
+
+``hip_std_20``
+  Compiler mode is at least HIP/C++ 20.
+
+``hip_std_23``
+  Compiler mode is at least HIP/C++ 23.
+
+``hip_std_26``
+  .. versionadded:: 3.30
+
+  Compiler mode is at least HIP/C++ 26.
+
+.. include:: CMAKE_LANG_STD_FLAGS.txt

+ 13 - 0
Help/variable/CMAKE_HIP_COMPILE_FEATURES.rst

@@ -0,0 +1,13 @@
+CMAKE_HIP_COMPILE_FEATURES
+--------------------------
+
+.. versionadded:: 3.21
+
+List of features known to the HIP compiler
+
+These features are known to be available for use with the HIP compiler. This
+list is a subset of the features listed in the
+:prop_gbl:`CMAKE_HIP_KNOWN_FEATURES` global property.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.

+ 5 - 0
Source/cmState.cxx

@@ -659,6 +659,11 @@ cmValue cmState::GetGlobalProperty(const std::string& prop)
       &FOR_EACH_CUDA_FEATURE(STRING_LIST_ELEMENT)[1]);
     return cmValue(s_out);
   }
+  if (prop == "CMAKE_HIP_KNOWN_FEATURES") {
+    static const std::string s_out(
+      &FOR_EACH_HIP_FEATURE(STRING_LIST_ELEMENT)[1]);
+    return cmValue(s_out);
+  }
 
 #undef STRING_LIST_ELEMENT
   return this->GlobalProperties.GetPropertyValue(prop);

+ 4 - 1
Tests/CMakeLists.txt

@@ -391,14 +391,17 @@ if(BUILD_TESTING)
   string(REPLACE ";" "$<SEMICOLON>" TEST_STDS_C "${CMake_TEST_C_STANDARDS}")
   string(REPLACE ";" "$<SEMICOLON>" TEST_STDS_CXX "${CMake_TEST_CXX_STANDARDS}")
   string(REPLACE ";" "$<SEMICOLON>" TEST_STDS_CUDA "${CMake_TEST_CUDA_STANDARDS}")
+  string(REPLACE ";" "$<SEMICOLON>" TEST_STDS_HIP "${CMake_TEST_HIP_STANDARDS}")
   set(CompileFeatures_BUILD_OPTIONS
     -DCMake_TEST_C_STANDARDS=${TEST_STDS_C}
     -DCMake_TEST_CXX_STANDARDS=${TEST_STDS_CXX}
     -DCMake_TEST_CUDA=${CMake_TEST_CUDA}
     -DCMake_TEST_CUDA_STANDARDS=${TEST_STDS_CUDA}
+    -DCMake_TEST_HIP=${CMake_TEST_HIP}
+    -DCMake_TEST_HIP_STANDARDS=${TEST_STDS_HIP}
     )
   ADD_TEST_MACRO(CompileFeatures CompileFeatures)
-  set_property(TEST CompileFeatures APPEND PROPERTY LABELS "CUDA")
+  set_property(TEST CompileFeatures APPEND PROPERTY LABELS "CUDA" "HIP")
 
   ADD_TEST_MACRO(CMakeCommands.target_compile_features)
 

+ 7 - 1
Tests/CompileFeatures/CMakeLists.txt

@@ -15,7 +15,13 @@ if(CMake_TEST_CUDA)
   set(std_CUDA 03 11 14 17 20 23 26)
 endif()
 
-foreach(lang C CXX CUDA)
+if(CMake_TEST_HIP)
+  enable_language(HIP)
+  set(ext_HIP hip)
+  set(std_HIP 98 11 14 17 20 23 26)
+endif()
+
+foreach(lang C CXX CUDA HIP)
   foreach(std IN LISTS std_${lang})
     string(TOLOWER "${lang}_std_${std}" feature)
     if("${std}" IN_LIST CMake_TEST_${lang}_STANDARDS

+ 4 - 0
Tests/CompileFeatures/hip_std_11.hip

@@ -0,0 +1,4 @@
+#include "cxx_std.h"
+#if defined(CXX_STD) && CXX_STD < CXX_STD_11
+#  error "hip_std_11 not honored"
+#endif

+ 4 - 0
Tests/CompileFeatures/hip_std_14.hip

@@ -0,0 +1,4 @@
+#include "cxx_std.h"
+#if defined(CXX_STD) && CXX_STD <= CXX_STD_11
+#  error "hip_std_14 not honored"
+#endif

+ 4 - 0
Tests/CompileFeatures/hip_std_17.hip

@@ -0,0 +1,4 @@
+#include "cxx_std.h"
+#if defined(CXX_STD) && CXX_STD <= CXX_STD_14
+#  error "hip_std_17 not honored"
+#endif

+ 4 - 0
Tests/CompileFeatures/hip_std_20.hip

@@ -0,0 +1,4 @@
+#include "cxx_std.h"
+#if defined(CXX_STD) && CXX_STD <= CXX_STD_17
+#  error "hip_std_20 not honored"
+#endif

+ 4 - 0
Tests/CompileFeatures/hip_std_23.hip

@@ -0,0 +1,4 @@
+#include "cxx_std.h"
+#if defined(CXX_STD) && CXX_STD <= CXX_STD_20
+#  error "hip_std_23 not honored"
+#endif

+ 4 - 0
Tests/CompileFeatures/hip_std_26.hip

@@ -0,0 +1,4 @@
+#include "cxx_std.h"
+#if defined(CXX_STD) && CXX_STD <= CXX_STD_23
+#  error "hip_std_26 not honored"
+#endif

+ 0 - 0
Tests/CompileFeatures/hip_std_98.hip