浏览代码

Merge topic 'IBMClang-as-Clang-variant'

a6f2e9eded IBMClang: Express compiler information as a Clang variant
cac5eb3df2 CompilerId: Ensure internal compiler version string is not optimized out

Acked-by: Kitware Robot <[email protected]>
Merge-request: !10024
Brad King 11 月之前
父节点
当前提交
ff66b9f071

+ 1 - 1
Modules/CMakeCCompilerId.c.in

@@ -96,7 +96,7 @@ int main(int argc, char* argv[])
 #ifdef COMPILER_VERSION_MAJOR
 #ifdef COMPILER_VERSION_MAJOR
   require += info_version[argc];
   require += info_version[argc];
 #endif
 #endif
-#ifdef COMPILER_VERSION_INTERNAL
+#if defined(COMPILER_VERSION_INTERNAL) || defined(COMPILER_VERSION_INTERNAL_STR)
   require += info_version_internal[argc];
   require += info_version_internal[argc];
 #endif
 #endif
 #ifdef SIMULATE_ID
 #ifdef SIMULATE_ID

+ 1 - 1
Modules/CMakeCXXCompilerId.cpp.in

@@ -127,7 +127,7 @@ int main(int argc, char* argv[])
 #ifdef COMPILER_VERSION_MAJOR
 #ifdef COMPILER_VERSION_MAJOR
   require += info_version[argc];
   require += info_version[argc];
 #endif
 #endif
-#ifdef COMPILER_VERSION_INTERNAL
+#if defined(COMPILER_VERSION_INTERNAL) || defined(COMPILER_VERSION_INTERNAL_STR)
   require += info_version_internal[argc];
   require += info_version_internal[argc];
 #endif
 #endif
 #ifdef SIMULATE_ID
 #ifdef SIMULATE_ID

+ 1 - 0
Modules/CMakeDetermineCompilerId.cmake

@@ -281,6 +281,7 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
   elseif("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xGNU"
   elseif("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xGNU"
     OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xAppleClang"
     OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xAppleClang"
     OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xFujitsuClang"
     OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xFujitsuClang"
+    OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xIBMClang"
     OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xTIClang")
     OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xTIClang")
     set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "GNU")
     set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "GNU")
   elseif("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xMSVC")
   elseif("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xMSVC")

+ 1 - 1
Modules/CMakeOBJCCompilerId.m.in

@@ -68,7 +68,7 @@ int main(int argc, char* argv[])
 #ifdef COMPILER_VERSION_MAJOR
 #ifdef COMPILER_VERSION_MAJOR
   require += info_version[argc];
   require += info_version[argc];
 #endif
 #endif
-#ifdef COMPILER_VERSION_INTERNAL
+#if defined(COMPILER_VERSION_INTERNAL) || defined(COMPILER_VERSION_INTERNAL_STR)
   require += info_version_internal[argc];
   require += info_version_internal[argc];
 #endif
 #endif
 #ifdef SIMULATE_ID
 #ifdef SIMULATE_ID

+ 1 - 1
Modules/CMakeOBJCXXCompilerId.mm.in

@@ -68,7 +68,7 @@ int main(int argc, char* argv[])
 #ifdef COMPILER_VERSION_MAJOR
 #ifdef COMPILER_VERSION_MAJOR
   require += info_version[argc];
   require += info_version[argc];
 #endif
 #endif
-#ifdef COMPILER_VERSION_INTERNAL
+#if defined(COMPILER_VERSION_INTERNAL) || defined(COMPILER_VERSION_INTERNAL_STR)
   require += info_version_internal[argc];
   require += info_version_internal[argc];
 #endif
 #endif
 #ifdef SIMULATE_ID
 #ifdef SIMULATE_ID

+ 6 - 0
Modules/Compiler/IBMClang-ASM.cmake

@@ -1,5 +1,11 @@
 include(Compiler/IBMClang)
 include(Compiler/IBMClang)
 
 
+set(_ibmclang_version_asm "${CMAKE_ASM_COMPILER_VERSION}")
+set(CMAKE_ASM_COMPILER_VERSION "${CMAKE_ASM_COMPILER_VERSION_INTERNAL}")
+include(Compiler/Clang-ASM)
+set(CMAKE_ASM_COMPILER_VERSION "${_ibmclang_version_asm}")
+unset(_ibmclang_version_asm)
+
 set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;S;asm)
 set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;S;asm)
 
 
 __compiler_ibmclang(ASM)
 __compiler_ibmclang(ASM)

+ 1 - 0
Modules/Compiler/IBMClang-C-DetermineCompiler.cmake

@@ -5,4 +5,5 @@ set(_compiler_id_version_compute "
 # define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__open_xl_release__)
 # define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__open_xl_release__)
 # define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__open_xl_modification__)
 # define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__open_xl_modification__)
 # define @PREFIX@COMPILER_VERSION_TWEAK @MACRO_DEC@(__open_xl_ptf_fix_level__)
 # define @PREFIX@COMPILER_VERSION_TWEAK @MACRO_DEC@(__open_xl_ptf_fix_level__)
+# define @PREFIX@COMPILER_VERSION_INTERNAL_STR  __clang_version__
 ")
 ")

+ 7 - 0
Modules/Compiler/IBMClang-C.cmake

@@ -1,4 +1,11 @@
 include(Compiler/IBMClang)
 include(Compiler/IBMClang)
+
+set(_ibmclang_version_c "${CMAKE_C_COMPILER_VERSION}")
+set(CMAKE_C_COMPILER_VERSION "${CMAKE_C_COMPILER_VERSION_INTERNAL}")
+include(Compiler/Clang-C)
+set(CMAKE_C_COMPILER_VERSION "${_ibmclang_version_c}")
+unset(_ibmclang_version_c)
+
 __compiler_ibmclang(C)
 __compiler_ibmclang(C)
 
 
 set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c)
 set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c)

+ 1 - 0
Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake

@@ -5,4 +5,5 @@ set(_compiler_id_version_compute "
 # define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__open_xl_release__)
 # define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__open_xl_release__)
 # define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__open_xl_modification__)
 # define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__open_xl_modification__)
 # define @PREFIX@COMPILER_VERSION_TWEAK @MACRO_DEC@(__open_xl_ptf_fix_level__)
 # define @PREFIX@COMPILER_VERSION_TWEAK @MACRO_DEC@(__open_xl_ptf_fix_level__)
+# define @PREFIX@COMPILER_VERSION_INTERNAL_STR  __clang_version__
 ")
 ")

+ 6 - 36
Modules/Compiler/IBMClang-CXX.cmake

@@ -1,42 +1,12 @@
 include(Compiler/IBMClang)
 include(Compiler/IBMClang)
-__compiler_ibmclang(CXX)
-
-if("x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
-  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
-      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
-      AND CMAKE_DEPFILE_FLAGS_CXX)
-    # dependencies are computed by the compiler itself
-    set(CMAKE_CXX_DEPFILE_FORMAT gcc)
-    set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
-  endif()
-
-  set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++)
-  set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
-endif()
-
-set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
-set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
-set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
 
 
-set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
-set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
-set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
+set(_ibmclang_version_cxx "${CMAKE_CXX_COMPILER_VERSION}")
+set(CMAKE_CXX_COMPILER_VERSION "${CMAKE_CXX_COMPILER_VERSION_INTERNAL}")
+include(Compiler/Clang-CXX)
+set(CMAKE_CXX_COMPILER_VERSION "${_ibmclang_version_cxx}")
+unset(_ibmclang_version_cxx)
 
 
-set(CMAKE_CXX14_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_CXX_STANDARD_LATEST 14)
-
-if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 17.1.0)
-  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")
-  set(CMAKE_CXX_STANDARD_LATEST 23)
-endif()
+__compiler_ibmclang(CXX)
 
 
 __compiler_check_default_language_standard(CXX 17.1.0 17)
 __compiler_check_default_language_standard(CXX 17.1.0 17)
 
 

+ 1 - 0
Modules/Compiler/IBMClang-FindBinUtils.cmake

@@ -0,0 +1 @@
+include(Compiler/Clang-FindBinUtils)

+ 2 - 54
Modules/Compiler/IBMClang.cmake

@@ -1,25 +1,15 @@
 # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
 # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
 # file Copyright.txt or https://cmake.org/licensing for details.
 # file Copyright.txt or https://cmake.org/licensing for details.
 
 
-
 # This module is shared by multiple languages; use include blocker.
 # This module is shared by multiple languages; use include blocker.
 if(__COMPILER_IBMClang)
 if(__COMPILER_IBMClang)
   return()
   return()
 endif()
 endif()
 set(__COMPILER_IBMClang 1)
 set(__COMPILER_IBMClang 1)
 
 
-include(Compiler/CMakeCommonCompilerMacros)
-
-set(__pch_header_C "c-header")
-set(__pch_header_CXX "c++-header")
-set(__pch_header_OBJC "objective-c-header")
-set(__pch_header_OBJCXX "objective-c++-header")
-
-include(Compiler/GNU)
-
+# Macro to set ibm-clang unique config. This should be called after common
+# clang config is included and include only what isn't common.
 macro(__compiler_ibmclang lang)
 macro(__compiler_ibmclang lang)
-  __compiler_gnu(${lang})
-
   # Feature flags.
   # Feature flags.
   set(CMAKE_${lang}_VERBOSE_FLAG "-v")
   set(CMAKE_${lang}_VERBOSE_FLAG "-v")
   set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "-fPIC")
   set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "-fPIC")
@@ -27,58 +17,16 @@ macro(__compiler_ibmclang lang)
   set(CMAKE_${lang}_RESPONSE_FILE_FLAG "@")
   set(CMAKE_${lang}_RESPONSE_FILE_FLAG "@")
   set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "@")
   set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "@")
 
 
-  set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-isystem ")
-  set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
-
-  set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "--target=")
-  set(CMAKE_${lang}_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN "--gcc-toolchain=")
-
-  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Xlinker" " ")
-  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP)
-
   if(CMAKE_${lang}_COMPILER_TARGET AND "${lang}" STREQUAL "CXX")
   if(CMAKE_${lang}_COMPILER_TARGET AND "${lang}" STREQUAL "CXX")
     list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "--target=${CMAKE_${lang}_COMPILER_TARGET}")
     list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "--target=${CMAKE_${lang}_COMPILER_TARGET}")
   endif()
   endif()
 
 
-  set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
-  set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
-
   # Thin LTO is not yet supported on AIX.
   # Thin LTO is not yet supported on AIX.
   if(NOT (CMAKE_SYSTEM_NAME STREQUAL "AIX"))
   if(NOT (CMAKE_SYSTEM_NAME STREQUAL "AIX"))
     set(_CMAKE_LTO_THIN TRUE)
     set(_CMAKE_LTO_THIN TRUE)
   endif()
   endif()
 
 
-  if(_CMAKE_LTO_THIN)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto=thin")
-  else()
-    set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto")
-  endif()
-
-  set(__ar "${CMAKE_${lang}_COMPILER_AR}")
-  set(__ranlib "${CMAKE_${lang}_COMPILER_RANLIB}")
-
-  set(CMAKE_${lang}_ARCHIVE_CREATE_IPO
-    "\"${__ar}\" qc <TARGET> <LINK_FLAGS> <OBJECTS>"
-  )
-
-  set(CMAKE_${lang}_ARCHIVE_APPEND_IPO
-    "\"${__ar}\" q <TARGET> <LINK_FLAGS> <OBJECTS>"
-  )
-
-  set(CMAKE_${lang}_ARCHIVE_FINISH_IPO
-    "\"${__ranlib}\" <TARGET>"
-  )
-
   if("${lang}" STREQUAL "CXX")
   if("${lang}" STREQUAL "CXX")
     list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-dM" "-E" "-c" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp")
     list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-dM" "-E" "-c" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp")
   endif()
   endif()
-
-  set(CMAKE_PCH_EXTENSION .pch)
-
-  set(CMAKE_PCH_PROLOGUE "#pragma clang system_header")
-
-  set(CMAKE_${lang}_COMPILE_OPTIONS_INSTANTIATE_TEMPLATES_PCH -fpch-instantiate-templates)
-
-  set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -Xclang -include-pch -Xclang <PCH_FILE> -Xclang -include -Xclang <PCH_HEADER>)
-  set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -Xclang -emit-pch -Xclang -include -Xclang <PCH_HEADER> -x ${__pch_header_${lang}})
 endmacro()
 endmacro()