commit 46fc5303aefb32b43e2d1dd71f1a25045f2ce661
Author: Jakub Bogusz <[email protected]>
Date:   Sat Apr 22 11:40:49 2023 +0200

    - added pthreads-w32, use POSIX threading model for std::thread/std::mutex 
support

 crossmingw32-gcc.spec  | 10 ++++++++--
 gcc-pthreads-w32.patch | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 57 insertions(+), 2 deletions(-)
---
diff --git a/crossmingw32-gcc.spec b/crossmingw32-gcc.spec
index 24c88fd..6706a42 100644
--- a/crossmingw32-gcc.spec
+++ b/crossmingw32-gcc.spec
@@ -1,9 +1,13 @@
 #
 # Conditional build:
 %bcond_with    bootstrap       # bootstrap build (using binary w32api/mingwrt, 
only C/C++, no gomp)
+%bcond_without pthreads        # POSIX threads support (needed for GOMP and 
C++ 11 thread/mutex support)
 %bcond_without gomp            # OpenMP libraries
 #
 %if %{with bootstrap}
+%undefine      with_pthreads
+%endif
+%if %{without pthreads}
 %undefine      with_gomp
 %endif
 Summary:       Cross MinGW32 GNU binary utility development utilities - gcc
@@ -35,12 +39,13 @@ Patch1:             %{name}-buildsystem2.patch
 Patch2:                %{name}-lfs.patch
 Patch3:                gcc-mingw32.patch
 Patch4:                gcc-build-libvtv.patch
+Patch5:                gcc-pthreads-w32.patch
 URL:           http://gcc.gnu.org/
 BuildRequires: autoconf >= 2.64
 BuildRequires: automake >= 1:1.11.1
 BuildRequires: bison
 BuildRequires: crossmingw32-binutils >= 2.23
-%{?with_gomp:BuildRequires:    crossmingw32-pthreads-w32}
+%{?with_pthreads:BuildRequires:        crossmingw32-pthreads-w32}
 %if %{without bootstrap}
 BuildRequires: crossmingw32-runtime >= 3.5
 BuildRequires: crossmingw32-w32api >= 3.1
@@ -477,6 +482,7 @@ Biblioteka DLL GCC do obsługi typu __float128 dla Windows.
 %patch2 -p1
 %patch3 -p1
 %patch4 -p1
+%patch5 -p1
 
 %if %{with bootstrap}
 # note: "winsup" dirs are special, handled by gcc's configure
@@ -550,7 +556,7 @@ CXXFLAGS_FOR_TARGET="-O2 -march=i486" \
        --enable-shared \
        --disable-sjlj-exceptions \
        --disable-symvers \
-       --enable-threads \
+       --enable-threads%{?with_pthreads:=posix} \
        --disable-werror \
        --disable-win32-registry \
        --target=%{target}
diff --git a/gcc-pthreads-w32.patch b/gcc-pthreads-w32.patch
new file mode 100644
index 0000000..6589e6f
--- /dev/null
+++ b/gcc-pthreads-w32.patch
@@ -0,0 +1,49 @@
+--- gcc-9.5.0/libgcc/gthr-posix.h.orig 2022-05-27 09:21:12.915389144 +0200
++++ gcc-9.5.0/libgcc/gthr-posix.h      2023-04-21 21:34:01.235216833 +0200
+@@ -372,7 +372,7 @@ __gthread_objc_thread_detach (void (*fun
+ 
+   if (!(__gthrw_(pthread_create) (&new_thread_handle, &_objc_thread_attribs,
+                                 (void *) func, arg)))
+-    thread_id = (objc_thread_t) new_thread_handle;
++    thread_id = (objc_thread_t) new_thread_handle.p;
+   else
+     thread_id = NULL;
+ 
+@@ -469,7 +469,7 @@ static inline objc_thread_t
+ __gthread_objc_thread_id (void)
+ {
+   if (__gthread_active_p ())
+-    return (objc_thread_t) __gthrw_(pthread_self) ();
++    return (objc_thread_t) __gthrw_(pthread_self) ().x;
+   else
+     return (objc_thread_t) 1;
+ }
+--- gcc-9.5.0/libstdc++-v3/include/std/thread.orig     2022-05-27 
09:21:13.435391692 +0200
++++ gcc-9.5.0/libstdc++-v3/include/std/thread  2023-04-21 22:05:23.125021761 
+0200
+@@ -279,7 +279,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+     // can't safely use __gthread_equal on default-constructed values (nor
+     // the non-zero value returned by this_thread::get_id() for
+     // single-threaded programs using GNU libc). Assume EqualityComparable.
+-    return __x._M_thread == __y._M_thread;
++    return __x._M_thread.p == __y._M_thread.p;
+   }
+ 
+   inline bool
+@@ -291,7 +291,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+   {
+     // Pthreads doesn't define any way to do this, so we just have to
+     // assume native_handle_type is LessThanComparable.
+-    return __x._M_thread < __y._M_thread;
++    return __x._M_thread.p < __y._M_thread.p;
+   }
+ 
+   inline bool
+@@ -314,7 +314,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+     {
+       size_t
+       operator()(const thread::id& __id) const noexcept
+-      { return std::_Hash_impl::hash(__id._M_thread); }
++      { return std::_Hash_impl::hash(__id._M_thread.p); }
+     };
+ 
+   template<class _CharT, class _Traits>
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/crossmingw32-gcc.git/commitdiff/46fc5303aefb32b43e2d1dd71f1a25045f2ce661

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to