Index | Thread | Search

From:
George Koehler <kernigh@gmail.com>
Subject:
x11/gnustep/libobjc2: enable cache on powerpc
To:
ports@openbsd.org
Cc:
Sebastian Reitenbach <sebastia@openbsd.org>
Date:
Tue, 9 Sep 2025 23:11:03 -0400

Download raw body.

Thread
x11/gnustep/libobjc2 is disabling its objc_method_cache_version only
on powerpc.  This broke x11/gnustep/base, which assumes that
objc_method_cache_version exists.  With this patch, it exists and my
powerpc can build base and run x11/gnustep/terminal.

objc_method_cache_version is a 64-bit atomic variable.  Most archs
have 64-bit atomic ops in hardware, but powerpc needs software
functions like __atomic_fetch_add_8.  Enabling it might cause trouble
with gcc (missing -latomic), but works on OpenBSD with clang and
libcompiler_rt.

ok?
--gkoehler

Index: Makefile
===================================================================
RCS file: /cvs/ports/x11/gnustep/libobjc2/Makefile,v
diff -u -p -r1.39 Makefile
--- Makefile	22 Apr 2024 06:47:57 -0000	1.39
+++ Makefile	10 Sep 2025 01:49:50 -0000
@@ -9,6 +9,7 @@ GH_PROJECT =	libobjc2
 GH_TAGNAME =	v${VERSION}
 DISTNAME =	libobjc2-${VERSION:S/_//}
 PKGNAME =	gnustep-${DISTNAME}
+REVISION =	0
 
 SHARED_LIBS +=	objc2	3.0
 SHARED_LIBS +=  objcxx	2.0
Index: patches/patch-CMakeLists_txt
===================================================================
RCS file: patches/patch-CMakeLists_txt
diff -N patches/patch-CMakeLists_txt
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-CMakeLists_txt	10 Sep 2025 01:49:50 -0000
@@ -0,0 +1,14 @@
+Enable objc_method_cache_version on powerpc.
+
+Index: CMakeLists.txt
+--- CMakeLists.txt.orig
++++ CMakeLists.txt
+@@ -188,7 +188,7 @@ add_compile_options($<$<STREQUAL:${CMAKE_SYSTEM_PROCES
+ # which is used in safe caching.
+ # You must also update the guard in objc/runtime.h, when updating
+ # this macro.
+-if (ARCHITECTURE STREQUAL "powerpc")
++if (OFF AND ARCHITECTURE STREQUAL "powerpc")
+ 	add_definitions(-DNO_SAFE_CACHING)
+ endif()
+ 
Index: patches/patch-objc_slot_h
===================================================================
RCS file: patches/patch-objc_slot_h
diff -N patches/patch-objc_slot_h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-objc_slot_h	10 Sep 2025 01:49:50 -0000
@@ -0,0 +1,14 @@
+Enable objc_method_cache_version on powerpc.
+
+Index: objc/slot.h
+--- objc/slot.h.orig
++++ objc/slot.h
+@@ -31,7 +31,7 @@ struct objc_slot2
+  * Caching is disabled on targets without native 64-bit atomics support such
+  * as PowerPC 32-bit.
+  */
+-#if defined(__powerpc__) && !defined(__powerpc64__)
++#if 0 && defined(__powerpc__) && !defined(__powerpc64__)
+ #else
+ OBJC_PUBLIC extern _Atomic(uint64_t) objc_method_cache_version;
+ #endif