浏览代码

CrayClang: Add support for this compiler

Add `CrayClang` compiler ID for newer Cray compilers.

Fixes: #25102
Ryan Krattiger 2 年之前
父节点
当前提交
80838316a8

+ 5 - 0
Help/release/dev/CrayClang-compiler.rst

@@ -0,0 +1,5 @@
+CrayClang-compiler
+------------------
+
+* Cray Clang-based compilers are now supported with
+  :variable:`compiler id <CMAKE_<LANG>_COMPILER_ID>` ``CrayClang``.

+ 1 - 0
Help/variable/CMAKE_LANG_COMPILER_ID.rst

@@ -18,6 +18,7 @@ Value                           Name
 ``CCur``                        Concurrent Fortran
 ``Clang``                       `LLVM Clang`_
 ``Cray``                        Cray Compiler
+``CrayClang``                   Cray Clang-based Compiler
 ``Embarcadero``, ``Borland``    `Embarcadero`_
 ``Flang``                       `Classic Flang Fortran Compiler`_
 ``LLVMFlang``                   `LLVM Flang Fortran Compiler`_

+ 1 - 0
Modules/CMakeCompilerIdDetection.cmake

@@ -65,6 +65,7 @@ function(compiler_id_detection outvar lang)
       VisualAge
       NVHPC
       PGI
+      CrayClang
       Cray
       TI
       FujitsuClang

+ 30 - 0
Modules/Compiler/CrayClang-C.cmake

@@ -0,0 +1,30 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include(Compiler/CrayClang)
+__compiler_cray_clang(C)
+
+set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c)
+
+string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
+string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -DNDEBUG")
+
+set(CMAKE_C90_STANDARD_COMPILE_OPTION  -std=c90)
+set(CMAKE_C90_EXTENSION_COMPILE_OPTION -std=gnu90)
+set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+
+set(CMAKE_C99_STANDARD_COMPILE_OPTION  -std=c99)
+set(CMAKE_C99_EXTENSION_COMPILE_OPTION -std=gnu99)
+set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
+
+set(CMAKE_C11_STANDARD_COMPILE_OPTION  -std=c11)
+set(CMAKE_C11_EXTENSION_COMPILE_OPTION -std=gnu11)
+set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
+
+set(CMAKE_C17_STANDARD_COMPILE_OPTION  -std=c17)
+set(CMAKE_C17_EXTENSION_COMPILE_OPTION -std=gnu17)
+
+set(CMAKE_C23_STANDARD_COMPILE_OPTION  -std=c2x)
+set(CMAKE_C23_EXTENSION_COMPILE_OPTION -std=gnu2x)
+
+__compiler_check_default_language_standard(C 15.0.0 17)

+ 35 - 0
Modules/Compiler/CrayClang-CXX.cmake

@@ -0,0 +1,35 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include(Compiler/CrayClang)
+__compiler_cray_clang(CXX)
+
+
+set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++)
+set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
+
+string(APPEND CMAKE_CXX_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
+string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " -DNDEBUG")
+
+set(CMAKE_CXX98_STANDARD_COMPILE_OPTION  -std=c++98)
+set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -std=gnu++98)
+set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
+
+set(CMAKE_CXX11_STANDARD_COMPILE_OPTION  -std=c++11)
+set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION -std=gnu++11)
+set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
+
+set(CMAKE_CXX14_STANDARD_COMPILE_OPTION  -std=c++14)
+set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION -std=gnu++14)
+set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
+
+set(CMAKE_CXX17_STANDARD_COMPILE_OPTION  -std=c++17)
+set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION -std=gnu++17)
+
+set(CMAKE_CXX20_STANDARD_COMPILE_OPTION  -std=c++20)
+set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION -std=gnu++20)
+
+set(CMAKE_CXX23_STANDARD_COMPILE_OPTION  -std=c++2b)
+set(CMAKE_CXX23_EXTENSION_COMPILE_OPTION -std=gnu++2b)
+
+__compiler_check_default_language_standard(CXX 15.0.0 14)

+ 8 - 0
Modules/Compiler/CrayClang-DetermineCompiler.cmake

@@ -0,0 +1,8 @@
+set(_compiler_id_pp_test "defined(__clang__) && defined(__cray__)")
+
+set(_compiler_id_version_compute "
+# define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@(__cray_major__)
+# define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__cray_minor__)
+# define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__cray_patchlevel__)
+# define @PREFIX@COMPILER_VERSION_INTERNAL_STR __clang_version__
+")

+ 17 - 0
Modules/Compiler/CrayClang.cmake

@@ -0,0 +1,17 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# This module is shared by multiple languages; use include blocker.
+if(__COMPILER_CRAYCLANG)
+  return()
+endif()
+set(__COMPILER_CRAYCLANG 1)
+
+include(Compiler/Clang)
+
+macro (__compiler_cray_clang lang)
+  set(__crayclang_ver "${CMAKE_${lang}_COMPILER_VERSION}")
+  set("CMAKE_${lang}_COMPILER_VERSION" "${CMAKE_${lang}_COMPILER_VERSION_INTERNAL}")
+  __compiler_clang(${lang})
+  set("CMAKE_${lang}_COMPILER_VERSION" "${__crayclang_ver}")
+endmacro ()

+ 4 - 4
Tests/CMakeCommands/target_compile_options/CMakeLists.txt

@@ -11,11 +11,11 @@ add_executable(target_compile_options
   "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp"
 )
 target_compile_options(target_compile_options
-  PRIVATE $<$<CXX_COMPILER_ID:AppleClang,IBMClang,Clang,GNU,LCC>:-DMY_PRIVATE_DEFINE>
+  PRIVATE $<$<CXX_COMPILER_ID:AppleClang,IBMClang,CrayClang,Clang,GNU,LCC>:-DMY_PRIVATE_DEFINE>
   PUBLIC $<$<COMPILE_LANG_AND_ID:CXX,GNU,LCC>:-DMY_PUBLIC_DEFINE>
-  PUBLIC $<$<COMPILE_LANG_AND_ID:CXX,GNU,LCC,Clang,AppleClang,IBMClang>:-DMY_MUTLI_COMP_PUBLIC_DEFINE>
+  PUBLIC $<$<COMPILE_LANG_AND_ID:CXX,GNU,LCC,Clang,AppleClang,CrayClang,IBMClang>:-DMY_MUTLI_COMP_PUBLIC_DEFINE>
   INTERFACE $<$<CXX_COMPILER_ID:GNU,LCC>:-DMY_INTERFACE_DEFINE>
-  INTERFACE $<$<CXX_COMPILER_ID:GNU,LCC,Clang,AppleClang,IBMClang>:-DMY_MULTI_COMP_INTERFACE_DEFINE>
+  INTERFACE $<$<CXX_COMPILER_ID:GNU,LCC,Clang,AppleClang,CrayClang,IBMClang>:-DMY_MULTI_COMP_INTERFACE_DEFINE>
 )
 
 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|LCC")
@@ -51,7 +51,7 @@ if(CMAKE_GENERATOR MATCHES "Visual Studio")
 endif()
 
 target_compile_options(consumer
-  PRIVATE $<$<CXX_COMPILER_ID:GNU,LCC,Clang,AppleClang,IBMClang>:$<TARGET_PROPERTY:target_compile_options,INTERFACE_COMPILE_OPTIONS>>
+  PRIVATE $<$<CXX_COMPILER_ID:GNU,LCC,Clang,AppleClang,CrayClang,IBMClang>:$<TARGET_PROPERTY:target_compile_options,INTERFACE_COMPILE_OPTIONS>>
 )
 
 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|LCC")

+ 2 - 2
Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt

@@ -55,7 +55,7 @@ endmacro()
 # detailed features tables, not just meta-features
 
 if (CMAKE_C_COMPILE_FEATURES)
-  if (NOT CMAKE_C_COMPILER_ID MATCHES "^(LCC|Cray|PGI|NVHPC|XL|XLClang|IBMClang|IntelLLVM|Fujitsu|FujitsuClang)$")
+  if (NOT CMAKE_C_COMPILER_ID MATCHES "^(LCC|Cray|CrayClang|PGI|NVHPC|XL|XLClang|IBMClang|IntelLLVM|Fujitsu|FujitsuClang)$")
     set(C_expected_features ${CMAKE_C_COMPILE_FEATURES})
     list(FILTER C_expected_features EXCLUDE REGEX "^c_std_[0-9][0-9]")
   endif()
@@ -98,7 +98,7 @@ if (C_expected_features)
 endif()
 
 if (CMAKE_CXX_COMPILE_FEATURES)
-  if (NOT CMAKE_CXX_COMPILER_ID MATCHES "^(LCC|Cray|PGI|NVHPC|XL|XLClang|IBMClang|IntelLLVM|Fujitsu|FujitsuClang)$")
+  if (NOT CMAKE_CXX_COMPILER_ID MATCHES "^(LCC|Cray|CrayClang|PGI|NVHPC|XL|XLClang|IBMClang|IntelLLVM|Fujitsu|FujitsuClang)$")
     set(CXX_expected_features ${CMAKE_CXX_COMPILE_FEATURES})
     list(FILTER CXX_expected_features EXCLUDE REGEX "^cxx_std_[0-9][0-9]")
   endif()

+ 1 - 1
Tests/RunCMake/FileAPI/codemodel-v2-check.py

@@ -846,7 +846,7 @@ def gen_check_targets(c, g, inSource):
                 e["compileGroups"] = apple_exe_framework["compileGroups"]
                 e["link"] = apple_exe_framework["link"]
 
-    if cxx_compiler_id in ['Clang', 'AppleClang', 'LCC', 'GNU', 'Intel', 'IntelLLVM', 'MSVC', 'Embarcadero', 'IBMClang'] and g["name"] != "Xcode":
+    if cxx_compiler_id in ['Clang', 'AppleClang', 'LCC', 'GNU', 'Intel', 'IntelLLVM', 'MSVC', 'Embarcadero', 'CrayClang', 'IBMClang'] and g["name"] != "Xcode":
         for e in expected:
             if e["name"] == "cxx_exe":
                 if matches(g["name"], "^(Visual Studio |Ninja Multi-Config)"):