From a6f2e9eded2b0d3c93e1cadc87cf4cf4b29893e2 Mon Sep 17 00:00:00 2001 From: David Tenty Date: Thu, 27 Jun 2024 22:21:40 -0500 Subject: [PATCH] IBMClang: Express compiler information as a Clang variant De-duplicate IBMClang compiler information by detecting the base clang version and following the same logic as we do for any other clang of that version. This helps maintain support for new IBMClang features inherited from new base Clang versions. We already use this approach for other Clang variants, like CrayClang and FujitsuClang. --- Modules/CMakeDetermineCompilerId.cmake | 1 + Modules/Compiler/IBMClang-ASM.cmake | 6 ++ .../IBMClang-C-DetermineCompiler.cmake | 1 + Modules/Compiler/IBMClang-C.cmake | 7 +++ .../IBMClang-CXX-DetermineCompiler.cmake | 1 + Modules/Compiler/IBMClang-CXX.cmake | 44 +++------------ Modules/Compiler/IBMClang-FindBinUtils.cmake | 1 + Modules/Compiler/IBMClang.cmake | 56 +------------------ 8 files changed, 26 insertions(+), 91 deletions(-) create mode 100644 Modules/Compiler/IBMClang-FindBinUtils.cmake diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index 5e880761ad..9c3cef67c4 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -281,6 +281,7 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src) elseif("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xGNU" OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xAppleClang" OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xFujitsuClang" + OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xIBMClang" OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xTIClang") set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "GNU") elseif("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xMSVC") diff --git a/Modules/Compiler/IBMClang-ASM.cmake b/Modules/Compiler/IBMClang-ASM.cmake index dffc085f05..b9f9f4677d 100644 --- a/Modules/Compiler/IBMClang-ASM.cmake +++ b/Modules/Compiler/IBMClang-ASM.cmake @@ -1,5 +1,11 @@ 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) __compiler_ibmclang(ASM) diff --git a/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake b/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake index 623c8af542..d25b1e22c1 100644 --- a/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake +++ b/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_PATCH @MACRO_DEC@(__open_xl_modification__) # define @PREFIX@COMPILER_VERSION_TWEAK @MACRO_DEC@(__open_xl_ptf_fix_level__) +# define @PREFIX@COMPILER_VERSION_INTERNAL_STR __clang_version__ ") diff --git a/Modules/Compiler/IBMClang-C.cmake b/Modules/Compiler/IBMClang-C.cmake index fde6a3b42c..0039f1c698 100644 --- a/Modules/Compiler/IBMClang-C.cmake +++ b/Modules/Compiler/IBMClang-C.cmake @@ -1,4 +1,11 @@ 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) set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c) diff --git a/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake b/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake index 623c8af542..d25b1e22c1 100644 --- a/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake +++ b/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_PATCH @MACRO_DEC@(__open_xl_modification__) # define @PREFIX@COMPILER_VERSION_TWEAK @MACRO_DEC@(__open_xl_ptf_fix_level__) +# define @PREFIX@COMPILER_VERSION_INTERNAL_STR __clang_version__ ") diff --git a/Modules/Compiler/IBMClang-CXX.cmake b/Modules/Compiler/IBMClang-CXX.cmake index ec97381bd7..071eec8ff0 100644 --- a/Modules/Compiler/IBMClang-CXX.cmake +++ b/Modules/Compiler/IBMClang-CXX.cmake @@ -1,43 +1,13 @@ include(Compiler/IBMClang) + +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) + __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(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_check_default_language_standard(CXX 17.1.0 17) set(CMAKE_CXX_COMPILE_OBJECT diff --git a/Modules/Compiler/IBMClang-FindBinUtils.cmake b/Modules/Compiler/IBMClang-FindBinUtils.cmake new file mode 100644 index 0000000000..e721c8708e --- /dev/null +++ b/Modules/Compiler/IBMClang-FindBinUtils.cmake @@ -0,0 +1 @@ +include(Compiler/Clang-FindBinUtils) diff --git a/Modules/Compiler/IBMClang.cmake b/Modules/Compiler/IBMClang.cmake index a43f788273..5d8d19a8fa 100644 --- a/Modules/Compiler/IBMClang.cmake +++ b/Modules/Compiler/IBMClang.cmake @@ -1,25 +1,15 @@ # 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_IBMClang) return() endif() 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) - __compiler_gnu(${lang}) - # Feature flags. set(CMAKE_${lang}_VERBOSE_FLAG "-v") 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_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") list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "--target=${CMAKE_${lang}_COMPILER_TARGET}") 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. if(NOT (CMAKE_SYSTEM_NAME STREQUAL "AIX")) set(_CMAKE_LTO_THIN TRUE) 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 " - ) - - set(CMAKE_${lang}_ARCHIVE_APPEND_IPO - "\"${__ar}\" q " - ) - - set(CMAKE_${lang}_ARCHIVE_FINISH_IPO - "\"${__ranlib}\" " - ) - if("${lang}" STREQUAL "CXX") list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-dM" "-E" "-c" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp") 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 -Xclang -include -Xclang ) - set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -Xclang -emit-pch -Xclang -include -Xclang -x ${__pch_header_${lang}}) endmacro()