diff mbox series

[meta-oe,PATCHv2] abseil-cpp: fix mingw build

Message ID 20231108183906.1614800-1-samuli.piippo@qt.io
State Under Review
Headers show
Series [meta-oe,PATCHv2] abseil-cpp: fix mingw build | expand

Commit Message

Samuli Piippo Nov. 8, 2023, 6:39 p.m. UTC
Add patch to fix mingw build of abseil-cpp

  undefined reference to `absl::lts_20230802::synchronization_internal::Win32Waiter::Poke()'
  undefined reference to `absl::lts_20230802::synchronization_internal::Win32Waiter::Win32Waiter()'
  undefined reference to `absl::lts_20230802::synchronization_internal::Win32Waiter::Post()'
  undefined reference to `absl::lts_20230802::synchronization_internal::Win32Waiter::Poke()'

and include bindir to recipe sysroot to fix protobuf build.

|   The imported target "absl::log_severity" references the file
|
|      "../nativesdk-protobuf/4.23.4/recipe-sysroot/usr/local/oe-sdk-hardcoded-buildpath/sysroots/x86_64-w64-mingw32/usr/bin/libabsl_log_severity.dll"
|
|   but this file does not exist.

Signed-off-by: Samuli Piippo <samuli.piippo@qt.io>
---
 ...-Win32Waiter-and-PthreadWaiter-on-Mi.patch | 62 +++++++++++++++++++
 .../abseil-cpp/abseil-cpp_git.bb              |  3 +
 2 files changed, 65 insertions(+)
 create mode 100644 meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch
diff mbox series

Patch

diff --git a/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch b/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch
new file mode 100644
index 000000000..db559bb16
--- /dev/null
+++ b/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch
@@ -0,0 +1,62 @@ 
+From cb7665f39e23e95e2466390c60ee5a410780a3ed Mon Sep 17 00:00:00 2001
+From: Derek Mauro <dmauro@google.com>
+Date: Wed, 8 Nov 2023 09:55:31 -0800
+Subject: [PATCH] Avoid using both Win32Waiter and PthreadWaiter on MinGW, and
+ use StdcppWaiter instead.
+
+There are various flavors of MinGW, some of which support pthread,
+and some of which support Win32. Instead of figuring out which
+platform is being used, just use the generic implementation.
+
+PiperOrigin-RevId: 580565507
+Change-Id: Ia85fd7496f1e6ebdeadb95202f0039e844826118
+Upstream-Status: Backport
+---
+ absl/synchronization/internal/pthread_waiter.h | 4 ++--
+ absl/synchronization/internal/win32_waiter.h   | 6 ++++--
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/absl/synchronization/internal/pthread_waiter.h b/absl/synchronization/internal/pthread_waiter.h
+index 206aefa4..23db76ad 100644
+--- a/absl/synchronization/internal/pthread_waiter.h
++++ b/absl/synchronization/internal/pthread_waiter.h
+@@ -16,7 +16,7 @@
+ #ifndef ABSL_SYNCHRONIZATION_INTERNAL_PTHREAD_WAITER_H_
+ #define ABSL_SYNCHRONIZATION_INTERNAL_PTHREAD_WAITER_H_
+ 
+-#ifndef _WIN32
++#if !defined(_WIN32) && !defined(__MINGW32__)
+ #include <pthread.h>
+ 
+ #include "absl/base/config.h"
+@@ -55,6 +55,6 @@ class PthreadWaiter : public WaiterCrtp<PthreadWaiter> {
+ ABSL_NAMESPACE_END
+ }  // namespace absl
+ 
+-#endif  // ndef _WIN32
++#endif  // !defined(_WIN32) && !defined(__MINGW32__)
+ 
+ #endif  // ABSL_SYNCHRONIZATION_INTERNAL_PTHREAD_WAITER_H_
+diff --git a/absl/synchronization/internal/win32_waiter.h b/absl/synchronization/internal/win32_waiter.h
+index 87eb617c..fdab264e 100644
+--- a/absl/synchronization/internal/win32_waiter.h
++++ b/absl/synchronization/internal/win32_waiter.h
+@@ -20,7 +20,8 @@
+ #include <sdkddkver.h>
+ #endif
+ 
+-#if defined(_WIN32) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
++#if defined(_WIN32) && !defined(__MINGW32__) && \
++    _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ 
+ #include "absl/base/config.h"
+ #include "absl/synchronization/internal/kernel_timeout.h"
+@@ -65,6 +66,7 @@ class Win32Waiter : public WaiterCrtp<Win32Waiter> {
+ ABSL_NAMESPACE_END
+ }  // namespace absl
+ 
+-#endif  // defined(_WIN32) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
++#endif  // defined(_WIN32) && !defined(__MINGW32__) &&
++        // _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ 
+ #endif  // ABSL_SYNCHRONIZATION_INTERNAL_WIN32_WAITER_H_
diff --git a/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb b/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
index 5003187d0..65ecab7d0 100644
--- a/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
+++ b/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
@@ -15,6 +15,7 @@  SRC_URI = "git://github.com/abseil/abseil-cpp;branch=${BRANCH};protocol=https \
            file://0002-Remove-maes-option-from-cross-compilation.patch \
            file://abseil-ppc-fixes.patch \
            file://0003-Remove-neon-option-from-cross-compilation.patch \
+           file://0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch \
           "
 
 S = "${WORKDIR}/git"
@@ -32,4 +33,6 @@  EXTRA_OECMAKE = "-DBUILD_SHARED_LIBS=ON \
 
 BBCLASSEXTEND = "native nativesdk"
 
+SYSROOT_DIRS:append:class-nativesdk:mingw32 = " ${bindir}"
+
 FILES:${PN}-dev += "${includedir} ${libdir}/cmake ${libdir}/pkgconfig"