Merge topic 'lang-standard-latest'

7c38e6bb52 Add CMAKE_<LANG>_STANDARD_LATEST variables
fddb165c6c AppleClang: Fix Objective C 23 support detection
1dff17108d Modules: Fix ARMClang and TIClang language standard compile options

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !9314
This commit is contained in:
Brad King
2024-05-01 13:20:31 +00:00
committed by Kitware Robot
79 changed files with 493 additions and 52 deletions

View File

@@ -645,6 +645,7 @@ Variables for Languages
/variable/CMAKE_LANG_STANDARD
/variable/CMAKE_LANG_STANDARD_DEFAULT
/variable/CMAKE_LANG_STANDARD_INCLUDE_DIRECTORIES
/variable/CMAKE_LANG_STANDARD_LATEST
/variable/CMAKE_LANG_STANDARD_LIBRARIES
/variable/CMAKE_LANG_STANDARD_REQUIRED
/variable/CMAKE_OBJC_EXTENSIONS

View File

@@ -0,0 +1,5 @@
lang-standard-latest
--------------------
* The :variable:`CMAKE_<LANG>_STANDARD_LATEST` variable was added to
describe the latest supported standard of language ``<LANG>``.

View File

@@ -0,0 +1,64 @@
CMAKE_<LANG>_STANDARD_LATEST
-----------------------------
.. versionadded:: 3.30
This variable represents the minimum between the latest version of the
standard for language ``<LANG>`` which is supported by the current compiler
and the latest version which is supported by CMake. Its value will be set to
one of the supported values of the corresponding :prop_tgt:`<LANG>_STANDARD`
target property; see the documentation of that property for a list of
supported languages.
See the :manual:`cmake-compile-features(7)` manual for information on compile
features and a list of supported compilers.
.. note::
``CMAKE_<LANG>_STANDARD_LATEST`` will never be set to a language standard
which CMake recognizes but provides no support for. Unless explicitly
stated otherwise, every value which is supported by the corresponding
:prop_tgt:`<LANG>_STANDARD` target property represents a standard of
language ``<LANG>`` which is both recognized and supported by CMake.
Checking for Language Standard Support
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
It is possible to use the value of the ``CMAKE_<LANG>_STANDARD_LATEST``
variable to check for language standard support. This can be used to, e.g.,
conditionally enable optional features for a distributed library.
When doing so, one should be careful to **not** rely on integer value
comparisons between standard levels. This is because some older standards of
a given language which are supported by CMake (e.g., C++98, represented as
``98``) will have a higher numerical value than newer standards of that same
language.
The following code sample demonstrates how one might correctly check for
C++17 support:
.. code-block:: cmake
# Careful! We cannot do direct integer comparisons with
# CMAKE_CXX_STANDARD_LATEST because some earlier C++ standards (e.g.,
# C++98) will have a higher numerical value than our requirement (C++17).
#
# Instead, we keep a list of unsupported C++ standards and check if
# CMAKE_CXX_STANDARD_LATEST appears in that list.
set(UNSUPPORTED_CXX_STANDARDS
98
11
14
)
list(FIND UNSUPPORTED_CXX_STANDARDS ${CMAKE_CXX_STANDARD_LATEST} UNSUPPORTED_CXX_STANDARDS_INDEX)
if(UNSUPPORTED_CXX_STANDARDS_INDEX EQUAL -1)
# We know that the current compiler supports at least C++17. Enabling
# some optional feature...
else()
message(STATUS
"Feature X is disabled because it requires C++17, but the current "
"compiler only supports C++${CMAKE_CXX_STANDARD_LATEST}."
)
endif()

View File

@@ -6,6 +6,7 @@ set(CMAKE_C_COMPILER_VERSION_INTERNAL "@CMAKE_C_COMPILER_VERSION_INTERNAL@")
set(CMAKE_C_COMPILER_WRAPPER "@CMAKE_C_COMPILER_WRAPPER@")
set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "@CMAKE_C_STANDARD_COMPUTED_DEFAULT@")
set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "@CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT@")
set(CMAKE_C_STANDARD_LATEST "@CMAKE_C_STANDARD_LATEST@")
set(CMAKE_C_COMPILE_FEATURES "@CMAKE_C_COMPILE_FEATURES@")
set(CMAKE_C90_COMPILE_FEATURES "@CMAKE_C90_COMPILE_FEATURES@")
set(CMAKE_C99_COMPILE_FEATURES "@CMAKE_C99_COMPILE_FEATURES@")

View File

@@ -7,6 +7,7 @@ set(CMAKE_CUDA_DEVICE_LINKER "@CMAKE_CUDA_DEVICE_LINKER@")
set(CMAKE_CUDA_FATBINARY "@CMAKE_CUDA_FATBINARY@")
set(CMAKE_CUDA_STANDARD_COMPUTED_DEFAULT "@CMAKE_CUDA_STANDARD_COMPUTED_DEFAULT@")
set(CMAKE_CUDA_EXTENSIONS_COMPUTED_DEFAULT "@CMAKE_CUDA_EXTENSIONS_COMPUTED_DEFAULT@")
set(CMAKE_CUDA_STANDARD_LATEST "@CMAKE_CUDA_STANDARD_LATEST@")
set(CMAKE_CUDA_COMPILE_FEATURES "@CMAKE_CUDA_COMPILE_FEATURES@")
set(CMAKE_CUDA03_COMPILE_FEATURES "@CMAKE_CUDA03_COMPILE_FEATURES@")
set(CMAKE_CUDA11_COMPILE_FEATURES "@CMAKE_CUDA11_COMPILE_FEATURES@")

View File

@@ -6,6 +6,7 @@ set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "@CMAKE_CXX_COMPILER_VERSION_INTERNAL@")
set(CMAKE_CXX_COMPILER_WRAPPER "@CMAKE_CXX_COMPILER_WRAPPER@")
set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "@CMAKE_CXX_STANDARD_COMPUTED_DEFAULT@")
set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "@CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT@")
set(CMAKE_CXX_STANDARD_LATEST "@CMAKE_CXX_STANDARD_LATEST@")
set(CMAKE_CXX_COMPILE_FEATURES "@CMAKE_CXX_COMPILE_FEATURES@")
set(CMAKE_CXX98_COMPILE_FEATURES "@CMAKE_CXX98_COMPILE_FEATURES@")
set(CMAKE_CXX11_COMPILE_FEATURES "@CMAKE_CXX11_COMPILE_FEATURES@")

View File

@@ -5,6 +5,7 @@ set(CMAKE_HIP_COMPILER_ID "@CMAKE_HIP_COMPILER_ID@")
set(CMAKE_HIP_COMPILER_VERSION "@CMAKE_HIP_COMPILER_VERSION@")
set(CMAKE_HIP_STANDARD_COMPUTED_DEFAULT "@CMAKE_HIP_STANDARD_COMPUTED_DEFAULT@")
set(CMAKE_HIP_EXTENSIONS_COMPUTED_DEFAULT "@CMAKE_HIP_EXTENSIONS_COMPUTED_DEFAULT@")
set(CMAKE_HIP_STANDARD_LATEST "@CMAKE_HIP_STANDARD_LATEST@")
set(CMAKE_HIP_COMPILE_FEATURES "@CMAKE_HIP_COMPILE_FEATURES@")
set(CMAKE_HIP98_COMPILE_FEATURES "@CMAKE_HIP03_COMPILE_FEATURES@")
set(CMAKE_HIP11_COMPILE_FEATURES "@CMAKE_HIP11_COMPILE_FEATURES@")

View File

@@ -6,6 +6,7 @@ set(CMAKE_OBJC_COMPILER_VERSION_INTERNAL "@CMAKE_OBJC_COMPILER_VERSION_INTERNAL@
set(CMAKE_OBJC_COMPILER_WRAPPER "@CMAKE_OBJC_COMPILER_WRAPPER@")
set(CMAKE_OBJC_STANDARD_COMPUTED_DEFAULT "@CMAKE_OBJC_STANDARD_COMPUTED_DEFAULT@")
set(CMAKE_OBJC_EXTENSIONS_COMPUTED_DEFAULT "@CMAKE_OBJC_EXTENSIONS_COMPUTED_DEFAULT@")
set(CMAKE_OBJC_STANDARD_LATEST "@CMAKE_OBJC_STANDARD_LATEST@")
set(CMAKE_OBJC_COMPILE_FEATURES "@CMAKE_OBJC_COMPILE_FEATURES@")
set(CMAKE_OBJC90_COMPILE_FEATURES "@CMAKE_OBJC90_COMPILE_FEATURES@")
set(CMAKE_OBJC99_COMPILE_FEATURES "@CMAKE_OBJC99_COMPILE_FEATURES@")

View File

@@ -6,6 +6,7 @@ set(CMAKE_OBJCXX_COMPILER_VERSION_INTERNAL "@CMAKE_OBJCXX_COMPILER_VERSION_INTER
set(CMAKE_OBJCXX_COMPILER_WRAPPER "@CMAKE_OBJCXX_COMPILER_WRAPPER@")
set(CMAKE_OBJCXX_STANDARD_COMPUTED_DEFAULT "@CMAKE_OBJCXX_STANDARD_COMPUTED_DEFAULT@")
set(CMAKE_OBJCXX_EXTENSIONS_COMPUTED_DEFAULT "@CMAKE_OBJCXX_EXTENSIONS_COMPUTED_DEFAULT@")
set(CMAKE_OBJCXX_STANDARD_LATEST "@CMAKE_OBJCXX_STANDARD_LATEST@")
set(CMAKE_OBJCXX_COMPILE_FEATURES "@CMAKE_OBJCXX_COMPILE_FEATURES@")
set(CMAKE_OBJCXX98_COMPILE_FEATURES "@CMAKE_OBJCXX98_COMPILE_FEATURES@")
set(CMAKE_OBJCXX11_COMPILE_FEATURES "@CMAKE_OBJCXX11_COMPILE_FEATURES@")

View File

@@ -8,4 +8,6 @@ set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 99)
__compiler_check_default_language_standard(C 8.0.0.0 99)

View File

@@ -6,11 +6,13 @@ __compiler_adsp(CXX)
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION -c++)
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -g++)
set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 98)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.3.0.0)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION -c++11)
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION -c++11 -g++)
set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 11)
endif()
__compiler_check_default_language_standard(CXX 8.0.0.0 98)

View File

@@ -21,3 +21,13 @@ set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 11)
# Including the "${CMAKE_ROOT}/Modules/Compiler/Clang-C.cmake" script above may set several other compile option
# variables which do not necessarily apply here. So, we unset those variables accordingly.
unset(CMAKE_C17_STANDARD_COMPILE_OPTION)
unset(CMAKE_C17_EXTENSION_COMPILE_OPTION)
unset(CMAKE_C23_STANDARD_COMPILE_OPTION)
unset(CMAKE_C23_EXTENSION_COMPILE_OPTION)

View File

@@ -26,16 +26,20 @@ if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.0)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 11)
endif()
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0)
set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std=c17")
set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std=gnu17")
set(CMAKE_C_STANDARD_LATEST 17)
endif()
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0.3)
set(CMAKE_C23_STANDARD_COMPILE_OPTION "-std=c2x")
set(CMAKE_C23_EXTENSION_COMPILE_OPTION "-std=gnu2x")
set(CMAKE_C_STANDARD_LATEST 23)
endif()
__compiler_check_default_language_standard(C 4.0 99 9.1 11 12.0.5 17)

View File

@@ -22,25 +22,31 @@ if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
set(CMAKE_CXX_STANDARD_LATEST 11)
endif()
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.1)
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 14)
elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
# AppleClang 5.0 knows this flag, but does not set a __cplusplus macro greater than 201103L
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 14)
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
set(CMAKE_CXX_STANDARD_LATEST 17)
elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.1)
set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++1z")
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
set(CMAKE_CXX_STANDARD_LATEST 17)
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
@@ -50,14 +56,17 @@ endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++20")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
set(CMAKE_CXX_STANDARD_LATEST 20)
elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
set(CMAKE_CXX_STANDARD_LATEST 20)
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
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 4.0 98)

View File

@@ -21,6 +21,8 @@ if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 4.0)
set(CMAKE_OBJC11_STANDARD_COMPILE_OPTION "-std=c11")
set(CMAKE_OBJC11_EXTENSION_COMPILE_OPTION "-std=gnu11")
set(CMAKE_OBJC11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_OBJC_STANDARD_LATEST 11)
endif()
# AppleClang 10.0 was the oldest compiler available to test C17 support
@@ -28,12 +30,16 @@ if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 10.0)
set(CMAKE_OBJC17_STANDARD_COMPILE_OPTION "-std=c17")
set(CMAKE_OBJC17_EXTENSION_COMPILE_OPTION "-std=gnu17")
set(CMAKE_OBJC17_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_OBJC_STANDARD_LATEST 17)
endif()
if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 11.0)
if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 11.0.3)
set(CMAKE_OBJC23_STANDARD_COMPILE_OPTION "-std=c2x")
set(CMAKE_OBJC23_EXTENSION_COMPILE_OPTION "-std=gnu2x")
set(CMAKE_OBJC23_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_OBJC_STANDARD_LATEST 23)
endif()
# AppleClang 10.0 was the oldest compiler available to test default C11 support

View File

@@ -19,25 +19,31 @@ if(NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 4.0)
set(CMAKE_OBJCXX11_STANDARD_COMPILE_OPTION "-std=c++11")
set(CMAKE_OBJCXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
set(CMAKE_OBJCXX_STANDARD_LATEST 11)
endif()
if(NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 6.1)
set(CMAKE_OBJCXX14_STANDARD_COMPILE_OPTION "-std=c++14")
set(CMAKE_OBJCXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
set(CMAKE_OBJCXX14_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_OBJCXX_STANDARD_LATEST 14)
elseif(NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 5.1)
# AppleClang 5.0 knows this flag, but does not set a __cplusplus macro greater than 201103L
set(CMAKE_OBJCXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
set(CMAKE_OBJCXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
set(CMAKE_OBJCXX14_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_OBJCXX_STANDARD_LATEST 14)
endif()
if (NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 10.0)
set(CMAKE_OBJCXX17_STANDARD_COMPILE_OPTION "-std=c++17")
set(CMAKE_OBJCXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
set(CMAKE_OBJCXX_STANDARD_LATEST 17)
elseif (NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 6.1)
set(CMAKE_OBJCXX17_STANDARD_COMPILE_OPTION "-std=c++1z")
set(CMAKE_OBJCXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
set(CMAKE_OBJCXX_STANDARD_LATEST 17)
endif()
if (NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 8.0)
@@ -47,6 +53,7 @@ endif()
if (NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 10.0)
set(CMAKE_OBJCXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
set(CMAKE_OBJCXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
set(CMAKE_OBJCXX_STANDARD_LATEST 20)
endif()
__compiler_check_default_language_standard(OBJCXX 4.0 98)

View File

@@ -33,27 +33,34 @@ if("x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
set(CMAKE_C_STANDARD_LATEST 99)
endif()
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 3.1)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
set(CMAKE_C_STANDARD_LATEST 11)
elseif(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 3.0)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c1x")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu1x")
set(CMAKE_C_STANDARD_LATEST 11)
endif()
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std=c17")
set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std=gnu17")
set(CMAKE_C_STANDARD_LATEST 17)
endif()
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 18.0)
set(CMAKE_C23_STANDARD_COMPILE_OPTION "-std=c23")
set(CMAKE_C23_EXTENSION_COMPILE_OPTION "-std=gnu23")
set(CMAKE_C_STANDARD_LATEST 23)
elseif(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0)
set(CMAKE_C23_STANDARD_COMPILE_OPTION "-std=c2x")
set(CMAKE_C23_EXTENSION_COMPILE_OPTION "-std=gnu2x")
set(CMAKE_C_STANDARD_LATEST 23)
endif()
else()
set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
@@ -74,6 +81,8 @@ else()
set(CMAKE_C17_STANDARD_COMPILE_OPTION "")
set(CMAKE_C17_EXTENSION_COMPILE_OPTION "")
endif()
set(CMAKE_C_STANDARD_LATEST 17)
endif()
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 2.1)

View File

@@ -22,18 +22,24 @@ if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 3.4)
set(CMAKE_OBJC11_STANDARD_COMPILE_OPTION "-std=c11")
set(CMAKE_OBJC11_EXTENSION_COMPILE_OPTION "-std=gnu11")
set(CMAKE_OBJC11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_OBJC_STANDARD_LATEST 11)
endif()
if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 6.0)
set(CMAKE_OBJC17_STANDARD_COMPILE_OPTION "-std=c17")
set(CMAKE_OBJC17_EXTENSION_COMPILE_OPTION "-std=gnu17")
set(CMAKE_OBJC17_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_OBJC_STANDARD_LATEST 17)
endif()
if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 9.0)
set(CMAKE_OBJC23_STANDARD_COMPILE_OPTION "-std=c2x")
set(CMAKE_OBJC23_EXTENSION_COMPILE_OPTION "-std=gnu2x")
set(CMAKE_OBJC23_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_OBJC_STANDARD_LATEST 23)
endif()
__compiler_check_default_language_standard(OBJC 3.4 99 3.6 11)

View File

@@ -135,6 +135,7 @@ macro(__compiler_clang_cxx_standards lang)
if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 2.1)
set(CMAKE_${lang}98_STANDARD_COMPILE_OPTION "-std=c++98")
set(CMAKE_${lang}98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
set(CMAKE_${lang}_STANDARD_LATEST 98)
endif()
if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.1)
@@ -142,19 +143,23 @@ macro(__compiler_clang_cxx_standards lang)
set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c++11")
set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
set(CMAKE_${lang}11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_${lang}_STANDARD_LATEST 11)
elseif(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 2.1)
set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c++0x")
set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
set(CMAKE_${lang}_STANDARD_LATEST 11)
endif()
if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.5)
set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std=c++14")
set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
set(CMAKE_${lang}14_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_${lang}_STANDARD_LATEST 14)
elseif(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4)
set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std=c++1y")
set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
set(CMAKE_${lang}14_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_${lang}_STANDARD_LATEST 14)
endif()
set(_clang_version_std17 5.0)
@@ -165,17 +170,21 @@ macro(__compiler_clang_cxx_standards lang)
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS "${_clang_version_std17}")
set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c++17")
set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
set(CMAKE_${lang}_STANDARD_LATEST 17)
elseif (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.5)
set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c++1z")
set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
set(CMAKE_${lang}_STANDARD_LATEST 17)
endif()
if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 11.0)
set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++20")
set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
set(CMAKE_${lang}_STANDARD_LATEST 20)
elseif(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS "${_clang_version_std17}")
set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++2a")
set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
set(CMAKE_${lang}_STANDARD_LATEST 20)
endif()
unset(_clang_version_std17)
@@ -190,9 +199,11 @@ macro(__compiler_clang_cxx_standards lang)
set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-std=gnu++23")
set(CMAKE_${lang}26_STANDARD_COMPILE_OPTION "-std=c++26")
set(CMAKE_${lang}26_EXTENSION_COMPILE_OPTION "-std=gnu++26")
set(CMAKE_${lang}_STANDARD_LATEST 26)
elseif(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 12.0)
set(CMAKE_${lang}23_STANDARD_COMPILE_OPTION "-std=c++2b")
set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-std=gnu++2b")
set(CMAKE_${lang}_STANDARD_LATEST 23)
endif()
unset(_clang_version_std23)
@@ -231,14 +242,18 @@ macro(__compiler_clang_cxx_standards lang)
set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std:c++latest")
endif()
set(CMAKE_${lang}_STANDARD_LATEST 17)
if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0)
set(CMAKE_${lang}23_STANDARD_COMPILE_OPTION "-std:c++latest")
set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-std:c++latest")
set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std:c++20")
set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std:c++20")
set(CMAKE_${lang}_STANDARD_LATEST 23)
elseif(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std:c++latest")
set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std:c++latest")
set(CMAKE_${lang}_STANDARD_LATEST 20)
endif()
__compiler_check_default_language_standard(${lang} 3.9 14)
@@ -262,6 +277,14 @@ macro(__compiler_clang_cxx_standards lang)
# There is no meaningful default for this
set(CMAKE_${lang}_STANDARD_DEFAULT "")
if(CMAKE_${lang}_SIMULATE_VERSION VERSION_GREATER_EQUAL 19.0)
set(CMAKE_${lang}_STANDARD_LATEST 17)
elseif(CMAKE_${lang}_SIMULATE_VERSION VERSION_GREATER_EQUAL 18.0)
set(CMAKE_${lang}_STANDARD_LATEST 14)
elseif(CMAKE_${lang}_SIMULATE_VERSION VERSION_GREATER_EQUAL 16.0)
set(CMAKE_${lang}_STANDARD_LATEST 11)
endif()
# There are no compiler modes so we only need to test features once.
# Override the default macro for this special case. Pretend that
# all language standards are available so that at least compilation

View File

@@ -14,10 +14,12 @@ if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1)
set(CMAKE_C99_STANDARD_COMPILE_OPTION -h c99,conform)
set(CMAKE_C99_EXTENSION_COMPILE_OPTION -h c99,gnu)
set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 99)
if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.5)
set(CMAKE_C11_STANDARD_COMPILE_OPTION -h std=c11,conform)
set(CMAKE_C11_EXTENSION_COMPILE_OPTION -h std=c11,gnu)
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 11)
endif ()
endif ()

View File

@@ -11,15 +11,18 @@ if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1)
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION -h conform)
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -h gnu)
set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 98)
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.4)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION -h std=c++11)
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION -h std=c++11,gnu)
set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 11)
endif()
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.6)
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION -h std=c++14)
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION -h std=c++14,gnu)
set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 14)
endif ()
endif ()

View File

@@ -27,4 +27,6 @@ set(CMAKE_C17_EXTENSION_COMPILE_OPTION -std=gnu17)
set(CMAKE_C23_STANDARD_COMPILE_OPTION -std=c2x)
set(CMAKE_C23_EXTENSION_COMPILE_OPTION -std=gnu2x)
set(CMAKE_C_STANDARD_LATEST 23)
__compiler_check_default_language_standard(C 15.0.0 17)

View File

@@ -32,4 +32,6 @@ 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)
__compiler_check_default_language_standard(CXX 15.0.0 14)

View File

@@ -15,6 +15,8 @@ if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4)
set(CMAKE_C11_STANDARD_COMPILE_OPTION -std=c11)
set(CMAKE_C11_EXTENSION_COMPILE_OPTION -std=gnu11)
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 11)
endif()
__compiler_check_default_language_standard(C 4 11)

View File

@@ -42,6 +42,8 @@ if(CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 4)
set(CMAKE_CXX17_STANDARD_COMPILE_OPTION -std=c++17)
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION -std=gnu++17)
set(CMAKE_CXX_STANDARD_LATEST 17)
endif()
__compiler_check_default_language_standard(CXX 4 14)

View File

@@ -1,5 +1,6 @@
include(Compiler/GNU)
__compiler_gnu(OBJC)
__compiler_gnu_c_standards(OBJC)
if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)

View File

@@ -1,5 +1,6 @@
include(Compiler/GNU)
__compiler_gnu(OBJCXX)
__compiler_gnu_cxx_standards(OBJCXX)
if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"

View File

@@ -212,9 +212,11 @@ macro(__compiler_gnu_c_standards lang)
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.5)
set(CMAKE_${lang}90_STANDARD_COMPILE_OPTION "-std=c90")
set(CMAKE_${lang}90_EXTENSION_COMPILE_OPTION "-std=gnu90")
set(CMAKE_${lang}_STANDARD_LATEST 90)
elseif (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4)
set(CMAKE_${lang}90_STANDARD_COMPILE_OPTION "-std=c89")
set(CMAKE_${lang}90_EXTENSION_COMPILE_OPTION "-std=gnu89")
set(CMAKE_${lang}_STANDARD_LATEST 90)
endif()
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4)
@@ -222,25 +224,30 @@ macro(__compiler_gnu_c_standards lang)
set(CMAKE_${lang}99_STANDARD_COMPILE_OPTION "-std=c99")
set(CMAKE_${lang}99_EXTENSION_COMPILE_OPTION "-std=gnu99")
set(CMAKE_${lang}99_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_${lang}_STANDARD_LATEST 99)
endif()
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.7)
set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c11")
set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu11")
set(CMAKE_${lang}11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_${lang}_STANDARD_LATEST 11)
elseif (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.6)
set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c1x")
set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu1x")
set(CMAKE_${lang}_STANDARD_LATEST 11)
endif()
if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1)
set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c17")
set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=gnu17")
set(CMAKE_${lang}_STANDARD_LATEST 17)
endif()
if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 9.1)
set(CMAKE_${lang}23_STANDARD_COMPILE_OPTION "-std=c2x")
set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-std=gnu2x")
set(CMAKE_${lang}_STANDARD_LATEST 23)
endif()
endmacro()
@@ -248,16 +255,19 @@ macro(__compiler_gnu_cxx_standards lang)
if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4)
set(CMAKE_${lang}98_STANDARD_COMPILE_OPTION "-std=c++98")
set(CMAKE_${lang}98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
set(CMAKE_${lang}_STANDARD_LATEST 98)
endif()
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.7)
set(CMAKE_${lang}98_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c++11")
set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
set(CMAKE_${lang}_STANDARD_LATEST 11)
elseif (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.4)
# 4.3 supports 0x variants
set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c++0x")
set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
set(CMAKE_${lang}_STANDARD_LATEST 11)
endif()
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.8.1)
@@ -267,9 +277,11 @@ macro(__compiler_gnu_cxx_standards lang)
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.9)
set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std=c++14")
set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
set(CMAKE_${lang}_STANDARD_LATEST 14)
elseif (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.8)
set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std=c++1y")
set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
set(CMAKE_${lang}_STANDARD_LATEST 14)
endif()
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 5.0)
@@ -279,9 +291,11 @@ macro(__compiler_gnu_cxx_standards lang)
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 8.0)
set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c++17")
set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
set(CMAKE_${lang}_STANDARD_LATEST 17)
elseif (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 5.1)
set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c++1z")
set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
set(CMAKE_${lang}_STANDARD_LATEST 17)
endif()
if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 11.1)
@@ -289,13 +303,16 @@ macro(__compiler_gnu_cxx_standards lang)
set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
set(CMAKE_${lang}23_STANDARD_COMPILE_OPTION "-std=c++23")
set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-std=gnu++23")
set(CMAKE_${lang}_STANDARD_LATEST 23)
elseif(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++2a")
set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
set(CMAKE_${lang}_STANDARD_LATEST 20)
endif()
if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 14.0)
set(CMAKE_${lang}26_STANDARD_COMPILE_OPTION "-std=c++26")
set(CMAKE_${lang}26_EXTENSION_COMPILE_OPTION "-std=gnu++26")
set(CMAKE_${lang}_STANDARD_LATEST 26)
endif()
endmacro()

View File

@@ -23,8 +23,11 @@ set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
set(CMAKE_C_STANDARD_LATEST 11)
if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 17.1.0)
set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std=c17")
set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std=gnu17")
set(CMAKE_C_STANDARD_LATEST 17)
endif ()
__compiler_check_default_language_standard(C 17.1.0 17)

View File

@@ -26,6 +26,8 @@ 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")
@@ -33,6 +35,7 @@ if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 17.1.0)
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)

View File

@@ -19,12 +19,6 @@ if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl")
set(CMAKE_C_INCLUDE_WHAT_YOU_USE_DRIVER_MODE "cl")
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 16.0.0)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-Qstd=c11")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-Qstd=c11")
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
endif()
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 12.0)
set(CMAKE_C90_STANDARD_COMPILE_OPTION "-Qstd=c89")
set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-Qstd=c89")
@@ -32,18 +26,20 @@ if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
set(CMAKE_C99_STANDARD_COMPILE_OPTION "-Qstd=c99")
set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-Qstd=c99")
set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 99)
endif()
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 16.0.0)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-Qstd=c11")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-Qstd=c11")
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 11)
endif()
else()
set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c)
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0.0)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
endif()
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 12.0)
set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c89")
set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu89")
@@ -51,6 +47,14 @@ else()
set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 99)
endif()
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0.0)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 11)
endif()
endif()

View File

@@ -18,57 +18,70 @@ if("x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
set(CMAKE_CXX_CLANG_TIDY_DRIVER_MODE "cl")
set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE_DRIVER_MODE "cl")
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.0)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-Qstd=c++20")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-Qstd=c++20")
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "")
set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0.0)
set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-Qstd=c++17")
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-Qstd=c++17")
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-Qstd=c++11")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-Qstd=c++11")
else()
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-Qstd=c++0x")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-Qstd=c++0x")
endif()
set(CMAKE_CXX_STANDARD_LATEST 11)
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16.0)
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-Qstd=c++14")
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-Qstd=c++14")
set(CMAKE_CXX_STANDARD_LATEST 14)
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-Qstd=c++11")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-Qstd=c++11")
elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-Qstd=c++0x")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-Qstd=c++0x")
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0.0)
set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-Qstd=c++17")
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-Qstd=c++17")
set(CMAKE_CXX_STANDARD_LATEST 17)
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "")
set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.0)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-Qstd=c++20")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-Qstd=c++20")
set(CMAKE_CXX_STANDARD_LATEST 20)
endif()
else()
set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++)
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.0.20190206)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++20")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
else()
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++0x")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
endif()
set(CMAKE_CXX_STANDARD_LATEST 11)
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0.0)
set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
endif()
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 17.0)
set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)
set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.2)
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
set(CMAKE_CXX_STANDARD_LATEST 14)
elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.0)
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
set(CMAKE_CXX_STANDARD_LATEST 14)
endif()
# Intel 15.0.2 accepts c++14 instead of c++1y, but not gnu++14
@@ -79,22 +92,20 @@ else()
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)
set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 17.0)
set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++0x")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0.0)
set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
set(CMAKE_CXX_STANDARD_LATEST 17)
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.0.20190206)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++20")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
set(CMAKE_CXX_STANDARD_LATEST 20)
endif()
endif()

View File

@@ -42,9 +42,12 @@ if(NOT "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std=c17")
set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std=gnu17")
set(CMAKE_C_STANDARD_LATEST 17)
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 2022.1.0)
set(CMAKE_C23_STANDARD_COMPILE_OPTION "-std=c2x")
set(CMAKE_C23_EXTENSION_COMPILE_OPTION "-std=gnu2x")
set(CMAKE_C_STANDARD_LATEST 23)
endif()
else()
set(CMAKE_C90_STANDARD_COMPILE_OPTION "-Qstd:c90")
@@ -59,9 +62,12 @@ else()
set(CMAKE_C17_STANDARD_COMPILE_OPTION "-Qstd:c17")
set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-Qstd:c17")
set(CMAKE_C_STANDARD_LATEST 17)
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 2022.1.0)
set(CMAKE_C23_STANDARD_COMPILE_OPTION "-Qstd:c2x")
set(CMAKE_C23_EXTENSION_COMPILE_OPTION "-Qstd:c2x")
set(CMAKE_C_STANDARD_LATEST 23)
endif()
endif()

View File

@@ -47,9 +47,12 @@ if(NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++20")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
set(CMAKE_CXX_STANDARD_LATEST 20)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 2021.2.0)
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()
else()
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
@@ -67,9 +70,12 @@ else()
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-Qstd:c++20")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-Qstd:c++20")
set(CMAKE_CXX_STANDARD_LATEST 20)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 2021.2.0)
set(CMAKE_CXX23_STANDARD_COMPILE_OPTION "-Qstd:c++2b")
set(CMAKE_CXX23_EXTENSION_COMPILE_OPTION "-Qstd:c++2b")
set(CMAKE_CXX_STANDARD_LATEST 23)
endif()
endif()

View File

@@ -22,15 +22,19 @@ set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 99)
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 1.20)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 11)
endif()
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 1.26)
set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std=c17")
set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std=gnu17")
set(CMAKE_C_STANDARD_LATEST 17)
endif()
__compiler_check_default_language_standard(C 1.17 89 1.23 99 1.26 17)

View File

@@ -18,26 +18,32 @@ set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 98)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 1.20)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 11)
endif()
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 1.21)
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 14)
endif()
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 1.24)
set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
set(CMAKE_CXX_STANDARD_LATEST 17)
endif()
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 1.26)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
set(CMAKE_CXX_STANDARD_LATEST 20)
endif()
__compiler_check_default_language_standard(CXX 1.19 98 1.20 11 1.21 14 1.24 17 1.26 20)

View File

@@ -14,12 +14,15 @@ if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.27)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std:c11")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std:c11")
set(CMAKE_C_STANDARD_LATEST 11)
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.28)
set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std:c17")
set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std:c17")
set(CMAKE_C_STANDARD_LATEST 17)
else()
# Special case for 19.27 (VS 16.7): C11 has partial support.
macro(cmake_record_c_compile_features)
@@ -41,6 +44,7 @@ else()
set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
set(CMAKE_C_STANDARD_LATEST 11)
# There is no meaningful default for this
set(CMAKE_C_STANDARD_DEFAULT "")

View File

@@ -30,14 +30,18 @@ if ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0.24215.1 AND
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std:c++latest")
endif()
set(CMAKE_CXX_STANDARD_LATEST 17)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.29.30129)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std:c++20")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std:c++20")
set(CMAKE_CXX23_STANDARD_COMPILE_OPTION "-std:c++latest")
set(CMAKE_CXX23_EXTENSION_COMPILE_OPTION "-std:c++latest")
set(CMAKE_CXX_STANDARD_LATEST 23)
elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.12.25835)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std:c++latest")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std:c++latest")
set(CMAKE_CXX_STANDARD_LATEST 20)
endif()
__compiler_check_default_language_standard(CXX 19.0 14)
@@ -57,6 +61,14 @@ elseif (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "")
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0)
set(CMAKE_CXX_STANDARD_LATEST 17)
elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 18.0)
set(CMAKE_CXX_STANDARD_LATEST 14)
else()
set(CMAKE_CXX_STANDARD_LATEST 11)
endif()
# There is no meaningful default for this
set(CMAKE_CXX_STANDARD_DEFAULT "")

View File

@@ -7,6 +7,7 @@ set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c)
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 20.11)
set(CMAKE_C17_STANDARD_COMPILE_OPTION -std=c17)
set(CMAKE_C17_EXTENSION_COMPILE_OPTION -std=gnu17)
set(CMAKE_C_STANDARD_LATEST 17)
endif()
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 21.07)

View File

@@ -7,6 +7,7 @@ set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 20.11)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION -std=c++20)
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION -std=gnu++20)
set(CMAKE_CXX_STANDARD_LATEST 20)
endif()
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 21.07)

View File

@@ -17,6 +17,8 @@ macro(__compiler_nvidia_cxx_standards lang)
set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "")
set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "")
set(CMAKE_${lang}_STANDARD_LATEST 11)
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 9.0)
if(CMAKE_${lang}_SIMULATE_VERSION VERSION_GREATER_EQUAL 19.10.25017)
set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std=c++14")
@@ -25,12 +27,15 @@ macro(__compiler_nvidia_cxx_standards lang)
set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "")
set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "")
endif()
set(CMAKE_${lang}_STANDARD_LATEST 14)
endif()
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 11.0)
if(CMAKE_${lang}_SIMULATE_VERSION VERSION_GREATER_EQUAL 19.11.25505)
set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c++17")
set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=c++17")
set(CMAKE_${lang}_STANDARD_LATEST 17)
endif()
endif()
@@ -38,6 +43,7 @@ macro(__compiler_nvidia_cxx_standards lang)
if(CMAKE_${lang}_SIMULATE_VERSION VERSION_GREATER_EQUAL 19.11.25505)
set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++20")
set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=c++20")
set(CMAKE_${lang}_STANDARD_LATEST 20)
endif()
endif()
else()
@@ -47,21 +53,27 @@ macro(__compiler_nvidia_cxx_standards lang)
set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c++11")
set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=c++11")
set(CMAKE_${lang}_STANDARD_LATEST 11)
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 9.0)
set(CMAKE_${lang}03_STANDARD_COMPILE_OPTION "-std=c++03")
set(CMAKE_${lang}03_EXTENSION_COMPILE_OPTION "-std=c++03")
set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std=c++14")
set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "-std=c++14")
set(CMAKE_${lang}_STANDARD_LATEST 14)
endif()
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 11.0)
set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c++17")
set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=c++17")
set(CMAKE_${lang}_STANDARD_LATEST 17)
endif()
if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 12.0)
set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++20")
set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=c++20")
set(CMAKE_${lang}_STANDARD_LATEST 20)
endif()
endif()

View File

@@ -15,6 +15,8 @@ set(CMAKE_C11_STANDARD_COMPILE_OPTION -std=c11)
set(CMAKE_C11_EXTENSION_COMPILE_OPTION -std=c11)
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 11)
__compiler_orangec(C)
#- 6.38 is the earliest version which version info is available in the preprocessor
__compiler_check_default_language_standard(C 6.38 11)

View File

@@ -20,6 +20,8 @@ set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=c++14")
set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 14)
__compiler_orangec(CXX)
#- 6.38 is the earliest version which version info is available in the preprocessor
__compiler_check_default_language_standard(CXX 6.38 14)

View File

@@ -10,10 +10,13 @@ if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 12.10)
set(CMAKE_C99_STANDARD_COMPILE_OPTION -c99)
set(CMAKE_C99_EXTENSION_COMPILE_OPTION -c99)
set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 99)
if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 15.3)
set(CMAKE_C11_STANDARD_COMPILE_OPTION -c11)
set(CMAKE_C11_EXTENSION_COMPILE_OPTION -c11)
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 11)
endif ()
endif ()

View File

@@ -7,19 +7,23 @@ if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.10)
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION --gnu_extensions)
set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 98)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.10)
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION --c++03)
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION --c++03 --gnu_extensions)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION --c++11)
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION --c++11 --gnu_extensions)
set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 11)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15.7)
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION --c++14)
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION --c++14 --gnu_extensions)
set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 14)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 17.1)
set(CMAKE_CXX17_STANDARD_COMPILE_OPTION --c++17)
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION --c++17 --gnu_extensions)
set(CMAKE_CXX_STANDARD_LATEST 17)
endif()
endif()
endif()

View File

@@ -52,11 +52,15 @@ if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 5.13)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=c11")
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 11)
elseif (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 5.11)
set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
set(CMAKE_C99_STANDARD_COMPILE_OPTION "-xc99")
set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-xc99")
set(CMAKE_C_STANDARD_LATEST 99)
endif()
__compiler_check_default_language_standard(C 5.11 90 5.14 11)

View File

@@ -54,14 +54,18 @@ if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.13)
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=c++11")
set(CMAKE_CXX_LINK_WITH_STANDARD_COMPILE_OPTION 1)
set(CMAKE_CXX_STANDARD_LATEST 11)
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.14)
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=c++14")
set(CMAKE_CXX_STANDARD_LATEST 14)
endif()
else()
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-library=stlport4")
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-library=stlport4")
set(CMAKE_CXX_LINK_WITH_STANDARD_COMPILE_OPTION 1)
set(CMAKE_CXX_STANDARD_LATEST 98)
endif()
__compiler_check_default_language_standard(CXX 1 98)

View File

@@ -34,18 +34,23 @@ if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "${__COMPILER_TI_C99_VERSION_$
set(CMAKE_C99_STANDARD_COMPILE_OPTION "--c99" "--strict_ansi")
set(CMAKE_C99_EXTENSION_COMPILE_OPTION "--c99" "--relaxed_ansi")
set(CMAKE_C_STANDARD_LATEST 99)
if(DEFINED __COMPILER_TI_C11_VERSION_${CMAKE_C_COMPILER_ARCHITECTURE_ID} AND
CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "${__COMPILER_TI_C11_VERSION_${CMAKE_C_COMPILER_ARCHITECTURE_ID}}")
set(CMAKE_C11_STANDARD_COMPILE_OPTION "--c11" "--strict_ansi")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "--c11" "--relaxed_ansi")
set(CMAKE_C_STANDARD_LATEST 11)
endif()
else()
set(CMAKE_C90_STANDARD_COMPILE_OPTION "--strict_ansi")
set(CMAKE_C90_EXTENSION_COMPILE_OPTION "--relaxed_ansi")
set(CMAKE_C_STANDARD_LATEST 90)
endif()

View File

@@ -39,16 +39,19 @@ if(DEFINED __COMPILER_TI_CXX14_VERSION AND
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "--c++14" "--strict_ansi")
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "--c++14" "--relaxed_ansi")
set(CMAKE_CXX_STANDARD_LATEST 14)
elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "${__COMPILER_TI_CXX03_VERSION}")
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "--c++03" "--strict_ansi")
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "--c++03" "--relaxed_ansi")
set(CMAKE_CXX_STANDARD_LATEST 98)
else()
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "--strict_ansi")
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "--relaxed_ansi")
set(CMAKE_CXX_STANDARD_LATEST 98)
endif()

View File

@@ -21,3 +21,13 @@ set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 11)
# Including the "${CMAKE_ROOT}/Modules/Compiler/Clang-C.cmake" script above may set several other compile option
# variables which do not necessarily apply here. So, we unset those variables accordingly.
unset(CMAKE_C17_STANDARD_COMPILE_OPTION)
unset(CMAKE_C17_EXTENSION_COMPILE_OPTION)
unset(CMAKE_C23_STANDARD_COMPILE_OPTION)
unset(CMAKE_C23_EXTENSION_COMPILE_OPTION)

View File

@@ -23,3 +23,16 @@ set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
set(CMAKE_CXX_STANDARD_LATEST 17)
# Including the "${CMAKE_ROOT}/Modules/Compiler/Clang-CXX.cmake" script above may set several other compile option
# variables which do not necessarily apply here. So, we unset those variables accordingly.
unset(CMAKE_CXX20_STANDARD_COMPILE_OPTION)
unset(CMAKE_CXX20_EXTENSION_COMPILE_OPTION)
unset(CMAKE_CXX23_STANDARD_COMPILE_OPTION)
unset(CMAKE_CXX23_EXTENSION_COMPILE_OPTION)
unset(CMAKE_CXX26_STANDARD_COMPILE_OPTION)
unset(CMAKE_CXX26_EXTENSION_COMPILE_OPTION)

View File

@@ -10,6 +10,8 @@ set(CMAKE_C99_EXTENSION_COMPILE_OPTION "--iso=99" " ")
set(CMAKE_C11_STANDARD_COMPILE_OPTION "--iso=11" "--strict")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "--iso=11" " ")
set(CMAKE_C_STANDARD_LATEST 11)
if(CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "TriCore")
if(CMAKE_TASKING_TOOLSET STREQUAL "SmartCode")
__compiler_check_default_language_standard(C 10.1 11)

View File

@@ -12,6 +12,8 @@ set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "--c++=11" " ")
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "--c++=14" "--strict")
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "--c++=14" " ")
set(CMAKE_CXX_STANDARD_LATEST 14)
if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "TriCore")
if(CMAKE_TASKING_TOOLSET STREQUAL "SmartCode")
__compiler_check_default_language_standard(CXX 10.1 14)

View File

@@ -13,10 +13,13 @@ if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 10.1)
set(CMAKE_C99_STANDARD_COMPILE_OPTION "-qlanglvl=stdc99")
set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-qlanglvl=extc99")
set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 99)
if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 12.1)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-qlanglvl=extc1x")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-qlanglvl=extc1x")
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C_STANDARD_LATEST 11)
endif ()
endif()

View File

@@ -24,10 +24,13 @@ if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.1)
# compiler mode for the corresponding standard.
set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 11)
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.1.0 AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-qlanglvl=extended1y")
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-qlanglvl=extended1y")
set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 14)
endif()
endif ()

View File

@@ -12,11 +12,14 @@ if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 13.1.1)
set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-qlanglvl=extc1x")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-qlanglvl=extc1x")
if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 13.1.2)
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
endif ()
set(CMAKE_C_STANDARD_LATEST 11)
endif()
__compiler_check_default_language_standard(C 13.1.1 99)

View File

@@ -10,12 +10,17 @@ if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.1.1)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-qlanglvl=extended0x")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-qlanglvl=extended0x")
set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 11)
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.1.2)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
set(CMAKE_CXX_STANDARD_LATEST 14)
endif ()
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.1.0)
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")

View File

@@ -440,6 +440,16 @@ add_RunCMake_test(GoogleTest # Note: does not actually depend on Google Test
)
add_RunCMake_test(Graphviz)
add_RunCMake_test(Languages)
add_RunCMake_test(LanguageStandards
-DCMake_NO_C_STANDARD=${CMake_NO_C_STANDARD}
-DCMake_NO_CXX_STANDARD=${CMake_NO_CXX_STANDARD}
-DCMake_TEST_CUDA=${CMake_TEST_CUDA}
-DCMake_TEST_HIP=${CMake_TEST_HIP}
-DCMake_TEST_OBJC=${CMake_TEST_OBJC}
)
set_property(TEST RunCMake.LanguageStandards APPEND PROPERTY LABELS "CUDA" "HIP")
add_RunCMake_test(LinkItemValidation)
add_RunCMake_test(LinkStatic)
if(CMAKE_CXX_COMPILER_ID MATCHES "^(Cray|PGI|NVHPC|XL|XLClang|IBMClang|Fujitsu|FujitsuClang)$")

View File

@@ -0,0 +1,3 @@
cmake_minimum_required(VERSION 3.29)
project(${RunCMake_TEST} NONE)
include(${RunCMake_TEST}.cmake)

View File

@@ -0,0 +1,14 @@
enable_language(C)
enable_language(CXX)
set(info "")
foreach(var
CMAKE_C_STANDARD_DEFAULT
CMAKE_CXX_STANDARD_DEFAULT
)
if(DEFINED ${var})
string(APPEND info "set(${var} \"${${var}}\")\n")
endif()
endforeach()
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/info.cmake" "${info}")

View File

@@ -0,0 +1,32 @@
include(RunCMake)
# Detect information from the toolchain:
# - CMAKE_C_STANDARD_DEFAULT
# - CMAKE_CXX_STANDARD_DEFAULT
run_cmake(Inspect)
include("${RunCMake_BINARY_DIR}/Inspect-build/info.cmake")
function(run_StdLatest lang)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/StdLatest-${lang}-build)
run_cmake(StdLatest-${lang})
set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake_TEST_OUTPUT_MERGE 1)
run_cmake_command(StdLatest-${lang}-build ${CMAKE_COMMAND} --build . --config Debug)
endfunction()
if(NOT CMake_NO_C_STANDARD AND DEFINED CMAKE_C_STANDARD_DEFAULT)
run_StdLatest(C)
endif()
if(NOT CMake_NO_CXX_STANDARD AND DEFINED CMAKE_CXX_STANDARD_DEFAULT)
run_StdLatest(CXX)
endif()
if(CMake_TEST_CUDA)
run_StdLatest(CUDA)
endif()
if(CMake_TEST_HIP)
run_StdLatest(HIP)
endif()
if(CMake_TEST_OBJC)
run_StdLatest(OBJC)
run_StdLatest(OBJCXX)
endif()

View File

@@ -0,0 +1 @@
-- CMAKE_C_STANDARD_LATEST='[0-9][0-9]'

View File

@@ -0,0 +1,4 @@
int main(void)
{
return 0;
}

View File

@@ -0,0 +1,4 @@
enable_language(C)
message(STATUS "CMAKE_C_STANDARD_LATEST='${CMAKE_C_STANDARD_LATEST}'")
add_executable(StdLatest StdLatest-C.c)
target_compile_features(StdLatest PRIVATE c_std_${CMAKE_C_STANDARD_LATEST})

View File

@@ -0,0 +1 @@
-- CMAKE_CUDA_STANDARD_LATEST='[0-9][0-9]'

View File

@@ -0,0 +1,4 @@
enable_language(CUDA)
message(STATUS "CMAKE_CUDA_STANDARD_LATEST='${CMAKE_CUDA_STANDARD_LATEST}'")
add_executable(StdLatest StdLatest-CUDA.cu)
target_compile_features(StdLatest PRIVATE cuda_std_${CMAKE_CUDA_STANDARD_LATEST})

View File

@@ -0,0 +1,4 @@
int main()
{
return 0;
}

View File

@@ -0,0 +1 @@
-- CMAKE_CXX_STANDARD_LATEST='[0-9][0-9]'

View File

@@ -0,0 +1,5 @@
enable_language(CXX)
set(CMAKE_CXX_SCAN_FOR_MODULES OFF) # In case C++20 or higher is the latest.
message(STATUS "CMAKE_CXX_STANDARD_LATEST='${CMAKE_CXX_STANDARD_LATEST}'")
add_executable(StdLatest StdLatest-CXX.cxx)
target_compile_features(StdLatest PRIVATE cxx_std_${CMAKE_CXX_STANDARD_LATEST})

View File

@@ -0,0 +1,4 @@
int main()
{
return 0;
}

View File

@@ -0,0 +1 @@
-- CMAKE_HIP_STANDARD_LATEST='[0-9][0-9]'

View File

@@ -0,0 +1,4 @@
enable_language(HIP)
message(STATUS "CMAKE_HIP_STANDARD_LATEST='${CMAKE_HIP_STANDARD_LATEST}'")
add_executable(StdLatest StdLatest-HIP.hip)
target_compile_features(StdLatest PRIVATE hip_std_${CMAKE_HIP_STANDARD_LATEST})

View File

@@ -0,0 +1,4 @@
int main()
{
return 0;
}

View File

@@ -0,0 +1 @@
-- CMAKE_OBJC_STANDARD_LATEST='[0-9][0-9]'

View File

@@ -0,0 +1,4 @@
enable_language(OBJC)
message(STATUS "CMAKE_OBJC_STANDARD_LATEST='${CMAKE_OBJC_STANDARD_LATEST}'")
add_executable(StdLatest StdLatest-OBJC.m)
set_property(TARGET StdLatest PROPERTY OBJC_STANDARD "${CMAKE_OBJC_STANDARD_LATEST}")

View File

@@ -0,0 +1,4 @@
int main(void)
{
return 0;
}

View File

@@ -0,0 +1 @@
-- CMAKE_OBJCXX_STANDARD_LATEST='[0-9][0-9]'

View File

@@ -0,0 +1,4 @@
enable_language(OBJCXX)
message(STATUS "CMAKE_OBJCXX_STANDARD_LATEST='${CMAKE_OBJCXX_STANDARD_LATEST}'")
add_executable(StdLatest StdLatest-OBJCXX.mm)
set_property(TARGET StdLatest PROPERTY OBJCXX_STANDARD "${CMAKE_OBJCXX_STANDARD_LATEST}")

View File

@@ -0,0 +1,4 @@
int main()
{
return 0;
}