From: Brad Smith Subject: Re: UPDATE: libvpx - PowerPC To: ports@openbsd.org Date: Wed, 19 Mar 2025 00:35:41 -0400 ping. On 2025-03-01 10:24 p.m., Brad Smith wrote: > 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