Browse Source

Merge topic 'intel-compile-features-windows-15'

be732739 Features: Fix standards and features for Intel 15 on Windows
Brad King 9 years ago
parent
commit
3bb73a051d
2 changed files with 19 additions and 13 deletions
  1. 2 2
      Modules/Compiler/Intel-CXX-FeatureTests.cmake
  2. 17 11
      Modules/Compiler/Intel-CXX.cmake

+ 2 - 2
Modules/Compiler/Intel-CXX-FeatureTests.cmake

@@ -49,7 +49,7 @@ set(Intel15_CXX11 "__INTEL_COMPILER >= 1500 && ${DETECT_CXX11}")
 set(_cmake_feature_test_cxx_alignas "${Intel15_CXX11}")
 set(_cmake_feature_test_cxx_alignof "${Intel15_CXX11}")
 set(_cmake_feature_test_cxx_inheriting_constructors "${Intel15_CXX11}")
-set(_cmake_feature_test_cxx_user_literals "__cpp_user_defined_literals >= 200809 || ${Intel15_CXX11}")
+set(_cmake_feature_test_cxx_user_literals "__cpp_user_defined_literals >= 200809 || (${Intel15_CXX11} && (!defined(_MSC_VER) || __INTEL_COMPILER >= 1600))")
 set(_cmake_feature_test_cxx_thread_local "${Intel15_CXX11}")
 unset(Intel15_CXX11)
 
@@ -64,7 +64,7 @@ set(_cmake_feature_test_cxx_sizeof_member "${Intel14_CXX11}")
 set(_cmake_feature_test_cxx_strong_enums "${Intel14_CXX11}")
 set(_cmake_feature_test_cxx_reference_qualified_functions "${Intel14_CXX11}")
 set(_cmake_feature_test_cxx_raw_string_literals "__cpp_raw_strings >= 200710 || ${Intel14_CXX11}")
-set(_cmake_feature_test_cxx_unicode_literals "__cpp_unicode_literals >= 200710 || ${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_unicode_literals "__cpp_unicode_literals >= 200710 || (${Intel14_CXX11} && (!defined(_MSC_VER) || __INTEL_COMPILER >= 1600))")
 set(_cmake_feature_test_cxx_inline_namespaces "${Intel14_CXX11}")
 set(_cmake_feature_test_cxx_unrestricted_unions "${Intel14_CXX11}")
 set(_cmake_feature_test_cxx_nonstatic_member_init "${Intel14_CXX11}")

+ 17 - 11
Modules/Compiler/Intel-CXX.cmake

@@ -10,19 +10,23 @@ set(CMAKE_DEPFILE_FLAGS_CXX "-MD -MT <OBJECT> -MF <DEPFILE>")
 if("x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
   set(_std -Qstd)
   set(_ext c++)
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16.0)
+    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-Qstd=c++14")
+    # todo: there is no gnu++14 value supported; figure out what to do
+    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-Qstd=c++14")
+  endif()
 else()
   set(_std -std)
   set(_ext gnu++)
-endif()
-
-if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.2)
-  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "${_std}=c++14")
-  # todo: there is no gnu++14 value supported; figure out what to do
-  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "${_std}=c++14")
-elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.0)
-  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "${_std}=c++1y")
-  # todo: there is no gnu++14 value supported; figure out what to do
-  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "${_std}=c++1y")
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.2)
+    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
+    # todo: there is no gnu++14 value supported; figure out what to do
+    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=c++14")
+  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.0)
+    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
+    # todo: there is no gnu++14 value supported; figure out what to do
+    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=c++1y")
+  endif()
 endif()
 
 if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
@@ -62,7 +66,9 @@ unset(_ext)
 macro(cmake_record_cxx_compile_features)
   set(_result 0)
   if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
-    if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)
+    if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16.0
+        OR (NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC" AND
+            NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0))
       _record_compiler_features_cxx(14)
     endif()
     if (_result EQUAL 0)