aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Kubaj <pkubaj@FreeBSD.org>2022-12-06 03:51:49 +0000
committerPiotr Kubaj <pkubaj@FreeBSD.org>2022-12-06 03:51:49 +0000
commitdf3e7be9ffeecd571a41bdc1ed08c41ed062fffc (patch)
tree5e6b61c125f49f0ae7dd6640f91ed0e9c6f489cb
parent908640ce3450dc5e55fee0fefea407b1a0aec693 (diff)
downloadports-df3e7be9ffeecd571a41bdc1ed08c41ed062fffc.tar.gz
ports-df3e7be9ffeecd571a41bdc1ed08c41ed062fffc.zip
security/palisade: fix build on powerpc64* and libomp-less architectures
-rw-r--r--security/palisade/Makefile7
-rw-r--r--security/palisade/files/patch-src_core_include_math_bigintnat_ubintnat.h22
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;