Переглянути джерело

Merge topic 'aix-threads'

4ff89fb6 AIX: Add -pthread flag to enable std::thread with GCC
6e613ff3 bootstrap: Add infrastructure to detect threading flags

Acked-by: Kitware Robot <[email protected]>
Merge-request: !1535
Brad King 8 роки тому
батько
коміт
71c28bddba
4 змінених файлів з 46 додано та 19 видалено
  1. 4 0
      CMakeLists.txt
  2. 3 0
      Source/Modules/OverrideC.cmake
  3. 3 0
      Source/Modules/OverrideCXX.cmake
  4. 36 19
      bootstrap

+ 4 - 0
CMakeLists.txt

@@ -2,7 +2,11 @@
 # file Copyright.txt or https://cmake.org/licensing for details.
 
 cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
+set(CMAKE_USER_MAKE_RULES_OVERRIDE_C ${CMAKE_CURRENT_SOURCE_DIR}/Source/Modules/OverrideC.cmake)
+set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX ${CMAKE_CURRENT_SOURCE_DIR}/Source/Modules/OverrideCXX.cmake)
 project(CMake)
+unset(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX)
+unset(CMAKE_USER_MAKE_RULES_OVERRIDE_C)
 
 # Make sure we can find internal find_package modules only used for
 # building CMake and not for shipping externally

+ 3 - 0
Source/Modules/OverrideC.cmake

@@ -0,0 +1,3 @@
+if("${CMAKE_SYSTEM_NAME};${CMAKE_C_COMPILER_ID}" STREQUAL "AIX;GNU")
+  string(APPEND CMAKE_C_FLAGS_INIT " -pthread")
+endif()

+ 3 - 0
Source/Modules/OverrideCXX.cmake

@@ -0,0 +1,3 @@
+if("${CMAKE_SYSTEM_NAME};${CMAKE_CXX_COMPILER_ID}" STREQUAL "AIX;GNU")
+  string(APPEND CMAKE_CXX_FLAGS_INIT " -pthread")
+endif()

+ 36 - 19
bootstrap

@@ -981,6 +981,11 @@ if [ -z "${CC}" -a -z "${CXX}" ]; then
   cmake_toolchain_detect
 fi
 
+thread_flags=''
+case "${cmake_system}" in
+  *AIX*)   thread_flags='-pthread' ;;
+esac
+
 #-----------------------------------------------------------------------------
 # Test C compiler
 cmake_c_compiler=
@@ -1001,6 +1006,10 @@ echo '
 # error "The CMAKE_C_COMPILER is set to a C++ compiler"
 #endif
 
+#if defined(_AIX) && defined(__GNUC__) && !defined(_THREAD_SAFE)
+#error "On AIX with GNU we need the -pthread flag."
+#endif
+
 #if defined(__sun) && __STDC_VERSION__ < 199901L
 #error "On Solaris we need C99."
 #endif
@@ -1014,16 +1023,18 @@ int main(int argc, char* argv[])
 }
 ' > "${TMPFILE}.c"
 for std in 11 99 90; do
-  try_flags="`cmake_extract_standard_flags \"${cmake_toolchain}\" C \"${std}\"`"
+  std_flags="`cmake_extract_standard_flags \"${cmake_toolchain}\" C \"${std}\"`"
   for compiler in ${cmake_c_compilers}; do
-    for flag in '' $try_flags; do
-      echo "Checking whether '${compiler} ${cmake_c_flags} ${flag}' works." >> cmake_bootstrap.log 2>&1
-      if cmake_try_run "${compiler}" "${cmake_c_flags} ${flag}" \
-        "${TMPFILE}.c" >> cmake_bootstrap.log 2>&1; then
-        cmake_c_compiler="${compiler}"
-        cmake_c_flags="${cmake_c_flags} ${flag}"
-        break 3
-      fi
+    for std_flag in '' $std_flags; do
+      for thread_flag in '' $thread_flags; do
+        echo "Checking whether '${compiler} ${cmake_c_flags} ${std_flag} ${thread_flag}' works." >> cmake_bootstrap.log 2>&1
+        if cmake_try_run "${compiler}" "${cmake_c_flags} ${std_flag} ${thread_flag}" \
+          "${TMPFILE}.c" >> cmake_bootstrap.log 2>&1; then
+          cmake_c_compiler="${compiler}"
+          cmake_c_flags="${cmake_c_flags} ${std_flag} ${thread_flag}"
+          break 3
+        fi
+      done
     done
   done
 done
@@ -1062,6 +1073,10 @@ echo '
 #error "Compiler is not in a mode aware of C++11."
 #endif
 
+#if defined(_AIX) && defined(__GNUC__) && !defined(_THREAD_SAFE)
+#error "On AIX with GNU we need the -pthread flag."
+#endif
+
 #if defined(__SUNPRO_CC) && __SUNPRO_CC < 0x5140
 #error "SunPro <= 5.13 mode not supported due to bug in move semantics."
 #endif
@@ -1081,16 +1096,18 @@ int main()
 }
 ' > "${TMPFILE}.cxx"
 for std in 17 14 11; do
-  try_flags="`cmake_extract_standard_flags \"${cmake_toolchain}\" CXX \"${std}\"`"
+  std_flags="`cmake_extract_standard_flags \"${cmake_toolchain}\" CXX \"${std}\"`"
   for compiler in ${cmake_cxx_compilers}; do
-    for flag in '' $try_flags; do
-      echo "Checking whether '${compiler} ${cmake_cxx_flags} ${flag}' works." >> cmake_bootstrap.log 2>&1
-      if cmake_try_run "${compiler}" "${cmake_cxx_flags} ${flag}" \
-        "${TMPFILE}.cxx" >> cmake_bootstrap.log 2>&1; then
-        cmake_cxx_compiler="${compiler}"
-        cmake_cxx_flags="${cmake_cxx_flags} ${flag} "
-        break 3
-      fi
+    for std_flag in '' $std_flags; do
+      for thread_flag in '' $thread_flags; do
+        echo "Checking whether '${compiler} ${cmake_cxx_flags} ${std_flag} ${thread_flag}' works." >> cmake_bootstrap.log 2>&1
+        if cmake_try_run "${compiler}" "${cmake_cxx_flags} ${std_flag} ${thread_flag}" \
+          "${TMPFILE}.cxx" >> cmake_bootstrap.log 2>&1; then
+          cmake_cxx_compiler="${compiler}"
+          cmake_cxx_flags="${cmake_cxx_flags} ${std_flag} ${thread_flag} "
+          break 3
+        fi
+      done
     done
   done
 done
@@ -1320,7 +1337,7 @@ else
   uv_c_flags="${uv_c_flags} -DCMAKE_BOOTSTRAP"
   case "${cmake_system}" in
     *AIX*)
-      uv_c_flags="${uv_c_flags} -D_ALL_SOURCE -D_XOPEN_SOURCE=500 -D_LINUX_SOURCE_COMPAT -D_THREAD_SAFE"
+      uv_c_flags="${uv_c_flags} -D_ALL_SOURCE -D_XOPEN_SOURCE=500 -D_LINUX_SOURCE_COMPAT"
       libs="${libs} -lperfstat"
       ;;
     *Darwin*)