summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaul Tambre <raul@tambre.ee>2020-08-09 15:22:03 +0300
committerBrad King <brad.king@kitware.com>2020-08-11 09:08:21 -0400
commitf7347f28c76944c6737c70abe45329f37d65a63f (patch)
treec4e87d63a3e348d1f96cccb9ac6cbd659e91942c
parent9ccd13d8cdb36ec76eb850b3a8a87b231500cbe7 (diff)
downloadcmake-f7347f28c76944c6737c70abe45329f37d65a63f.tar.gz
MSVC: Record support for C11 and c_restrict
MSVC >=19.27 supports a C11 switch. The `c_restrict` feature has also been implemented. Fixes: #21069
-rw-r--r--Help/release/3.18.rst7
-rw-r--r--Modules/Compiler/MSVC-C-FeatureTests.cmake3
-rw-r--r--Modules/Compiler/MSVC-C.cmake42
3 files changed, 40 insertions, 12 deletions
diff --git a/Help/release/3.18.rst b/Help/release/3.18.rst
index 93694f628e..f199244c0a 100644
--- a/Help/release/3.18.rst
+++ b/Help/release/3.18.rst
@@ -264,6 +264,10 @@ Other
* :manual:`ccmake(1)` learned to read a :envvar:`CCMAKE_COLORS`
environment variable to customize colors.
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+ is now aware of the availability of C11 features in MSVC 19.27 and above,
+ including support for the ``c_restrict`` feature and the ``-std:c11`` flag.
+
Deprecated and Removed Features
===============================
@@ -347,3 +351,6 @@ Changes made since CMake 3.18.0 include the following.
``OFF`` because this feature can break existing projects that have
identically named header files in different include directories.
This restores compatibility with behavior of CMake 3.15 and below.
+
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+ was updated for MSVC 19.27 as mentioned above.
diff --git a/Modules/Compiler/MSVC-C-FeatureTests.cmake b/Modules/Compiler/MSVC-C-FeatureTests.cmake
index 3f09be2017..862bff3b7e 100644
--- a/Modules/Compiler/MSVC-C-FeatureTests.cmake
+++ b/Modules/Compiler/MSVC-C-FeatureTests.cmake
@@ -2,7 +2,8 @@ set(_cmake_oldestSupported "_MSC_VER >= 1600")
# Not yet supported:
#set(_cmake_feature_test_c_static_assert "")
-#set(_cmake_feature_test_c_restrict "")
+
+set(_cmake_feature_test_c_restrict "_MSC_VER >= 1927")
set(_cmake_feature_test_c_variadic_macros "${_cmake_oldestSupported}")
set(_cmake_feature_test_c_function_prototypes "${_cmake_oldestSupported}")
diff --git a/Modules/Compiler/MSVC-C.cmake b/Modules/Compiler/MSVC-C.cmake
index bca9764a2c..a05e6a0bd3 100644
--- a/Modules/Compiler/MSVC-C.cmake
+++ b/Modules/Compiler/MSVC-C.cmake
@@ -1,15 +1,31 @@
-# MSVC has no specific options to set C language standards, but set them as
-# empty strings anyways so the feature test infrastructure can at least check
-# to see if they are defined.
-set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
-set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
-set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
-set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
-set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
-set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
+# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
-# There is no meaningful default for this
-set(CMAKE_C_STANDARD_DEFAULT "")
+include(Compiler/CMakeCommonCompilerMacros)
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.27)
+ set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
+ set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
+ set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
+ set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
+ set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std:c11")
+ set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std:c11")
+
+ __compiler_check_default_language_standard(C 19.27 99)
+else()
+ # MSVC has no specific options to set C language standards, but set them as
+ # empty strings anyways so the feature test infrastructure can at least check
+ # to see if they are defined.
+ set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
+ set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
+ set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
+ set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
+ set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
+ set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
+
+ # There is no meaningful default for this
+ set(CMAKE_C_STANDARD_DEFAULT "")
+endif()
set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl")
@@ -31,6 +47,10 @@ macro(cmake_record_c_compile_features)
list(APPEND CMAKE_C_COMPILE_FEATURES c_variadic_macros)
list(APPEND CMAKE_C99_COMPILE_FEATURES c_variadic_macros)
endif()
+ if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.27)
+ list(APPEND CMAKE_C_COMPILE_FEATURES c_restrict)
+ list(APPEND CMAKE_C99_COMPILE_FEATURES c_restrict)
+ endif()
set(_result 0) # expected by cmake_determine_compile_features
endmacro()