1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-19 02:17:27 +08:00

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
This commit is contained in:
Raul Tambre
2020-08-09 15:22:03 +03:00
committed by Brad King
parent 9ccd13d8cd
commit f7347f28c7
3 changed files with 40 additions and 12 deletions

View File

@@ -264,6 +264,10 @@ Other
* :manual:`ccmake(1)` learned to read a :envvar:`CCMAKE_COLORS` * :manual:`ccmake(1)` learned to read a :envvar:`CCMAKE_COLORS`
environment variable to customize 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 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 ``OFF`` because this feature can break existing projects that have
identically named header files in different include directories. identically named header files in different include directories.
This restores compatibility with behavior of CMake 3.15 and below. 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.

View File

@@ -2,7 +2,8 @@ set(_cmake_oldestSupported "_MSC_VER >= 1600")
# Not yet supported: # Not yet supported:
#set(_cmake_feature_test_c_static_assert "") #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_variadic_macros "${_cmake_oldestSupported}")
set(_cmake_feature_test_c_function_prototypes "${_cmake_oldestSupported}") set(_cmake_feature_test_c_function_prototypes "${_cmake_oldestSupported}")

View File

@@ -1,3 +1,18 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
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 # 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 # empty strings anyways so the feature test infrastructure can at least check
# to see if they are defined. # to see if they are defined.
@@ -10,6 +25,7 @@ set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
# There is no meaningful default for this # There is no meaningful default for this
set(CMAKE_C_STANDARD_DEFAULT "") set(CMAKE_C_STANDARD_DEFAULT "")
endif()
set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl") 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_C_COMPILE_FEATURES c_variadic_macros)
list(APPEND CMAKE_C99_COMPILE_FEATURES c_variadic_macros) list(APPEND CMAKE_C99_COMPILE_FEATURES c_variadic_macros)
endif() 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 set(_result 0) # expected by cmake_determine_compile_features
endmacro() endmacro()