This is an automated email from the ASF dual-hosted git repository. alexey pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kudu.git
commit f1bd77c1220aa1a4e25dcbae7b73b69e3046b962 Author: Alexey Serbin <[email protected]> AuthorDate: Fri Aug 19 14:19:03 2022 -0700 [cmake] cleanup on clang version mapping on macOS This patch cleans up the code that determines compiler type and version on macOS for Xcode-based LLVM/CLANG. As it turns out, there is a well documented mapping for clang versions: see [1] and [2]. I also updated unified regex patterns used to find versions of the compiler in its version string. References: [1] https://trac.macports.org/wiki/XcodeVersionInfo [2] https://en.wikipedia.org/wiki/Xcode#Version_history Change-Id: I656dd4b20c7c852746861861f0741763b02609d5 Reviewed-on: http://gerrit.cloudera.org:8080/18874 Tested-by: Kudu Jenkins Reviewed-by: Attila Bukor <[email protected]> --- cmake_modules/CompilerInfo.cmake | 119 +++++++++++++++++++++++++++------------ 1 file changed, 83 insertions(+), 36 deletions(-) diff --git a/cmake_modules/CompilerInfo.cmake b/cmake_modules/CompilerInfo.cmake index 8422e9957..8883d340f 100644 --- a/cmake_modules/CompilerInfo.cmake +++ b/cmake_modules/CompilerInfo.cmake @@ -21,54 +21,101 @@ execute_process(COMMAND env LANG=C "${CMAKE_CXX_COMPILER}" -v ERROR_VARIABLE COMPILER_VERSION_FULL) message(${COMPILER_VERSION_FULL}) -# clang on Linux and Mac OS X before 10.9 -if("${COMPILER_VERSION_FULL}" MATCHES ".*clang version.*") - set(COMPILER_FAMILY "clang") - string(REGEX REPLACE ".*clang version ([0-9]+\\.[0-9]+).*" "\\1" - COMPILER_VERSION "${COMPILER_VERSION_FULL}") -# clang on Mac OS X 10.9 and later -elseif("${COMPILER_VERSION_FULL}" MATCHES ".*based on LLVM.*") - set(COMPILER_FAMILY "clang") - string(REGEX REPLACE ".*based on LLVM ([0-9]+\\.[0.9]+).*" "\\1" +# Information on Xcode, llvm-gcc, and clang versions. +# https://trac.macports.org/wiki/XcodeVersionInfo +# Information on Xcode/LLVM and LLVM Apple/upstream version mapping: +# https://en.wikipedia.org/wiki/Xcode#Xcode_7.0_-_12.x_(since_Free_On-Device_Development) + +# gcc +if("${COMPILER_VERSION_FULL}" MATCHES ".*gcc version.*") + set(COMPILER_FAMILY "gcc") + string(REGEX REPLACE ".*gcc version ([0-9]+(\\.[0-9]+)*).*" "\\1" COMPILER_VERSION "${COMPILER_VERSION_FULL}") -# clang on Mac OS X, XCode 7. -elseif("${COMPILER_VERSION_FULL}" MATCHES ".*clang-7") +# clang on Mac OS X, XCode 7 +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple LLVM version [0-9]+(\\.[0-9]+)* \\(clang-700\\.") set(COMPILER_FAMILY "clang") set(COMPILER_VERSION "3.7.0svn") - -# clang on Mac OS X, XCode 8. -elseif("${COMPILER_VERSION_FULL}" MATCHES ".*clang-8") +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple LLVM version [0-9]+(\\.[0-9]+)* \\(clang-703\\.") set(COMPILER_FAMILY "clang") set(COMPILER_VERSION "3.8.0svn") -# clang on Mac OS X, XCode 9. -# -# TODO(dan): 4.0.0svn is just a guess, because Apple has not (as of the time of -# writing) released the sources [1]. [2] and [3] are good resources for -# determining the upstream Clang version as well. -# -# [1]: https://opensource.apple.com/ -# [2]: https://gist.github.com/yamaya/2924292 -# [3]: https://gist.github.com/epipping/ef8b02b0cfaec4a5ebf3a57092145a3f -elseif("${COMPILER_VERSION_FULL}" MATCHES ".*clang-9") +# clang on Mac OS X, XCode 8 +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple LLVM version [0-9]+(\\.[0-9]+)* \\(clang-80[02]\\.") set(COMPILER_FAMILY "clang") - set(COMPILER_VERSION "4.0.0svn") + set(COMPILER_VERSION "3.9.0svn") -# clang on macOS, XCode 10. -# -# TODO(wdberkeley): 6.0.0svn is also just a guess, for the same reason, and -# generated from the same sources, particularly the comment -# https://gist.github.com/yamaya/2924292#gistcomment-801888. -elseif("${COMPILER_VERSION_FULL}" MATCHES ".*clang-10") +# clang on Mac OS X, XCode 9 +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple LLVM version [0-9]+(\\.[0-9]+)* \\(clang-900\\.") set(COMPILER_FAMILY "clang") - set(COMPILER_VERSION "6.0.0svn") + set(COMPILER_VERSION "4.0.0") +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple LLVM version [0-9]+(\\.[0-9]+)* \\(clang-902\\.") + set(COMPILER_FAMILY "clang") + set(COMPILER_VERSION "5.0.2") -# gcc -elseif("${COMPILER_VERSION_FULL}" MATCHES ".*gcc version.*") - set(COMPILER_FAMILY "gcc") - string(REGEX REPLACE ".*gcc version ([0-9\\.]+).*" "\\1" +# clang on macOS, XCode 10 +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple LLVM version [0-9]+(\\.[0-9]+)* \\(clang-1000\\.") + set(COMPILER_FAMILY "clang") + set(COMPILER_VERSION "6.0.1") +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple LLVM version [0-9]+(\\.[0-9]+)* \\(clang-1001\\.") + set(COMPILER_FAMILY "clang") + set(COMPILER_VERSION "7.0.0") + +# clang on macOS, XCode 11 +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple clang version [0-9]+(\\.[0-9]+)* \\(clang-1100\\.") + set(COMPILER_FAMILY "clang") + set(COMPILER_VERSION "8.0.0") +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple clang version [0-9]+(\\.[0-9]+)* \\(clang-1103\\.") + set(COMPILER_FAMILY "clang") + set(COMPILER_VERSION "9.0.0") + +# clang on macOS, XCode 12 +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple clang version [0-9]+(\\.[0-9]+)* \\(clang-1200\\.") + set(COMPILER_FAMILY "clang") + set(COMPILER_VERSION "10.0.0") +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple clang version [0-9]+(\\.[0-9]+)* \\(clang-1205\\.") + set(COMPILER_FAMILY "clang") + set(COMPILER_VERSION "11.1.0") + +# clang on macOS, XCode 13 +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple clang version [0-9]+(\\.[0-9]+)* \\(clang-1300\\.") + set(COMPILER_FAMILY "clang") + set(COMPILER_VERSION "12.0.0") +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple clang version [0-9]+(\\.[0-9]+)* \\(clang-1316\\.") + set(COMPILER_FAMILY "clang") + set(COMPILER_VERSION "13.0.0") + +# clang on macOS, XCode 14 +elseif("${COMPILER_VERSION_FULL}" MATCHES + "Apple clang version [0-9]+(\\.[0-9]+)* \\(clang-1400\\.") + set(COMPILER_FAMILY "clang") + set(COMPILER_VERSION "14.0.0") + +# clang on Mac OS X with Xcode verions from 3.2.6 to 6.4 inclusive +elseif("${COMPILER_VERSION_FULL}" MATCHES "Apple .* \\(based on LLVM.*") + set(COMPILER_FAMILY "clang") + string(REGEX REPLACE ".* \\(based on LLVM ([0-9]+(\\.[0-9]+)*.*)\\).*" "\\1" COMPILER_VERSION "${COMPILER_VERSION_FULL}") + +# clang on Linux and MacOS (other than Xcode-based) +elseif("${COMPILER_VERSION_FULL}" MATCHES ".*clang version.*") + set(COMPILER_FAMILY "clang") + string(REGEX REPLACE ".*clang version ([0-9]+(\\.[0-9]+)*).*" "\\1" + COMPILER_VERSION "${COMPILER_VERSION_FULL}") + else() message(FATAL_ERROR "Unknown compiler. Version info:\n${COMPILER_VERSION_FULL}") endif()
