git: 8489b7372bc1 - main - www/qt6-webengine: add powerpc64le support
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 15 Oct 2026 10:45:40 UTC
The branch main has been updated by pkubaj:
URL: https://cgit.FreeBSD.org/ports/commit/?id=8489b7372bc1c2731e81d0f65225bd3949d29204
commit 8489b7372bc1c2731e81d0f65225bd3949d29204
Author: Piotr Kubaj <pkubaj@FreeBSD.org>
AuthorDate: 2026-10-14 18:51:25 +0000
Commit: Piotr Kubaj <pkubaj@FreeBSD.org>
CommitDate: 2026-10-15 10:45:20 +0000
www/qt6-webengine: add powerpc64le support
The architecture layer is derived from Chimera Linux's qt6-qtwebengine
ppc64le patchset, reduced to the files FreeBSD actually compiles and
adapted to FreeBSD:
- gn: map uname -m "powerpc" to ppc64 in host arch detection
- cmake/QtToolchainHelpers: map power64 to the ppc64 GN arch
- build/config/compiler: don't force a Linux target triple on BSD
- PartitionAlloc: ppc64 GN wiring, dynamic-page-size ASLR variant on BSD
(as for arm64), pin kAlignment to 16 (alignof(max_align_t) is 8 while
long double is 64-bit)
- v8: POWER8 baseline with AltiVec/VSX; make
Assembler::kMaximalBufferSize public, as the 6.11.2 baseline compiler
needs it
- base: define kThreadPriorityToNiceValueMapForTest on BSD; on ppc64 the
TOC reference survives --gc-sections
- blink/webaudio: fix the stale scalar ProcessARateVector fallback
signature in delay.cc
- devtools: don't create a zero-sized @rollup/plugin-terser worker pool
when os.cpus() is empty (libuv lacks hw.clockrate on powerpc)
- boringssl, dav1d (HAVE_ELF_AUX_INFO), dawn, highway, libaom, libvpx,
pffft, webrtc, ui/gl, abseil cycleclock, MUSTTAIL: ppc64 support
No functional change for the other architectures.
Approved by: kde (maintainer timeout)
Differential Revision: https://reviews.freebsd.org/D59520
---
www/qt6-webengine/Makefile | 2 +-
.../files/patch-cmake_QtToolchainHelpers.cmake | 15 +++++--
...cator_partition__allocator_partition__alloc.gni | 15 +++++--
...artition__alloc_address__space__randomization.h | 11 ++++-
...c_partition__alloc_page__allocator__constants.h | 11 ++++-
..._partition__alloc_partition__alloc__constants.h | 18 ++++++--
...rc_partition__alloc_partition__alloc__forward.h | 6 ++-
...src_3rdparty_chromium_base_compiler__specific.h | 11 ++++-
...hromium_base_threading_platform__thread__bsd.cc | 14 +++++-
...rdparty_chromium_build_config_compiler_BUILD.gn | 9 ++++
...il-cpp_absl_base_internal_unscaledcycleclock.cc | 18 ++++++++
...d__party_blink_renderer_platform_audio_delay.cc | 13 ++++++
...dparty_chromium_third__party_boringssl_BUILD.gn | 18 ++++++++
...d__party_boringssl_src_include_openssl_target.h | 12 +++++
..._third__party_dav1d_config_linux_ppc64_config.h | 51 ++++++++++++++++++++++
...rd__party_dav1d_libdav1d_src_ppc_dav1d__types.h | 22 ++++++++++
...um_third__party_dawn_src_dawn_common_Platform.h | 24 +++++++++-
...modules__rollup_plugin-terser_dist_cjs_index.js | 11 +++++
..._modules__rollup_plugin-terser_dist_es_index.js | 11 +++++
...hromium_third__party_highway_src_hwy_targets.cc | 14 ++++++
..._3rdparty_chromium_third__party_libaom_BUILD.gn | 11 +++++
..._3rdparty_chromium_third__party_libvpx_BUILD.gn | 33 ++++++++++++++
...y_chromium_third__party_libvpx_generate__gni.sh | 20 +++++++++
...rdparty_chromium_third__party_pffft_src_pffft.c | 10 +++++
...ium_third__party_webrtc_rtc__base_system_arch.h | 21 +++++++++
.../patch-src_3rdparty_chromium_ui_gl_features.gni | 9 ++++
.../files/patch-src_3rdparty_chromium_v8_BUILD.gn | 23 ++++++++--
...rty_chromium_v8_src_codegen_ppc_assembler-ppc.h | 16 +++++++
.../patch-src_3rdparty_chromium_v8_test_BUILD.gn | 29 ++++++++++++
.../patch-src_3rdparty_gn_src_util_sys__info.cc | 11 +++++
30 files changed, 467 insertions(+), 22 deletions(-)
diff --git a/www/qt6-webengine/Makefile b/www/qt6-webengine/Makefile
index 8dd8990c33b2..03277d20cfe0 100644
--- a/www/qt6-webengine/Makefile
+++ b/www/qt6-webengine/Makefile
@@ -22,7 +22,7 @@ MAINTAINER= kde@FreeBSD.org
COMMENT?= Qt 6 library to render web content
# 32-bit platforms are not supported by upstream, but we're limping them along.
-ONLY_FOR_ARCHS= aarch64 amd64 armv7 i386
+ONLY_FOR_ARCHS= aarch64 amd64 armv7 i386 powerpc64le
BUILD_DEPENDS= ${LOCALBASE}/include/vulkan/vulkan.h:graphics/vulkan-headers \
${PYTHON_PKGNAMEPREFIX}cyclonedx-python-lib>0:textproc/py-cyclonedx-python-lib@${PY_FLAVOR} \
diff --git a/www/qt6-webengine/files/patch-cmake_QtToolchainHelpers.cmake b/www/qt6-webengine/files/patch-cmake_QtToolchainHelpers.cmake
index dea62fe440b1..27d3991021a9 100644
--- a/www/qt6-webengine/files/patch-cmake_QtToolchainHelpers.cmake
+++ b/www/qt6-webengine/files/patch-cmake_QtToolchainHelpers.cmake
@@ -1,6 +1,15 @@
--- cmake/QtToolchainHelpers.cmake.orig 2026-08-11 12:42:19 UTC
+++ cmake/QtToolchainHelpers.cmake
-@@ -95,6 +95,8 @@ function(get_gn_os result)
+@@ -55,6 +55,8 @@ function(get_gn_arch result arch)
+ set(${result} "mips64el" PARENT_SCOPE)
+ elseif(arch STREQUAL "riscv64")
+ set(${result} "riscv64" PARENT_SCOPE)
++ elseif(arch STREQUAL "power64")
++ set(${result} "ppc64" PARENT_SCOPE)
+ else()
+ message(FATAL_ERROR "Unknown architecture: ${arch}")
+ endif()
+@@ -95,6 +97,8 @@ function(get_gn_os result)
set(${result} "mac" PARENT_SCOPE)
elseif(IOS)
set(${result} "ios" PARENT_SCOPE)
@@ -9,7 +18,7 @@
else()
message(DEBUG "Unrecognized OS")
endif()
-@@ -492,7 +494,7 @@ macro(append_compiler_linker_sdk_setup)
+@@ -492,7 +496,7 @@ macro(append_compiler_linker_sdk_setup)
)
endif()
get_gn_arch(cpu ${TEST_architecture_arch})
@@ -18,7 +27,7 @@
extend_gn_list_cflag(gnArgArg
ARG arm_tune
-@@ -601,7 +603,7 @@ macro(append_toolchain_setup)
+@@ -601,7 +605,7 @@ macro(append_toolchain_setup)
endif()
unset(host_cpu)
unset(target_cpu)
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_partition__alloc.gni b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_partition__alloc.gni
index 707912e65ac1..0735dc5378bf 100644
--- a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_partition__alloc.gni
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_partition__alloc.gni
@@ -1,6 +1,15 @@
---- src/3rdparty/chromium/base/allocator/partition_allocator/partition_alloc.gni.orig 2025-09-06 10:01:20 UTC
+--- src/3rdparty/chromium/base/allocator/partition_allocator/partition_alloc.gni.orig 2026-05-08 07:54:08 UTC
+++ src/3rdparty/chromium/base/allocator/partition_allocator/partition_alloc.gni
-@@ -87,7 +87,7 @@ if (current_cpu == "x64" || current_cpu == "arm64" ||
+@@ -66,7 +66,7 @@ if (current_cpu == "x64" || current_cpu == "arm64" ||
+ # Whether 64-bit pointers are used.
+ # A static_assert in partition_alloc_config.h verifies that.
+ if (current_cpu == "x64" || current_cpu == "arm64" || current_cpu == "arm64e" ||
+- current_cpu == "loong64" || current_cpu == "riscv64") {
++ current_cpu == "loong64" || current_cpu == "riscv64" || current_cpu == "ppc64") {
+ assert(current_cpu != "arm64e" || (is_ios && target_environment == "device"))
+ has_64_bit_pointers = true
+ } else if (current_cpu == "x86" || current_cpu == "arm" ||
+@@ -87,7 +87,7 @@ use_large_empty_slot_span_ring = true
# TODO(crbug.com/329199197): Clean this up when experiments are complete.
use_large_empty_slot_span_ring = true
@@ -9,7 +18,7 @@
!is_hwasan && (is_linux || is_android)
declare_args() {
-@@ -493,7 +493,7 @@ assert(!use_asan_backup_ref_ptr || use_raw_ptr_hookabl
+@@ -493,7 +493,7 @@ is_pkeys_available =
# dependencies that use partition_allocator are compiled in AOSP against a
# version of glibc that does not include pkeys syscall numbers.
is_pkeys_available =
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_address__space__randomization.h b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_address__space__randomization.h
index 317e43d0705e..124d8cc534e9 100644
--- a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_address__space__randomization.h
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_address__space__randomization.h
@@ -1,4 +1,4 @@
---- src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/address_space_randomization.h.orig 2025-09-06 10:01:20 UTC
+--- src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/address_space_randomization.h.orig 2026-05-08 07:54:08 UTC
+++ src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/address_space_randomization.h
@@ -43,7 +43,7 @@ AslrMask(uintptr_t bits) {
@@ -18,3 +18,12 @@
// Linux on arm64 can use 39, 42, 48, or 52-bit user space, depending on
// page size and number of levels of translation pages used. We use
+@@ -183,7 +183,7 @@ AslrMask(uintptr_t bits) {
+ }
+
+ #else // !PA_BUILDFLAG(IS_AIX) && !PA_BUILDFLAG(PA_ARCH_CPU_BIG_ENDIAN)
+- #if PA_BUILDFLAG(IS_LINUX)
++ #if PA_BUILDFLAG(IS_LINUX) || PA_BUILDFLAG(IS_BSD)
+
+ // Little-endian Linux PPC has 48 bits of virtual addressing. Use 46.
+ PA_ALWAYS_INLINE PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR uintptr_t ASLRMask() {
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_page__allocator__constants.h b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_page__allocator__constants.h
index 055727b03e3d..fb7ea9c0dc2e 100644
--- a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_page__allocator__constants.h
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_page__allocator__constants.h
@@ -1,4 +1,4 @@
---- src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/page_allocator_constants.h.orig 2025-09-06 10:01:20 UTC
+--- src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/page_allocator_constants.h.orig 2026-05-08 07:54:08 UTC
+++ src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/page_allocator_constants.h
@@ -31,8 +31,8 @@
#define PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR __attribute__((const))
@@ -11,3 +11,12 @@
// This should work for all POSIX (if needed), but currently all other
// supported OS/architecture combinations use either hard-coded values
// (such as x86) or have means to determine these values without needing
+@@ -124,7 +124,7 @@ PageAllocationGranularityShift() {
+ page_characteristics.shift.store(shift, std::memory_order_relaxed);
+ }
+ return shift;
+-#elif PA_BUILDFLAG(IS_WIN) || PA_BUILDFLAG(PA_ARCH_CPU_PPC64)
++#elif PA_BUILDFLAG(IS_WIN)
+ // Modern ppc64 systems support 4kB (shift = 12) and 64kB (shift = 16) page
+ // sizes. Since 64kB is the de facto standard on the platform and binaries
+ // compiled for 64kB are likely to work on 4kB systems, 64kB is a good choice
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_partition__alloc__constants.h b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_partition__alloc__constants.h
index ffdff88e780a..1848045152a3 100644
--- a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_partition__alloc__constants.h
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_partition__alloc__constants.h
@@ -1,6 +1,18 @@
---- src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_constants.h.orig 2026-02-26 14:39:03 UTC
+--- src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_constants.h.orig 2026-05-08 07:54:08 UTC
+++ src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_constants.h
-@@ -315,7 +315,7 @@ constexpr size_t kPoolMaxSize = 1 * kGiB;
+@@ -115,11 +115,6 @@ PartitionPageShift() {
+ PartitionPageShift() {
+ return 16; // 64 KiB
+ }
+-#elif PA_BUILDFLAG(PA_ARCH_CPU_PPC64)
+-PA_ALWAYS_INLINE PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR size_t
+-PartitionPageShift() {
+- return 18; // 256 KiB
+-}
+ #else
+ PA_ALWAYS_INLINE PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR size_t
+ PartitionPageShift() {
+@@ -315,7 +310,7 @@ constexpr size_t kPoolMaxSize = 1 * kGiB;
#if PA_BUILDFLAG(IS_IOS)
constexpr size_t kPoolMaxSize = 1 * kGiB;
#elif PA_BUILDFLAG(IS_ANDROID) || \
@@ -9,7 +21,7 @@
constexpr size_t kPoolMaxSize = 8 * kGiB;
#else
constexpr size_t kPoolMaxSize = 16 * kGiB;
-@@ -399,7 +399,7 @@ PA_ALWAYS_INLINE constexpr size_t MaxDirectMapped() {
+@@ -399,7 +394,7 @@ PA_ALWAYS_INLINE constexpr size_t MaxDirectMapped() {
// TODO(casey.smalley@arm.com): under 64k pages we can end up in a situation
// where a normal slot span will be large enough to contain multiple items,
// but the address will go over the final partition page after being aligned.
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_partition__alloc__forward.h b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_partition__alloc__forward.h
index 15f29e41ba14..ac6d885d01ab 100644
--- a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_partition__alloc__forward.h
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_src_partition__alloc_partition__alloc__forward.h
@@ -1,11 +1,13 @@
---- src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_forward.h.orig 2025-09-06 10:01:20 UTC
+--- src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_forward.h.orig 2026-05-08 07:54:08 UTC
+++ src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_forward.h
-@@ -34,9 +34,13 @@ namespace internal {
+@@ -34,9 +34,15 @@ namespace internal {
// the second one 16. We could technically return something different for
// malloc() and operator new(), but this would complicate things, and most of
// our allocations are presumably coming from operator new() anyway.
+#if defined(__i386__) && PA_BUILDFLAG(IS_FREEBSD)
+constexpr size_t kAlignment = 8;
++#elif defined(__powerpc64__)
++constexpr size_t kAlignment = 16;
+#else
constexpr inline size_t kAlignment =
std::max(alignof(max_align_t),
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_compiler__specific.h b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_compiler__specific.h
index 26df4fd2761c..ca34cf955da3 100644
--- a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_compiler__specific.h
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_compiler__specific.h
@@ -1,5 +1,14 @@
---- src/3rdparty/chromium/base/compiler_specific.h.orig 2025-07-02 06:08:04 UTC
+--- src/3rdparty/chromium/base/compiler_specific.h.orig 2026-05-08 07:54:08 UTC
+++ src/3rdparty/chromium/base/compiler_specific.h
+@@ -198,7 +198,7 @@
+ // MUSTTAIL return Func1(d + 1); // `Func1()` will be tail-called.
+ // }
+ // ```
+-#if __has_cpp_attribute(clang::musttail)
++#if __has_cpp_attribute(clang::musttail) && !defined(__powerpc__)
+ #define MUSTTAIL [[clang::musttail]]
+ #else
+ #define MUSTTAIL
@@ -733,6 +733,7 @@ inline constexpr bool AnalyzerAssumeTrue(bool arg) {
#if __has_cpp_attribute(clang::preserve_most) && \
(defined(ARCH_CPU_ARM64) || defined(ARCH_CPU_X86_64)) && \
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_threading_platform__thread__bsd.cc b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_threading_platform__thread__bsd.cc
index c3f93d6fc250..3e1e53766953 100644
--- a/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_threading_platform__thread__bsd.cc
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_base_threading_platform__thread__bsd.cc
@@ -1,16 +1,26 @@
---- src/3rdparty/chromium/base/threading/platform_thread_bsd.cc.orig 2024-04-19 13:02:56 UTC
+--- src/3rdparty/chromium/base/threading/platform_thread_bsd.cc.orig 2026-09-07 11:51:09 UTC
+++ src/3rdparty/chromium/base/threading/platform_thread_bsd.cc
-@@ -0,0 +1,31 @@
+@@ -0,0 +1,41 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+// Description: These are stubs for *BSD.
+
+#include "base/threading/platform_thread.h"
++#include "base/threading/platform_thread_internal_posix.h"
+
+namespace base {
+namespace internal {
+
++const ThreadPriorityToNiceValuePairForTest
++ kThreadPriorityToNiceValueMapForTest[7] = {
++ {ThreadPriorityForTest::kRealtimeAudio, -10},
++ {ThreadPriorityForTest::kDisplay, -8},
++ {ThreadPriorityForTest::kNormal, 0},
++ {ThreadPriorityForTest::kUtility, 2},
++ {ThreadPriorityForTest::kBackground, 10},
++};
++
+bool CanSetThreadTypeToRealtimeAudio() {
+ return false;
+}
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_build_config_compiler_BUILD.gn b/www/qt6-webengine/files/patch-src_3rdparty_chromium_build_config_compiler_BUILD.gn
index 48626060c541..8839e0c7e5fa 100644
--- a/www/qt6-webengine/files/patch-src_3rdparty_chromium_build_config_compiler_BUILD.gn
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_build_config_compiler_BUILD.gn
@@ -74,6 +74,15 @@
cflags += [ "--target=aarch64-linux-gnu" ]
ldflags += [ "--target=aarch64-linux-gnu" ]
}
+@@ -1658,7 +1665,7 @@ config("compiler_cpu_abi") {
+ cflags += [ "-maix64" ]
+ ldflags += [ "-maix64" ]
+ }
+- } else if (is_clang) {
++ } else if (is_clang && !is_bsd) {
+ cflags += [ "--target=powerpc64le-unknown-linux-gnu" ]
+ ldflags += [ "--target=powerpc64le-unknown-linux-gnu" ]
+ } else {
@@ -1812,7 +1819,7 @@ config("clang_revision") {
}
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_abseil-cpp_absl_base_internal_unscaledcycleclock.cc b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_abseil-cpp_absl_base_internal_unscaledcycleclock.cc
new file mode 100644
index 000000000000..c0d888ab6e77
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_abseil-cpp_absl_base_internal_unscaledcycleclock.cc
@@ -0,0 +1,18 @@
+--- src/3rdparty/chromium/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc
+@@ -93,9 +93,12 @@ double UnscaledCycleClock::Frequency() {
+ static once_flag init_timebase_frequency_once;
+ static double timebase_frequency = 0.0;
+ base_internal::LowLevelCallOnce(&init_timebase_frequency_once, [&]() {
+- size_t length = sizeof(timebase_frequency);
+- sysctlbyname("kern.timecounter.tc.timebase.frequency", &timebase_frequency,
+- &length, nullptr, 0);
++ uint64_t freq = 0;
++ size_t length = sizeof(freq);
++ if (sysctlbyname("kern.timecounter.tc.timebase.frequency", &freq, &length,
++ nullptr, 0) == 0) {
++ timebase_frequency = static_cast<double>(freq);
++ }
+ });
+ return timebase_frequency;
+ #else
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_audio_delay.cc b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_audio_delay.cc
new file mode 100644
index 000000000000..f7bd13b4ab26
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_audio_delay.cc
@@ -0,0 +1,13 @@
+--- src/3rdparty/chromium/third_party/blink/renderer/platform/audio/delay.cc.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/third_party/blink/renderer/platform/audio/delay.cc
+@@ -107,8 +107,8 @@ std::tuple<size_t, size_t> Delay::ProcessARateVector(
+ #if !(defined(ARCH_CPU_X86_FAMILY) || defined(CPU_ARM_NEON))
+ // Default scalar versions if simd/neon are not available.
+ std::tuple<size_t, size_t> Delay::ProcessARateVector(
+- float* destination,
+- uint32_t frames_to_process) const {
++ base::span<float> destination,
++ size_t frames_to_process) const {
+ // We don't have a vectorized version, so just do nothing and return the 0 to
+ // indicate no frames processed and return the current write_index_.
+ return std::make_tuple(0, write_index_);
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_BUILD.gn b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_BUILD.gn
new file mode 100644
index 000000000000..5b91ad69e7ce
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_BUILD.gn
@@ -0,0 +1,18 @@
+--- src/3rdparty/chromium/third_party/boringssl/BUILD.gn.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/third_party/boringssl/BUILD.gn
+@@ -122,6 +122,15 @@ if (is_msan || (is_msvc && current_cpu == "arm64" && !
+ visibility = [ ":*" ]
+ sources = rebase_path(test_support_sources_nasm, ".", "src")
+ }
++} else if (current_cpu == "ppc64") {
++ source_set("boringssl_asm") {
++ visibility = [ ":*" ] # Only targets in this file can depend on this.
++ public_configs = [ ":no_asm_config" ]
++ }
++ source_set("test_support_asm") {
++ visibility = [ ":*" ]
++ testonly = true
++ }
+ } else {
+ # All other targets use GAS-compatible assembler. BoringSSL's assembly files
+ # are all wrapped in processor checks for the corresponding target, so there
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_include_openssl_target.h b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_include_openssl_target.h
new file mode 100644
index 000000000000..41e087b32954
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_include_openssl_target.h
@@ -0,0 +1,12 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/include/openssl/target.h.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/include/openssl/target.h
+@@ -54,6 +54,9 @@
+ #define OPENSSL_32_BIT
+ #elif defined(__myriad2__)
+ #define OPENSSL_32_BIT
++#elif defined(__powerpc64__)
++#define OPENSSL_64_BIT
++#define OPENSSL_PPC64
+ #else
+ // The list above enumerates the platforms that BoringSSL supports. For these
+ // platforms we keep a reasonable bar of not breaking them: automated test
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_dav1d_config_linux_ppc64_config.h b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_dav1d_config_linux_ppc64_config.h
new file mode 100644
index 000000000000..e60d64ae479e
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_dav1d_config_linux_ppc64_config.h
@@ -0,0 +1,51 @@
+--- /dev/null 2026-09-07 11:58:21 UTC
++++ src/3rdparty/chromium/third_party/dav1d/config/linux/ppc64/config.h
+@@ -0,0 +1,48 @@
++/*
++ * Autogenerated by the Meson build system.
++ * Do not edit, your changes will be lost.
++ */
++
++#pragma once
++
++#define ARCH_AARCH64 0
++
++#define ARCH_ARM 0
++
++#define ARCH_PPC64LE 1
++
++#define ARCH_X86 0
++
++#define ARCH_X86_32 0
++
++#define ARCH_X86_64 0
++
++#define CONFIG_16BPC 1
++
++#define CONFIG_8BPC 1
++
++// #define CONFIG_LOG 1 -- Logging is controlled by Chromium
++
++#define ENDIANNESS_BIG 0
++
++#define HAVE_ASM 1
++
++#define HAVE_AS_FUNC 0
++
++#define HAVE_C11_GENERIC 1
++
++#define HAVE_CLOCK_GETTIME 1
++
++#define HAVE_DLSYM 1
++
++#define HAVE_ELF_AUX_INFO 1
++
++#define HAVE_POSIX_MEMALIGN 1
++
++// #define HAVE_PTHREAD_GETAFFINITY_NP 1 -- Controlled by Chomium
++
++// #define HAVE_PTHREAD_SETAFFINITY_NP 1 -- Controlled by Chomium
++
++#define HAVE_UNISTD_H 1
++
++#define TRIM_DSP_FUNCTIONS 1
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_dav1d_libdav1d_src_ppc_dav1d__types.h b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_dav1d_libdav1d_src_ppc_dav1d__types.h
new file mode 100644
index 000000000000..49a2f626ba4d
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_dav1d_libdav1d_src_ppc_dav1d__types.h
@@ -0,0 +1,22 @@
+--- src/3rdparty/chromium/third_party/dav1d/libdav1d/src/ppc/dav1d_types.h.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/third_party/dav1d/libdav1d/src/ppc/dav1d_types.h
+@@ -55,4 +55,19 @@
+ #define u16l_to_i32(v) ((i32x4) vec_mergel((u16x8) v, vec_splat_u16(0)))
+ #define i16l_to_i32(v) ((i32x4) vec_unpackl((i16x8)v))
+
++#if defined(__clang__)
++#undef vec_splats
++#define vec_splats(N) \
++ _Generic((N), \
++ unsigned char: ((u8x16)(N)), \
++ signed char: ((i8x16)(N)), \
++ unsigned short: ((u16x8)(N)), \
++ signed short: ((i16x8)(N)), \
++ unsigned int: ((u32x4)(N)), \
++ signed int: ((i32x4)(N)), \
++ unsigned long long: ((u64x2)(N)), \
++ signed long long: ((i64x2)(N)) \
++ )
++#endif
++
+ #endif /* DAV1D_SRC_PPC_TYPES_H */
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_dawn_src_dawn_common_Platform.h b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_dawn_src_dawn_common_Platform.h
index c7210d7140b3..bdd1a79860d1 100644
--- a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_dawn_src_dawn_common_Platform.h
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_dawn_src_dawn_common_Platform.h
@@ -1,4 +1,4 @@
---- src/3rdparty/chromium/third_party/dawn/src/dawn/common/Platform.h.orig 2025-04-04 08:52:13 UTC
+--- src/3rdparty/chromium/third_party/dawn/src/dawn/common/Platform.h.orig 2026-05-08 07:54:08 UTC
+++ src/3rdparty/chromium/third_party/dawn/src/dawn/common/Platform.h
@@ -60,6 +60,11 @@
#error "Unsupported Windows platform."
@@ -12,3 +12,25 @@
#elif defined(__linux__)
#define DAWN_PLATFORM_IS_LINUX 1
#define DAWN_PLATFORM_IS_POSIX 1
+@@ -163,10 +168,10 @@
+ #elif defined(__s390x__)
+ #define DAWN_PLATFORM_IS_S390X 1
+
+-#elif defined(__PPC__)
+-#define DAWN_PLATFORM_IS_PPC 1
+ #elif defined(__PPC64__)
+ #define DAWN_PLATFORM_IS_PPC64 1
++#elif defined(__PPC__)
++#define DAWN_PLATFORM_IS_PPC 1
+
+ #elif defined(__wasm32__)
+ #define DAWN_PLATFORM_IS_WASM32 1
+@@ -189,7 +194,7 @@ static_assert(sizeof(sizeof(char)) == 8, "Expect sizeo
+ static_assert(sizeof(sizeof(char)) == 8, "Expect sizeof(size_t) == 8");
+ #elif defined(DAWN_PLATFORM_IS_I386) || defined(DAWN_PLATFORM_IS_ARM32) || \
+ defined(DAWN_PLATFORM_IS_RISCV32) || defined(DAWN_PLATFORM_IS_MIPS32) || \
+- defined(DAWN_PLATFORM_IS_S390) || defined(DAWN_PLATFORM_IS_PPC32) || \
++ defined(DAWN_PLATFORM_IS_S390) || defined(DAWN_PLATFORM_IS_PPC) || \
+ defined(DAWN_PLATFORM_IS_LOONGARCH32) || defined(DAWN_PLATFORM_IS_WASM32)
+ #define DAWN_PLATFORM_IS_32_BIT 1
+ static_assert(sizeof(sizeof(char)) == 4, "Expect sizeof(size_t) == 4");
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_devtools-frontend_src_node__modules__rollup_plugin-terser_dist_cjs_index.js b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_devtools-frontend_src_node__modules__rollup_plugin-terser_dist_cjs_index.js
new file mode 100644
index 000000000000..a2ed6b701120
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_devtools-frontend_src_node__modules__rollup_plugin-terser_dist_cjs_index.js
@@ -0,0 +1,11 @@
+--- src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@rollup/plugin-terser/dist/cjs/index.js.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@rollup/plugin-terser/dist/cjs/index.js
+@@ -70,7 +70,7 @@ class WorkerPool extends events.EventEmitter {
+ this.tasks = [];
+ this.workers = [];
+ this.freeWorkers = [];
+- this.maxInstances = options.maxWorkers || os.cpus().length;
++ this.maxInstances = options.maxWorkers || os.cpus().length || 4;
+ this.filePath = options.filePath;
+ this.on(freeWorker, () => {
+ if (this.tasks.length > 0) {
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_devtools-frontend_src_node__modules__rollup_plugin-terser_dist_es_index.js b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_devtools-frontend_src_node__modules__rollup_plugin-terser_dist_es_index.js
new file mode 100644
index 000000000000..52c1ca33ddf2
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_devtools-frontend_src_node__modules__rollup_plugin-terser_dist_es_index.js
@@ -0,0 +1,11 @@
+--- src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@rollup/plugin-terser/dist/es/index.js.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@rollup/plugin-terser/dist/es/index.js
+@@ -65,7 +65,7 @@ class WorkerPool extends EventEmitter {
+ this.tasks = [];
+ this.workers = [];
+ this.freeWorkers = [];
+- this.maxInstances = options.maxWorkers || cpus().length;
++ this.maxInstances = options.maxWorkers || cpus().length || 4;
+ this.filePath = options.filePath;
+ this.on(freeWorker, () => {
+ if (this.tasks.length > 0) {
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_highway_src_hwy_targets.cc b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_highway_src_hwy_targets.cc
new file mode 100644
index 000000000000..d959bc1df139
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_highway_src_hwy_targets.cc
@@ -0,0 +1,14 @@
+--- src/3rdparty/chromium/third_party/highway/src/hwy/targets.cc.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/third_party/highway/src/hwy/targets.cc
+@@ -36,7 +36,11 @@
+ // sys/auxv.h does not always include asm/hwcap.h, or define HWCAP*, hence we
+ // still include this directly. See #1199.
+ #ifndef TOOLCHAIN_MISS_ASM_HWCAP_H
++#ifdef __powerpc64__
++#include <asm/cputable.h>
++#else
+ #include <asm/hwcap.h>
++#endif
+ #endif
+ #if HWY_HAVE_AUXV
+ #include <sys/auxv.h>
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_libaom_BUILD.gn b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_libaom_BUILD.gn
new file mode 100644
index 000000000000..647a46c322c9
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_libaom_BUILD.gn
@@ -0,0 +1,11 @@
+--- src/3rdparty/chromium/third_party/libaom/BUILD.gn.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/third_party/libaom/BUILD.gn
+@@ -37,6 +37,8 @@ if (current_cpu == "x86") {
+ cpu_arch_full = "generic"
+ } else if (current_cpu == "loong64") {
+ cpu_arch_full = "generic"
++} else if (current_cpu == "ppc64") {
++ cpu_arch_full = "generic"
+ } else {
+ cpu_arch_full = current_cpu
+ }
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_libvpx_BUILD.gn b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_libvpx_BUILD.gn
new file mode 100644
index 000000000000..7e3e1d3ff999
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_libvpx_BUILD.gn
@@ -0,0 +1,33 @@
+--- src/3rdparty/chromium/third_party/libvpx/BUILD.gn.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/third_party/libvpx/BUILD.gn
+@@ -47,6 +47,8 @@ if (current_cpu == "x86") {
+ }
+ } else if (current_cpu == "riscv64") {
+ cpu_arch_full = "generic"
++} else if (current_cpu == "ppc64") {
++ cpu_arch_full = "generic"
+ } else if (current_cpu == "loong64") {
+ cpu_arch_full = "loongarch"
+ } else {
+@@ -512,10 +514,6 @@ source_set("libvpx_loongarch_headers") {
+ sources = libvpx_srcs_loongarch_headers
+ }
+
+-source_set("libvpx_ppc64_headers") {
+- sources = libvpx_srcs_ppc64_headers
+-}
+-
+ source_set("libvpx_generic_headers") {
+ sources = libvpx_srcs_generic_headers
+ }
+@@ -563,8 +561,8 @@ static_library("bundled_libvpx") {
+ public_deps = [ ":libvpx_arm64_headers" ]
+ }
+ } else if (current_cpu == "ppc64") {
+- sources = libvpx_srcs_ppc64
+- public_deps = [ ":libvpx_ppc64_headers" ]
++ sources = libvpx_srcs_generic
++ public_deps = [ ":libvpx_generic_headers" ]
+ } else if (current_cpu == "riscv64") {
+ sources = libvpx_srcs_generic
+ public_deps = [ ":libvpx_generic_headers" ]
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_libvpx_generate__gni.sh b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_libvpx_generate__gni.sh
new file mode 100644
index 000000000000..6c0bdf6bb757
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_libvpx_generate__gni.sh
@@ -0,0 +1,20 @@
+--- src/3rdparty/chromium/third_party/libvpx/generate_gni.sh.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/third_party/libvpx/generate_gni.sh
+@@ -429,7 +429,7 @@ gen_config_files linux/loongarch \
+ gen_config_files linux/mips64el "--target=mips64-linux-gcc ${all_platforms}"
+ gen_config_files linux/loongarch \
+ "--target=loongarch64-linux-gcc ${all_platforms}"
+-gen_config_files linux/ppc64 "--target=ppc64le-linux-gcc ${all_platforms}"
++gen_config_files linux/ppc64 "--target=generic-gnu ${all_platforms}"
+ gen_config_files linux/generic "--target=generic-gnu $HIGHBD ${all_platforms}"
+ gen_config_files win/arm64-highbd \
+ "--target=arm64-win64-vs15 ${all_platforms} ${HIGHBD} ${disable_sve}"
+@@ -493,7 +493,7 @@ gen_rtcd_header linux/loongarch loongarch
+ gen_rtcd_header linux/mipsel mipsel
+ gen_rtcd_header linux/mips64el mips64el
+ gen_rtcd_header linux/loongarch loongarch
+-gen_rtcd_header linux/ppc64 ppc
++gen_rtcd_header linux/ppc64 generic
+ gen_rtcd_header linux/generic generic
+ gen_rtcd_header win/arm64-highbd armv8 "${require_neon} ${disable_sve}"
+ gen_rtcd_header win/ia32 x86 "${require_sse3}"
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_pffft_src_pffft.c b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_pffft_src_pffft.c
new file mode 100644
index 000000000000..9ccef9bef87e
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_pffft_src_pffft.c
@@ -0,0 +1,10 @@
+--- src/3rdparty/chromium/third_party/pffft/src/pffft.c.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/third_party/pffft/src/pffft.c
+@@ -100,6 +100,7 @@
+ Altivec support macros
+ */
+ #if !defined(PFFFT_SIMD_DISABLE) && (defined(__ppc__) || defined(__ppc64__))
++#include <altivec.h>
+ typedef vector float v4sf;
+ # define SIMD_SZ 4
+ # define VZERO() ((vector float) vec_splat_u8(0))
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_rtc__base_system_arch.h b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_rtc__base_system_arch.h
new file mode 100644
index 000000000000..67572f78bb75
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_rtc__base_system_arch.h
@@ -0,0 +1,21 @@
+--- src/3rdparty/chromium/third_party/webrtc/rtc_base/system/arch.h.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/third_party/webrtc/rtc_base/system/arch.h
+@@ -89,6 +89,18 @@
+ #elif defined(__EMSCRIPTEN__)
+ #define WEBRTC_ARCH_32_BITS
+ #define WEBRTC_ARCH_LITTLE_ENDIAN
++#elif defined(__PPC__)
++#define WEBRTC_ARCH_PPC_FAMILY
++#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
++#define WEBRTC_ARCH_LITTLE_ENDIAN
++#else
++#define WEBRTC_ARCH_BIG_ENDIAN
++#endif
++#if defined(__LP64__)
++#define WEBRTC_ARCH_64_BITS
++#else
++#define WEBRTC_ARCH_32_BITS
++#endif
+ #else
+ #error Please add support for your architecture in rtc_base/system/arch.h
+ #endif
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_ui_gl_features.gni b/www/qt6-webengine/files/patch-src_3rdparty_chromium_ui_gl_features.gni
new file mode 100644
index 000000000000..100751b5b6ec
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_ui_gl_features.gni
@@ -0,0 +1,9 @@
+--- src/3rdparty/chromium/ui/gl/features.gni.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/ui/gl/features.gni
+@@ -29,5 +29,5 @@ declare_args() {
+ (is_win || is_linux || is_chromeos || is_mac || is_fuchsia) &&
+ (target_cpu == "x86" || target_cpu == "x64" || target_cpu == "arm" ||
+ target_cpu == "arm64" || target_cpu == "mipsel" ||
+- target_cpu == "mips64el" || target_cpu == "riscv64")
++ target_cpu == "mips64el" || target_cpu == "riscv64" || target_cpu == "ppc64")
+ }
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_v8_BUILD.gn b/www/qt6-webengine/files/patch-src_3rdparty_chromium_v8_BUILD.gn
index 3cb0e96238ae..26884fa0a11a 100644
--- a/www/qt6-webengine/files/patch-src_3rdparty_chromium_v8_BUILD.gn
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_v8_BUILD.gn
@@ -1,4 +1,4 @@
---- src/3rdparty/chromium/v8/BUILD.gn.orig 2026-02-26 14:39:03 UTC
+--- src/3rdparty/chromium/v8/BUILD.gn.orig 2026-05-08 07:54:08 UTC
+++ src/3rdparty/chromium/v8/BUILD.gn
@@ -977,6 +977,8 @@ external_v8_defines = [
"V8_TARGET_OS_MACOS",
@@ -22,7 +22,22 @@
}
disabled_external_v8_defines = external_v8_defines - enabled_external_v8_defines
-@@ -2588,6 +2596,12 @@ template("run_mksnapshot") {
+@@ -1559,6 +1567,14 @@ config("toolchain") {
+ if (v8_current_cpu == "ppc64") {
+ defines += [ "V8_TARGET_ARCH_PPC64" ]
+ cflags += [ "-ffp-contract=off" ]
++ if (host_byteorder == "little") {
++ defines += [ "V8_TARGET_ARCH_PPC_LE" ]
++ cflags += [
++ "-mcpu=power8",
++ "-maltivec",
++ "-mvsx",
++ ]
++ }
+ if (current_os == "aix") {
+ cflags += [
+ # Work around AIX ceil, trunc and round oddities.
+@@ -2588,6 +2604,12 @@ template("run_mksnapshot") {
if (!v8_enable_builtins_profiling && v8_enable_builtins_reordering) {
args += [ "--reorder-builtins" ]
}
@@ -35,7 +50,7 @@
}
# This is needed to distinguish between generating code for the simulator
-@@ -6862,7 +6876,7 @@ v8_component("v8_libbase") {
+@@ -6862,7 +6884,7 @@ v8_component("v8_libbase") {
}
}
@@ -44,7 +59,7 @@
sources += [
"src/base/debug/stack_trace_posix.cc",
"src/base/platform/platform-linux.cc",
-@@ -6873,6 +6887,18 @@ v8_component("v8_libbase") {
+@@ -6873,6 +6895,18 @@ v8_component("v8_libbase") {
"dl",
"rt",
]
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_v8_src_codegen_ppc_assembler-ppc.h b/www/qt6-webengine/files/patch-src_3rdparty_chromium_v8_src_codegen_ppc_assembler-ppc.h
new file mode 100644
index 000000000000..f1b4bad38ac1
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_v8_src_codegen_ppc_assembler-ppc.h
@@ -0,0 +1,16 @@
+--- src/3rdparty/chromium/v8/src/codegen/ppc/assembler-ppc.h.orig 2026-09-18 00:00:00 UTC
++++ src/3rdparty/chromium/v8/src/codegen/ppc/assembler-ppc.h
+@@ -1413,10 +1413,12 @@
+
+ RelocInfoWriter reloc_info_writer;
+
+- private:
++ public:
+ // Avoid overflows for displacements etc.
+ static const int kMaximalBufferSize = 512 * MB;
+
++ private:
++
+ // Repeated checking whether the trampoline pool should be emitted is rather
+ // expensive. By default we only check again once a number of instructions
+ // has been generated.
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_chromium_v8_test_BUILD.gn b/www/qt6-webengine/files/patch-src_3rdparty_chromium_v8_test_BUILD.gn
new file mode 100644
index 000000000000..9df1730012bf
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_chromium_v8_test_BUILD.gn
@@ -0,0 +1,29 @@
+--- src/3rdparty/chromium/v8/test/BUILD.gn.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/chromium/v8/test/BUILD.gn
+@@ -43,7 +43,7 @@ group("gn_all") {
+ "benchmarks/cpp:gn_all",
+ "cctest:cctest",
+ "unittests:generate-bytecode-expectations",
+- "unittests:v8_unittests",
++ #"unittests:v8_unittests",
+ ]
+ }
+ }
+@@ -101,7 +101,7 @@ group("v8_bot_default") {
+ "message:v8_message",
+ "mjsunit:v8_mjsunit",
+ "mkgrokdump:mkgrokdump",
+- "unittests:v8_unittests",
++ #"unittests:v8_unittests",
+ "webkit:v8_webkit",
+ ]
+
+@@ -127,7 +127,7 @@ group("v8_default") {
+ "message:v8_message",
+ "mjsunit:v8_mjsunit",
+ "mkgrokdump:mkgrokdump",
+- "unittests:v8_unittests",
++ #"unittests:v8_unittests",
+ ]
+
+ if (v8_enable_webassembly) {
diff --git a/www/qt6-webengine/files/patch-src_3rdparty_gn_src_util_sys__info.cc b/www/qt6-webengine/files/patch-src_3rdparty_gn_src_util_sys__info.cc
new file mode 100644
index 000000000000..928f8c856bfc
--- /dev/null
+++ b/www/qt6-webengine/files/patch-src_3rdparty_gn_src_util_sys__info.cc
@@ -0,0 +1,11 @@
+--- src/3rdparty/gn/src/util/sys_info.cc.orig 2026-05-08 07:54:08 UTC
++++ src/3rdparty/gn/src/util/sys_info.cc
+@@ -74,6 +74,8 @@ std::string OperatingSystemArchitecture() {
+ arch = "x86_64";
+ } else if (arch == "amd64") {
+ arch = "x86_64";
++ } else if (arch == "powerpc") {
++ arch = "ppc64";
+ } else if (os == "AIX" || os == "OS400") {
+ arch = "ppc64";
+ } else if (std::string(info.sysname) == "OS/390") {