git: df3e7be9ffee - main - security/palisade: fix build on powerpc64* and libomp-less architectures

From: Piotr Kubaj <pkubaj_at_FreeBSD.org>
Date: Tue, 06 Dec 2022 03:51:53 UTC
The branch main has been updated by pkubaj:

URL: https://cgit.FreeBSD.org/ports/commit/?id=df3e7be9ffeecd571a41bdc1ed08c41ed062fffc

commit df3e7be9ffeecd571a41bdc1ed08c41ed062fffc
Author:     Piotr Kubaj <pkubaj@FreeBSD.org>
AuthorDate: 2022-12-06 03:51:49 +0000
Commit:     Piotr Kubaj <pkubaj@FreeBSD.org>
CommitDate: 2022-12-06 03:51:49 +0000

    security/palisade: fix build on powerpc64* and libomp-less architectures
---
 security/palisade/Makefile                         |  7 ++-----
 ...atch-src_core_include_math_bigintnat_ubintnat.h | 22 ++++++++++++++++++++++
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/security/palisade/Makefile b/security/palisade/Makefile
index 0d923f077abc..80b7ad07804a 100644
--- a/security/palisade/Makefile
+++ b/security/palisade/Makefile
@@ -11,11 +11,6 @@ LICENSE=	BSD2CLAUSE
 LICENSE_FILE=	${WRKSRC}/LICENSE
 
 BROKEN_i386=		fails to build: a declaration of 'Mul128' must be available
-BROKEN_powerpc64=	fails to build: math/native_int/binint.h:510:11: error: Architecture not supported for MultD()
-BROKEN_riscv64=		fails to build: math/bigintnat/ubintnat.h:2250:2: error: Architecture not supported for MultD()
-.if !exists(/usr/include/omp.h)
-BROKEN=			requires OpenMP support that is missing on this architecture
-.endif
 
 BUILD_DEPENDS=	autoconf:devel/autoconf # possibly a mistake in the project
 
@@ -43,7 +38,9 @@ BINARY_ALIAS=	git=false
 LDFLAGS+=	-pthread # only for tests: see https://gitlab.com/palisade/palisade-release/-/issues/23
 
 OPTIONS_DEFINE=		OPENMP HEXL
+.if exists(/usr/include/omp.h)
 OPTIONS_DEFAULT=	OPENMP
+.endif
 
 HEXL_DESC=		Use Intel Hexl Library
 
diff --git a/security/palisade/files/patch-src_core_include_math_bigintnat_ubintnat.h b/security/palisade/files/patch-src_core_include_math_bigintnat_ubintnat.h
new file mode 100644
index 000000000000..8f02234b7e17
--- /dev/null
+++ b/security/palisade/files/patch-src_core_include_math_bigintnat_ubintnat.h
@@ -0,0 +1,22 @@
+--- src/core/include/math/bigintnat/ubintnat.h.orig	2022-01-28 23:16:29 UTC
++++ src/core/include/math/bigintnat/ubintnat.h
+@@ -2218,12 +2218,17 @@ class NativeIntegerT
+     res.lo = x.lo * y;
+     asm("umulh %0, %1, %2\n\t" : "=r"(res.hi) : "r"(x.lo), "r"(y));
+     res.hi += x.hi * y;
+-#elif defined(__arm__) // 32 bit processor
++#elif defined(__powerpc64__) || defined(__riscv)
++    U128BITS wres(0), wa(a), wb(b);
++    wres = wa * wb;  // should give us 128 bits  of 64 * 64 
++    res.hi = (uint64_t)(wres >> 64);
++    res.lo = (uint64_t)wres;
++#elif defined(__arm__) || defined(__powerpc__) // 32 bit processor
+     uint64_t wres(0), wa(a), wb(b);
+ 
+     wres = wa * wb;  // should give us the lower 64 bits of 32*32
+     res.hi = wres >> 32;
+-    res.lo = (uint32_t)wres && 0xFFFFFFFF;
++    res.lo = (uint32_t)wres & 0xFFFFFFFF;
+ #elif defined(__EMSCRIPTEN__)  // web assembly
+     U64BITS a1 = a >> 32;
+     U64BITS a2 = (uint32_t)a;