From: Brad Smith Subject: Re: UPDATE: libvpx - PowerPC To: ports@openbsd.org Date: Sat, 1 Mar 2025 22:24:34 -0500 ping. On 2025-02-14 3:08 a.m., Brad Smith wrote: > Here is a diff for libvpx to add PowerPC CPU feature detection for > PowerPC64 instead of the stub just to build. > > Needs testing on PowerPC64. > > > Index: Makefile > =================================================================== > RCS file: /cvs/ports/multimedia/libvpx/Makefile,v > retrieving revision 1.61 > diff -u -p -u -p -r1.61 Makefile > --- Makefile 24 Nov 2024 08:38:14 -0000 1.61 > +++ Makefile 14 Feb 2025 07:25:16 -0000 > @@ -4,6 +4,7 @@ GH_ACCOUNT= webmproject > GH_PROJECT= libvpx > GH_TAGNAME= v1.15.0 > EPOCH= 0 > +REVISION= 0 > CATEGORIES= multimedia > > SHARED_LIBS= vpx 18.0 > Index: patches/patch-vpx_ports_aarch32_cpudetect_c > =================================================================== > RCS file: /cvs/ports/multimedia/libvpx/patches/patch-vpx_ports_aarch32_cpudetect_c,v > retrieving revision 1.3 > diff -u -p -u -p -r1.3 patch-vpx_ports_aarch32_cpudetect_c > --- patches/patch-vpx_ports_aarch32_cpudetect_c 24 Nov 2024 08:38:14 -0000 1.3 > +++ patches/patch-vpx_ports_aarch32_cpudetect_c 14 Feb 2025 07:25:16 -0000 > @@ -1,4 +1,4 @@ > -Allow ARM CPU runtime detection code to build on OpenBSD. > +Add ARM CPU feature detection support for OpenBSD. > > Index: vpx_ports/aarch32_cpudetect.c > --- vpx_ports/aarch32_cpudetect.c.orig > Index: patches/patch-vpx_ports_ppc_cpudetect_c > =================================================================== > RCS file: /cvs/ports/multimedia/libvpx/patches/patch-vpx_ports_ppc_cpudetect_c,v > retrieving revision 1.2 > diff -u -p -u -p -r1.2 patch-vpx_ports_ppc_cpudetect_c > --- patches/patch-vpx_ports_ppc_cpudetect_c 11 Mar 2022 19:39:22 -0000 1.2 > +++ patches/patch-vpx_ports_ppc_cpudetect_c 14 Feb 2025 07:25:16 -0000 > @@ -1,31 +1,70 @@ > -Allow PowerPC CPU runtime detection code to build on OpenBSD. > +Add PowerPC CPU feature detection support for OpenBSD. > > Index: vpx_ports/ppc_cpudetect.c > --- vpx_ports/ppc_cpudetect.c.orig > +++ vpx_ports/ppc_cpudetect.c > -@@ -8,16 +8,19 @@ > +@@ -8,11 +8,8 @@ > * be found in the AUTHORS file in the root of the source tree. > */ > > -+#if defined(__linux__) > - #include > +-#include > #include > #include > - #include > - #include > -+#endif > +-#include > +-#include > > #include "./vpx_config.h" > #include "vpx_ports/ppc.h" > +@@ -35,6 +32,12 @@ static int cpu_env_mask(void) { > + return env && *env ? (int)strtol(env, NULL, 0) : ~0; > + } > > - #if CONFIG_RUNTIME_CPU_DETECT > +#if defined(__linux__) > - static int cpu_env_flags(int *flags) { > - char *env; > - env = getenv("VPX_SIMD_CAPS"); > -@@ -77,4 +80,5 @@ out_close: > - // If there is no RTCD the function pointers are not used and can not be > - // changed. > - int ppc_simd_caps(void) { return 0; } > ++ > ++#include > ++#include > ++#include > ++ > + int ppc_simd_caps(void) { > + int flags; > + int mask; > +@@ -71,6 +74,39 @@ int ppc_simd_caps(void) { > + } > + out_close: > + close(fd); > ++ return flags & mask; > ++} > ++ > ++#elif defined(__OpenBSD__) > ++ > ++#include > ++ > ++// Define hwcap values ourselves: building with an old auxv header where these > ++// hwcap values are not defined should not prevent features from being enabled. > ++#define VPX_PPC_HWCAP_VSX (1 << 7) > ++ > ++int ppc_simd_caps(void) { > ++ int flags; > ++ int mask; > ++ > ++ // If VPX_SIMD_CAPS is set then allow only those capabilities. > ++ if (!cpu_env_flags(&flags)) { > ++ return flags; > ++ } > ++ > ++ mask = cpu_env_mask(); > ++ > ++#ifdef __OpenBSD__ > ++ unsigned long hwcap = 0; > ++ elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap)); > ++#else > ++ unsigned long hwcap = getauxval(AT_HWCAP); > +#endif > - #endif // CONFIG_RUNTIME_CPU_DETECT > ++#if HAVE_VSX > ++ if (hwcap & VPX_PPC_HWCAP_VSX) { > ++ flags |= HAS_VSX; > ++ } > ++#endif // HAVE_VSX > + return flags & mask; > + } > + #else