From: Sebastian Reitenbach Subject: Re: x11/gnustep/libobjc2: enable cache on powerpc To: George Koehler Cc: ports@openbsd.org Date: Wed, 10 Sep 2025 08:23:39 +0200 On Wed, Sep 10, 2025 at 5:11 AM George Koehler wrote: > 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. > IIRC, libobjc2 isn't really meant to be built with gcc anyways. I don't have such platform around to test, but if it works for you, OK sebastia@ > > 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($<$ + # 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 >