Download raw body.
x11/gnustep/libobjc2: enable cache on powerpc
On Wed, Sep 10, 2025 at 5:11 AM George Koehler <kernigh@gmail.com> 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($<$<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
>
x11/gnustep/libobjc2: enable cache on powerpc