Index | Thread | Search

From:
Brad Smith <brad@comstyle.com>
Subject:
Re: UPDATE: libvpx - PowerPC
To:
ports@openbsd.org
Date:
Sat, 1 Mar 2025 22:24:34 -0500

Download raw body.

Thread
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