Index | Thread | Search

From:
Brad Smith <brad@comstyle.com>
Subject:
Re: UPDATE: libvpx - PowerPC
To:
ports@openbsd.org
Date:
Wed, 19 Mar 2025 00:35:41 -0400

Download raw body.

Thread
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 <fcntl.h>
>> +-#include <fcntl.h>
>>    #include <unistd.h>
>>    #include <stdint.h>
>> - #include <asm/cputable.h>
>> - #include <linux/auxvec.h>
>> -+#endif
>> +-#include <asm/cputable.h>
>> +-#include <linux/auxvec.h>
>>       #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 <fcntl.h>
>> ++#include <asm/cputable.h>
>> ++#include <linux/auxvec.h>
>> ++
>> + 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 <sys/auxv.h>
>> ++
>> ++// 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