orc: fix native build on ubuntu 18
Ubuntu 18 is still a supported distro for Kirkstone, but a recent update of orc is failing the native build, because it requires a GCC version newer than the default included in ubuntu 18. This commit backports a fix which is part of upstream orc 0.4.40. Signed-off-by: Javier Viguera <javier.viguera@digi.com>
This commit is contained in:
parent
fe9e0d701a
commit
bee97587cb
|
|
@ -0,0 +1,62 @@
|
|||
From e184d18fd6e4fa18178b30871903cdaa839093fe Mon Sep 17 00:00:00 2001
|
||||
From: "L. E. Segovia" <amy@centricular.com>
|
||||
Date: Fri, 19 Jul 2024 11:40:28 -0300
|
||||
Subject: [PATCH] x86: work around old GCC versions (pre 9.0) having broken
|
||||
xgetbv implementations
|
||||
|
||||
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71659
|
||||
|
||||
Part-of: <https://gitlab.freedesktop.org/gstreamer/orc/-/merge_requests/194>
|
||||
Upstream-Status: Backport
|
||||
---
|
||||
orc/orccpu-x86.c | 25 +++++++++++++++++++++----
|
||||
1 file changed, 21 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/orc/orccpu-x86.c b/orc/orccpu-x86.c
|
||||
index 742fa1f28d6c..315f04eed287 100644
|
||||
--- a/orc/orccpu-x86.c
|
||||
+++ b/orc/orccpu-x86.c
|
||||
@@ -34,6 +34,19 @@
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# include <intrin.h>
|
||||
+#elif defined(__GNUC__)
|
||||
+#if __GNUC__ >= 8 && __GNUC__ < 9
|
||||
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71659
|
||||
+# include <xsaveintrin.h>
|
||||
+#elif __GNUC__ < 8
|
||||
+# define ORC_NEEDS_ASM_XSAVE 1
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
+#if !defined(_MSC_VER) || defined(__clang__)
|
||||
+#define ORC_TARGET_XSAVE __attribute__((target("xsave")))
|
||||
+#else
|
||||
+#define ORC_TARGET_XSAVE
|
||||
#endif
|
||||
|
||||
#include <orc/orcdebug.h>
|
||||
@@ -304,15 +317,19 @@ orc_x86_cpuid_get_branding_string (void)
|
||||
// Checks if XMM and YMM state are enabled in XCR0.
|
||||
// See 14.3 DETECTION OF INTEL® AVX INSTRUCTIONS on the
|
||||
// Intel® 64 and IA-32 Architectures Software Developer’s Manual
|
||||
-#if !defined(_MSC_VER) || defined(__clang__)
|
||||
-#define ORC_TARGET_XSAVE __attribute__((target("xsave")))
|
||||
+#ifdef ORC_NEEDS_ASM_XSAVE
|
||||
+static orc_bool check_xcr0_ymm()
|
||||
+{
|
||||
+ uint32_t xcr0;
|
||||
+ __asm__ ("xgetbv" : "=a" (xcr0) : "c" (0) : "%edx" );
|
||||
+ return ((xcr0 & 6U) == 6U);
|
||||
+}
|
||||
#else
|
||||
-#define ORC_TARGET_XSAVE
|
||||
-#endif
|
||||
static orc_bool ORC_TARGET_XSAVE check_xcr0_ymm()
|
||||
{
|
||||
return (_xgetbv(0) & 6U) != 0U;
|
||||
}
|
||||
+#endif
|
||||
|
||||
static void
|
||||
orc_x86_cpuid_handle_standard_flags (void)
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Copyright (C) 2024, Digi International Inc.
|
||||
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/${BP}:"
|
||||
|
||||
SRC_URI:append:class-native = " file://0001-x86-work-around-old-GCC-versions-pre-9.0-having-brok.patch"
|
||||
Loading…
Reference in New Issue