Browse Source

Android: Require Clang 18 for -std=c++23

Update the Clang version checks added by

* commit eacacc70fc (Clang: use -std=c++23 for Clang 17.0+,
                     2023-05-08, v3.27.0-rc1~115^2)
* commit 0183956d30 (Clang: C++26 support,
                     2023-05-16, v3.27.0-rc1~85^2)

to account for Android NDK r26's distribution of a Clang based on a
development version of LLVM/Clang 17.0 that pre-dated addition of
these flags.

Follow the pattern from commit 12e6796b62 (Android: Do not pass
non-existent Clang -std flags, 2018-04-02, v3.12.0-rc1~284^2),
which fixed the same problem for `-std=c++17`.

Fixes: #25281
Brad King 2 years ago
parent
commit
75e9918a66
1 changed files with 8 additions and 1 deletions
  1. 8 1
      Modules/Compiler/Clang.cmake

+ 8 - 1
Modules/Compiler/Clang.cmake

@@ -173,7 +173,12 @@ macro(__compiler_clang_cxx_standards lang)
 
     unset(_clang_version_std17)
 
-    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 17.0)
+    set(_clang_version_std23 17.0)
+    if(CMAKE_SYSTEM_NAME STREQUAL "Android")
+      set(_clang_version_std23 18.0)
+    endif()
+
+    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS "${_clang_version_std23}")
       set(CMAKE_${lang}23_STANDARD_COMPILE_OPTION "-std=c++23")
       set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-std=gnu++23")
       set(CMAKE_${lang}26_STANDARD_COMPILE_OPTION "-std=c++26")
@@ -183,6 +188,8 @@ macro(__compiler_clang_cxx_standards lang)
       set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-std=gnu++2b")
     endif()
 
+    unset(_clang_version_std23)
+
     if("x${CMAKE_${lang}_SIMULATE_ID}" STREQUAL "xMSVC")
       # The MSVC standard library requires C++14, and MSVC itself has no
       # notion of operating in a mode not aware of at least that standard.