From 85ef7e6db838d5276da8c9d6b658f41cdda13e6c Mon Sep 17 00:00:00 2001 From: Robert Clausecker Date: Sat, 26 Apr 2025 23:14:26 +0200 Subject: [PATCH] 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 --- www/qt5-webengine/Makefile | 2 +- ...chromium_base_profiler_register__context.h | 17 +++++++++-- ...ty_chromium_build_config_compiler_BUILD.gn | 29 +++++++++++++------ ..._third__party_dav1d_libdav1d_src_arm_cpu.c | 14 +++++++++ ...omium_third__party_skia_src_core_SkCpu.cpp | 25 +++++++++++++++- 5 files changed, 74 insertions(+), 13 deletions(-) create mode 100644 www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_dav1d_libdav1d_src_arm_cpu.c diff --git a/www/qt5-webengine/Makefile b/www/qt5-webengine/Makefile index f69d3302e4fe..82986332de6c 100644 --- a/www/qt5-webengine/Makefile +++ b/www/qt5-webengine/Makefile @@ -19,7 +19,7 @@ PORTNAME= webengine PORTVERSION= ${QT5_VERSION}${QT5_KDE_PATCH} -PORTREVISION= 1 +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 @@ -9,7 +9,7 @@ #include #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() #include +@@ -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 ++ ++ 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; + }