git: 82ecae06fd4e - 2025Q2 - www/qt5-webengine: fix build on armv7

From: Robert Clausecker <fuz_at_FreeBSD.org>
Date: Thu, 01 May 2025 10:05:55 UTC
The branch 2025Q2 has been updated by fuz:

URL: https://cgit.FreeBSD.org/ports/commit/?id=82ecae06fd4e72d86ed40835fa9a9b56c5d7b551

commit 82ecae06fd4e72d86ed40835fa9a9b56c5d7b551
Author:     Robert Clausecker <fuz@FreeBSD.org>
AuthorDate: 2025-04-26 21:14:26 +0000
Commit:     Robert Clausecker <fuz@FreeBSD.org>
CommitDate: 2025-05-01 10:05:36 +0000

    www/qt5-webengine: fix build on armv7
    
    The build system adds the bogus option --target=arm-linux-gnueabihf to
    the build when building on arm, causing all sorts of issues.  Patch that
    out, then add some polyfill for API differences between ARM Linux and
    ARM FreeBSD.
    
    Approved by:    portmgr (build fix blanket)
    MFH:            2025Q2
    
    (cherry picked from commit 85ef7e6db838d5276da8c9d6b658f41cdda13e6c)
---
 www/qt5-webengine/Makefile                         |  1 +
 ...arty_chromium_base_profiler_register__context.h | 17 +++++++++++--
 ...rdparty_chromium_build_config_compiler_BUILD.gn | 29 +++++++++++++++-------
 ...omium_third__party_dav1d_libdav1d_src_arm_cpu.c | 14 +++++++++++
 ...y_chromium_third__party_skia_src_core_SkCpu.cpp | 25 ++++++++++++++++++-
 5 files changed, 74 insertions(+), 12 deletions(-)

diff --git a/www/qt5-webengine/Makefile b/www/qt5-webengine/Makefile
index d020c18c59da..82986332de6c 100644
--- a/www/qt5-webengine/Makefile
+++ b/www/qt5-webengine/Makefile
@@ -19,6 +19,7 @@
 
 PORTNAME=	webengine
 PORTVERSION=	${QT5_VERSION}${QT5_KDE_PATCH}
+PORTREVISION=	2
 CATEGORIES=	www
 PKGNAMEPREFIX=	qt5-
 
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_profiler_register__context.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_profiler_register__context.h
index 0d5fc62fbeea..2ced305b8228 100644
--- a/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_profiler_register__context.h
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_profiler_register__context.h
@@ -1,4 +1,4 @@
---- src/3rdparty/chromium/base/profiler/register_context.h.orig	2021-12-15 16:12:54 UTC
+--- src/3rdparty/chromium/base/profiler/register_context.h.orig	2025-03-06 09:26:10 UTC
 +++ src/3rdparty/chromium/base/profiler/register_context.h
 @@ -17,7 +17,7 @@
  #include <windows.h>
@@ -9,7 +9,7 @@
  #include <sys/ucontext.h>
  #endif
  
-@@ -190,6 +190,48 @@ inline uintptr_t& RegisterContextInstructionPointer(mc
+@@ -190,6 +190,61 @@ inline uintptr_t& RegisterContextInstructionPointer(mc
  }
  
  #endif  // #if defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_32_BITS)
@@ -54,6 +54,19 @@
 +inline uintptr_t& RegisterContextInstructionPointer(mcontext_t* context) {
 +  return AsUintPtr(&context->mc_gpregs.gp_elr);
 +}
++
++#elif defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_32_BITS)
++inline uintptr_t& RegisterContextStackPointer(mcontext_t* context) {
++  return AsUintPtr(&context->__gregs[_REG_SP]);
++}
++
++inline uintptr_t& RegisterContextFramePointer(mcontext_t* context) {
++  return AsUintPtr(&context->__gregs[_REG_FP]);
++}
++
++inline uintptr_t& RegisterContextInstructionPointer(mcontext_t* context) {
++  return AsUintPtr(&context->__gregs[_REG_PC]);
++}
 +#endif
  
  #else  // #if defined(OS_WIN)
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_config_compiler_BUILD.gn b/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_config_compiler_BUILD.gn
index 660b06bee167..80fd85c2cac5 100644
--- a/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_config_compiler_BUILD.gn
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_config_compiler_BUILD.gn
@@ -1,4 +1,4 @@
---- src/3rdparty/chromium/build/config/compiler/BUILD.gn.orig	2023-11-09 11:32:20 UTC
+--- src/3rdparty/chromium/build/config/compiler/BUILD.gn.orig	2025-03-06 09:26:10 UTC
 +++ src/3rdparty/chromium/build/config/compiler/BUILD.gn
 @@ -134,7 +134,7 @@ declare_args() {
    #
@@ -53,7 +53,18 @@
      }
    }
  
-@@ -796,7 +797,7 @@ config("compiler_cpu_abi") {
+@@ -782,10 +783,6 @@ config("compiler_cpu_abi") {
+         ]
+       }
+     } else if (current_cpu == "arm") {
+-      if (is_clang && !is_android && !is_nacl) {
+-        cflags += [ "--target=arm-linux-gnueabihf" ]
+-        ldflags += [ "--target=arm-linux-gnueabihf" ]
+-      }
+       if (!is_nacl) {
+         cflags += [
+           "-march=$arm_arch",
+@@ -796,7 +793,7 @@ config("compiler_cpu_abi") {
          cflags += [ "-mtune=$arm_tune" ]
        }
      } else if (current_cpu == "arm64") {
@@ -62,7 +73,7 @@
          cflags += [ "--target=aarch64-linux-gnu" ]
          ldflags += [ "--target=aarch64-linux-gnu" ]
        }
-@@ -1149,7 +1150,7 @@ config("compiler_deterministic") {
+@@ -1149,7 +1146,7 @@ config("compiler_deterministic") {
        "-Xclang",
        ".",
      ]
@@ -71,7 +82,7 @@
        # We don't use clang -cc1as on Windows (yet? https://crbug.com/762167)
        asmflags = [ "-Wa,-fdebug-compilation-dir,." ]
      }
-@@ -1535,6 +1536,10 @@ config("default_warnings") {
+@@ -1535,6 +1532,10 @@ config("default_warnings") {
        # which we no longer use. Check if it makes sense to remove
        # this as well. http://crbug.com/316352
        "-Wno-unneeded-internal-declaration",
@@ -82,7 +93,7 @@
      ]
  
      # use_xcode_clang only refers to the iOS toolchain, host binaries use
-@@ -1551,7 +1556,7 @@ config("default_warnings") {
+@@ -1551,7 +1552,7 @@ config("default_warnings") {
          cflags += [ "-Wno-nonportable-include-path" ]
        }
  
@@ -91,7 +102,7 @@
          # Flags NaCl (Clang 3.7) and Xcode 9.2 (Clang clang-900.0.39.2) do not
          # recognize.
          cflags += [
-@@ -1725,7 +1730,7 @@ config("no_chromium_code") {
+@@ -1725,7 +1726,7 @@ config("no_chromium_code") {
        # suppressing them individually, we just blanket suppress them here.
        "-Wno-unused-variable",
      ]
@@ -100,7 +111,7 @@
        cflags += [
          # TODO(https://crbug.com/1031169): Clean up and enable.
          "-Wno-misleading-indentation",
-@@ -1803,7 +1808,7 @@ config("thin_archive") {
+@@ -1803,7 +1804,7 @@ config("thin_archive") {
    # Mac and iOS use the mac-specific "libtool" command, not ar, which doesn't
    # have a "thin archive" mode (it does accept -T, but it means truncating
    # archive names to 16 characters, which is not what we want).
@@ -109,7 +120,7 @@
      arflags = [ "-T" ]
    } else if (is_win && use_lld) {
      arflags = [ "/llvmlibthin" ]
-@@ -2344,7 +2349,7 @@ config("symbols") {
+@@ -2344,7 +2345,7 @@ config("symbols") {
      # flag, so we can use use -g1 for pnacl and nacl-clang compiles.
      # gcc nacl is is_nacl && !is_clang, pnacl and nacl-clang are && is_clang.
      if (!is_nacl || is_clang) {
@@ -118,7 +129,7 @@
      }
  
      # TODO(https://crbug.com/1050118): Investigate missing debug info on mac.
-@@ -2386,7 +2391,7 @@ config("symbols") {
+@@ -2386,7 +2387,7 @@ config("symbols") {
      # DWARF info may be corrupt; offsets in a range list entry are in different
      # sections" there.  Maybe just a bug in nacl_switch_32.S.
      if (!is_apple && !is_nacl && current_cpu != "x86" &&
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_dav1d_libdav1d_src_arm_cpu.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_dav1d_libdav1d_src_arm_cpu.c
new file mode 100644
index 000000000000..2eb80728b1ab
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_dav1d_libdav1d_src_arm_cpu.c
@@ -0,0 +1,14 @@
+--- src/3rdparty/chromium/third_party/dav1d/libdav1d/src/arm/cpu.c.orig	2025-04-26 20:32:56 UTC
++++ src/3rdparty/chromium/third_party/dav1d/libdav1d/src/arm/cpu.c
+@@ -84,10 +84,7 @@ COLD unsigned dav1d_get_cpu_flags_arm(void) {
+     unsigned flags = 0;
+ #if defined(__ARM_NEON) || defined(__APPLE__) || defined(_WIN32) || ARCH_AARCH64
+     flags |= DAV1D_ARM_CPU_FLAG_NEON;
+-#elif defined(HAVE_GETAUXVAL) && ARCH_ARM
+-    unsigned long hw_cap = getauxval(AT_HWCAP);
+-    flags |= (hw_cap & NEON_HWCAP) ? DAV1D_ARM_CPU_FLAG_NEON : 0;
+-#elif defined(HAVE_ELF_AUX_INFO) && ARCH_ARM
++#elif defined(__FreeBSD__) && ARCH_ARM
+     unsigned long hw_cap = 0;
+     elf_aux_info(AT_HWCAP, &hw_cap, sizeof(hw_cap));
+     flags |= (hw_cap & NEON_HWCAP) ? DAV1D_ARM_CPU_FLAG_NEON : 0;
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_core_SkCpu.cpp b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_core_SkCpu.cpp
index 107a50ba8f74..3c4ff6b24e36 100644
--- a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_core_SkCpu.cpp
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_core_SkCpu.cpp
@@ -1,4 +1,4 @@
---- src/3rdparty/chromium/third_party/skia/src/core/SkCpu.cpp.orig	2021-12-15 16:12:54 UTC
+--- src/3rdparty/chromium/third_party/skia/src/core/SkCpu.cpp.orig	2025-03-06 09:26:10 UTC
 +++ src/3rdparty/chromium/third_party/skia/src/core/SkCpu.cpp
 @@ -72,6 +72,23 @@
          return features;
@@ -24,3 +24,26 @@
  #elif defined(SK_CPU_ARM64) && __has_include(<sys/auxv.h>)
      #include <sys/auxv.h>
  
+@@ -110,6 +127,22 @@
+                           || 0 == memcmp(kMongoose3, buf, SK_ARRAY_COUNT(buf))) {
+                 features &= ~(SkCpu::ASIMDHP);
+             }
++        }
++        return features;
++    }
++
++#elif defined(SK_CPU_ARM32) && defined(__FreeBSD__)
++    #include <sys/auxv.h>
++
++    static uint32_t read_cpu_features() {
++        uint32_t features = 0;
++        unsigned long hwcaps = 0;
++
++        elf_aux_info(AT_HWCAP, &hwcaps, sizeof hwcaps);
++
++        if (hwcaps & HWCAP_NEON ) {
++            features |= SkCpu::NEON;
++            if (hwcaps & HWCAP_VFPv4) { features |= SkCpu::NEON_FMA|SkCpu::VFP_FP16; }
+         }
+         return features;
+     }