Backport a patch to fix build for ppc64:
modules/core/include/opencv2/core/hal/intrin_vsx.hpp:265:75: error: expected
primary-expression before 'v'
265 | template <> inline _Tpvec v_setall_(_Tp v) { return
v_setall_##suffix(_Tp v); } \
|
Also fix QA issue:
ERROR: QA Issue: File /usr/src/debug/opencv/4.11.0/modules/core/arithm.vsx3.cpp
in package opencv-src contains reference to TMPDIR [buildpaths]
ERROR: QA Issue: File
/usr/src/debug/opencv/4.11.0/modules/core/convert.vsx3.cpp in package
opencv-src contains reference to TMPDIR [buildpaths]
Signed-off-by: Yi Zhao <yi.z...@windriver.com>
---
...-fixed-VSX-intrinsics-implementation.patch | 61 +++++++++++++++++++
.../recipes-support/opencv/opencv_4.11.0.bb | 7 +++
2 files changed, 68 insertions(+)
create mode 100644
meta-oe/recipes-support/opencv/opencv/0001-core-fixed-VSX-intrinsics-implementation.patch
diff --git
a/meta-oe/recipes-support/opencv/opencv/0001-core-fixed-VSX-intrinsics-implementation.patch
b/meta-oe/recipes-support/opencv/opencv/0001-core-fixed-VSX-intrinsics-implementation.patch
new file mode 100644
index 0000000000..9fc89e4244
--- /dev/null
+++
b/meta-oe/recipes-support/opencv/opencv/0001-core-fixed-VSX-intrinsics-implementation.patch
@@ -0,0 +1,61 @@
+From 97f3f390661f2fd1168336820b89eb4383ce8528 Mon Sep 17 00:00:00 2001
+From: Maksim Shabunin <maksim.shabu...@gmail.com>
+Date: Fri, 10 Jan 2025 18:34:11 +0300
+Subject: [PATCH] core: fixed VSX intrinsics implementation
+
+Upstream-Status: Backport
+[https://github.com/opencv/opencv/commit/97f3f390661f2fd1168336820b89eb4383ce8528]
+
+Signed-off-by: Yi Zhao <yi.z...@windriver.com>
+---
+ modules/core/include/opencv2/core/hal/intrin_vsx.hpp | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/modules/core/include/opencv2/core/hal/intrin_vsx.hpp
b/modules/core/include/opencv2/core/hal/intrin_vsx.hpp
+index 2157e1e870..0a0915a22f 100644
+--- a/modules/core/include/opencv2/core/hal/intrin_vsx.hpp
++++ b/modules/core/include/opencv2/core/hal/intrin_vsx.hpp
+@@ -262,7 +262,7 @@ OPENCV_HAL_IMPL_VSX_EXTRACT_N(v_float64x2, double)
+ inline _Tpvec v_setzero_##suffix() { return _Tpvec(vec_splats((_Tp)0)); }
\
+ inline _Tpvec v_setall_##suffix(_Tp v) { return _Tpvec(vec_splats((_Tp)v));}
\
+ template <> inline _Tpvec v_setzero_() { return v_setzero_##suffix(); }
\
+-template <> inline _Tpvec v_setall_(_Tp v) { return v_setall_##suffix(_Tp v);
} \
++template <> inline _Tpvec v_setall_(_Tp v) { return v_setall_##suffix(v); }
\
+ template<typename _Tpvec0> inline _Tpvec v_reinterpret_as_##suffix(const _Tpvec0
&a) \
+ { return _Tpvec((cast)a.val); }
+
+@@ -650,11 +650,11 @@ OPENCV_HAL_IMPL_VSX_SELECT(v_float64x2, vec_bdword2_c)
+ #define OPENCV_HAL_IMPL_VSX_INT_CMP_OP(_Tpvec) \
+ inline _Tpvec v_eq(const _Tpvec& a, const _Tpvec& b) \
+ { return _Tpvec(vec_cmpeq(a.val, b.val)); } \
+-inline _Tpvec V_ne(const _Tpvec& a, const _Tpvec& b) \
++inline _Tpvec v_ne(const _Tpvec& a, const _Tpvec& b) \
+ { return _Tpvec(vec_cmpne(a.val, b.val)); } \
+ inline _Tpvec v_lt(const _Tpvec& a, const _Tpvec& b) \
+ { return _Tpvec(vec_cmplt(a.val, b.val)); } \
+-inline _Tpvec V_gt(const _Tpvec& a, const _Tpvec& b) \
++inline _Tpvec v_gt(const _Tpvec& a, const _Tpvec& b) \
+ { return _Tpvec(vec_cmpgt(a.val, b.val)); } \
+ inline _Tpvec v_le(const _Tpvec& a, const _Tpvec& b) \
+ { return _Tpvec(vec_cmple(a.val, b.val)); } \
+@@ -1507,7 +1507,7 @@ inline v_float64x2 v_dotprod_expand(const v_int32x4& a,
const v_int32x4& b, cons
+ inline v_int32x4 v_dotprod_fast(const v_int16x8& a, const v_int16x8& b)
+ { return v_dotprod(a, b); }
+ inline v_int32x4 v_dotprod_fast(const v_int16x8& a, const v_int16x8& b, const
v_int32x4& c)
+-{ return v_int32x4(vec_msum(a.val, b.val, vec_int4_z)) + c; }
++{ return v_add(v_int32x4(vec_msum(a.val, b.val, vec_int4_z)), c); }
+ // 32 >> 64
+ inline v_int64x2 v_dotprod_fast(const v_int32x4& a, const v_int32x4& b)
+ { return v_dotprod(a, b); }
+@@ -1518,7 +1518,7 @@ inline v_int64x2 v_dotprod_fast(const v_int32x4& a, const
v_int32x4& b, const v_
+ inline v_uint32x4 v_dotprod_expand_fast(const v_uint8x16& a, const
v_uint8x16& b)
+ { return v_dotprod_expand(a, b); }
+ inline v_uint32x4 v_dotprod_expand_fast(const v_uint8x16& a, const v_uint8x16& b,
const v_uint32x4& c)
+-{ return v_uint32x4(vec_msum(a.val, b.val, vec_uint4_z)) + c; }
++{ return v_add(v_uint32x4(vec_msum(a.val, b.val, vec_uint4_z)), c); }
+
+ inline v_int32x4 v_dotprod_expand_fast(const v_int8x16& a, const v_int8x16& b)
+ {
+--
+2.25.1
+
diff --git a/meta-oe/recipes-support/opencv/opencv_4.11.0.bb
b/meta-oe/recipes-support/opencv/opencv_4.11.0.bb
index 07b3a9d9e6..1613b6a3ed 100644
--- a/meta-oe/recipes-support/opencv/opencv_4.11.0.bb
+++ b/meta-oe/recipes-support/opencv/opencv_4.11.0.bb
@@ -31,6 +31,7 @@ SRC_URI =
"git://github.com/opencv/opencv.git;name=opencv;branch=4.x;protocol=ht
file://download.patch \
file://0001-Make-ts-module-external.patch \
file://0008-Do-not-embed-build-directory-in-binaries.patch \
+ file://0001-core-fixed-VSX-intrinsics-implementation.patch \
"
SRC_URI:append:riscv64 = "
file://0001-Use-Os-to-compile-tinyxml2.cpp.patch;patchdir=contrib"
@@ -208,4 +209,10 @@ do_install:append() {
if [ -f ${D}${bindir}/setup_vars_opencv4.sh ]; then
rm -rf ${D}${bindir}/setup_vars_opencv4.sh
fi
+
+ for fn in arithm.vsx3.cpp convert.vsx3.cpp; do
+ if [ -f ${B}/modules/core/$fn ]; then
+ sed -i -e 's,${S},/usr/src/debug/${PN}/${PV},g'
${B}/modules/core/$fn
+ fi