Просмотр исходного кода

Merge topic 'WCDH-thread_local-portability'

998e9c10 WCDH: Add feature portability for thread_local.
Brad King 11 лет назад
Родитель
Сommit
7ecbade887
2 измененных файлов с 22 добавлено и 0 удалено
  1. 7 0
      Help/release/dev/WCDH-thread_local.rst
  2. 15 0
      Modules/WriteCompilerDetectionHeader.cmake

+ 7 - 0
Help/release/dev/WCDH-thread_local.rst

@@ -0,0 +1,7 @@
+WriteCompilerDetectionHeader thread_local portability
+-----------------------------------------------------
+
+* The :module:`WriteCompilerDetectionHeader` module learned to
+  create a define for portability of the cxx_thread_local feature. The define
+  expands to either the C++11 ``thread_local`` keyword, or a
+  pre-standardization compiler-specific equivalent, as appropriate.

+ 15 - 0
Modules/WriteCompilerDetectionHeader.cmake

@@ -194,6 +194,7 @@
 # ``cxx_static_assert``          ``<PREFIX>_STATIC_ASSERT_MSG``   ``static_assert``
 # ``cxx_attribute_deprecated``   ``<PREFIX>_DEPRECATED``          ``[[deprecated]]``
 # ``cxx_attribute_deprecated``   ``<PREFIX>_DEPRECATED_MSG``      ``[[deprecated]]``
+# ``cxx_thread_local``           ``<PREFIX>_THREAD_LOCAL``        ``thread_local``
 # ============================= ================================ =====================
 #
 # A use-case which arises with such deprecation macros is the deprecation
@@ -571,6 +572,20 @@ function(write_compiler_detection_header
 #  else
 #    define ${def_value} static_cast<void*>(0)
 #  endif
+\n")
+      endif()
+      if (feature STREQUAL cxx_thread_local)
+        set(def_value "${prefix_arg}_THREAD_LOCAL")
+        set(file_content "${file_content}
+#  if ${def_name}
+#    define ${def_value} thread_local
+#  elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang || ${prefix_arg}_COMPILER_IS_AppleClang
+#    define ${def_value} __thread
+#  elif ${prefix_arg}_COMPILER_IS_MSVC
+#    define ${def_value} __declspec(thread)
+#  else
+// ${def_value} not defined for this configuration.
+#  endif
 \n")
       endif()
       if (feature STREQUAL cxx_attribute_deprecated)