You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by al...@apache.org on 2022/08/23 15:05:54 UTC

[kudu] 04/04: [cmake] cleanup on clang version mapping on macOS

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 <al...@apache.org>
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 <ab...@apache.org>
---
 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()