Skip to content

[scarthgap] chromium: Upgrade to 147.0.7727.116#980

Merged
MaxIhlenfeldt merged 2 commits into
OSSystems:scarthgapfrom
brightsign:for/review/ossystems/scarthgap/147.0.7727.55
May 6, 2026
Merged

[scarthgap] chromium: Upgrade to 147.0.7727.116#980
MaxIhlenfeldt merged 2 commits into
OSSystems:scarthgapfrom
brightsign:for/review/ossystems/scarthgap/147.0.7727.55

Conversation

@caneraltinbasak

@caneraltinbasak caneraltinbasak commented Apr 27, 2026

Copy link
Copy Markdown
Contributor

Port of upstream master commit be0cd54 to scarthgap branch.

Release notes:
https://chromereleases.googleblog.com/2026/04/stable-channel-update-for-desktop.html

Build and patch changes:

Removed patches (from upstream):

  • 0006-Don-t-pass-unknown-LLVM-options.patch Merged into the new version.

  • 0008-Use-the-correct-path-to-libclang_rt.builtins.a.patch Merged into the new version.

  • musl/0008-Use-monotonic-clock-for-pthread_cond_timedwait-with-.patch Merged into the new version.

  • musl/0015-fix-libc-version-include.patch Merged into the new version.

Modified patches (from upstream):

  • 0001-Drop-GN-compiler-settings-conflicting-with-OE.patch Adapted to the new version.

  • 0003-wrapper-extra-flags.patch Adapted to the new version.

  • 0004-Delete-compiler-options-not-available-in-release-ver.patch Also delete compiler option -fno-lifetime-dse as clang does not accept it.

  • 0009-Adjust-the-Rust-build-to-our-needs.patch Adapted to the new version.

  • 0013-Reduce-minimum-browser-window-width-to-480px.patch Adapted to the new version.

  • musl/0001-mallinfo-implementation-is-glibc-specific.patch Adapted to the new version.

  • musl/0004-fontconfig-Musl-does-not-have-rand_r-API.patch Adapted to the new version.

  • musl/0006-debug-Fix-build-with-musl.patch Adapted to the new version.

  • musl/0007-mallopt-is-glibc-specific-API.patch Adapted to the new version.

  • musl/0009-Fix-tab-crashes-on-musl.patch Adapted to the new version.

  • musl/0011-sys-stat.patch Adapted to the new version.

New patches (from upstream):

  • 0001-Fix-building-gpu_host_impl.cc-on-Linux.patch Fix build of gpu_host_impl.cc on Linux.

  • chromium-142-crabbyavif-rust18x.patch Fix crabbyavif build with Rust 1.8x.

  • chromium-145-zip_ffi_glue-use-edition2024.patch Fix zip_ffi_glue Rust edition.

  • fix-SYS_SECCOMP-redefinition.patch Fix SYS_SECCOMP redefinition error.

  • use-adler2.patch Use adler2 crate instead of deprecated adler.

New patches (scarthgap-specific):

  • 0014-devtools-fix-import-meta-main-for-older-nodejs.patch Replace import.meta.main with a Node.js 22 compatible fallback. import.meta.main requires Node.js >= 24.2.0, scarthgap ships 22.11.0.

  • fix-cpp26-octal-literals.patch Replace C++26 octal literal syntax 0o666 with standard 0666. The 0o prefix (P3275R0) requires Clang 21+, scarthgap has Clang 20.

  • fix-clang20-defaulted-operator-crash.patch Work around Clang 20 ICE on out-of-class defaulted friend operator== with COMPONENT_EXPORT attribute in origin_with_possible_wildcards.cc.

  • fix-xr-rigid-transform-incomplete-type.patch Move XRRigidTransform destructor from header to .cc file. Fixes incomplete type error with unique_ptrgfx::Transform on Clang 20.

  • fix-mksnapshot-clang20-miscompile.patch (aarch64 only) Make V8 RegisterAllocator::Free() defensive against find() returning end(). Fixes mksnapshot SIGTRAP crash under QEMU aarch64 user-mode emulation caused by Clang 20 compiling erase(end()) as brk chromium: adding updated version 24.0.1312.52 #1.

Recipe changes (scarthgap-specific):

  • chromium-gn.inc: Remove lld-native from DEPENDS (lld is part of clang-native on scarthgap).
  • chromium-gn.inc: Override DEBUG_FLAGS to remove -g. With LTO enabled, Yocto's -g flag causes debug sections to exceed 4GB, resulting in R_X86_64_32 relocation overflow during linking.
  • chromium-gn.inc: Fix do_copy_target_rustlibs to remove stale rlibs from rust-cross before copying libstd-rs rlibs. Prevents symbol hash mismatches when Chromium's find_std_rlibs.py picks wrong duplicates.
  • chromium.inc: Use WORKDIR instead of UNPACKDIR (not in scarthgap).
  • chromium.inc: Use TOOLCHAIN:class-native instead of TOOLCHAIN_NATIVE.

License changes:

Same as upstream commit 5b9a7e7. See master branch for details.

Test-built:

  • chromium-ozone-wayland
    • MACHINE=qemux86-64, qemuarm64, qemuarm

Test dependencies:

  • URI: git://git.openembedded.org/openembedded-core

    • branch: scarthgap
    • revision: 52380df998b3a8fe6a091f8547434a3231320a8e
  • URI: git://git.openembedded.org/meta-openembedded

    • layers: meta-oe
    • branch: scarthgap
    • revision: 5124ac4a658899158f4a7a2ddf1d2ca931ec7d0e
  • URI: git@github.com:kraj/meta-clang.git

    • branch: scarthgap-clang20
    • revision: f26bab34e6c208149fe1ad04521864b663489f4d
  • URI: git://git.yoctoproject.org/meta-lts-mixins

    • branch: scarthgap/rust
    • revision: c19b6da5a3afd3c892b3b1b44983e993ac6d5308

@MaxIhlenfeldt

Copy link
Copy Markdown
Collaborator

I just came back from vacation and am busy catching up, I might need a few days to find the time to review this in detail. But thanks already for putting in the work!

I think it'd be great to have a few more test builds, including at least one chromium-x11 build. @zboszor any chance you could give this PR a try to help extend the test build coverage?

@caneraltinbasak

Copy link
Copy Markdown
Contributor Author

X11 is also tested with arm, arm64 and x86-64:

https://github.com/brightsign/meta-browser/actions/runs/24985101755

@zboszor

zboszor commented Apr 28, 2026

Copy link
Copy Markdown
Contributor

@caneraltinbasak The upgrade to 147.0.7727.116 just differs in the sha256sum hash, please try that. The new version includes a lot of CVE fixes.

@caneraltinbasak caneraltinbasak force-pushed the for/review/ossystems/scarthgap/147.0.7727.55 branch from 4a1c860 to 90a66ed Compare April 28, 2026 08:35
@caneraltinbasak caneraltinbasak changed the title chromium: Upgrade to 147.0.7727.55 chromium: Upgrade to 147.0.7727.116 Apr 28, 2026
@caneraltinbasak caneraltinbasak force-pushed the for/review/ossystems/scarthgap/147.0.7727.55 branch from 90a66ed to 4a1c860 Compare April 28, 2026 08:40
@MaxIhlenfeldt

Copy link
Copy Markdown
Collaborator

The hash is still the one for .55, and the file names haven't been updated to .116 as well. Your force-pushes show no changes for me, so it seems effectively only the PR title has been updated? Also, please replace 5b9a7e7 with be0cd54 in the commit message / PR description.

@caneraltinbasak

Copy link
Copy Markdown
Contributor Author

That was accidental. I've cherry picked @zboszor s change to my branch. Testing it now.

@caneraltinbasak

Copy link
Copy Markdown
Contributor Author

It is ready now, all builds({wayland, x11} *{arm, arm64, x86-64}) succeeded:
https://github.com/brightsign/meta-browser/actions/runs/25053384112

@caneraltinbasak

Copy link
Copy Markdown
Contributor Author

@MaxIhlenfeldt @zboszor Changes are ready to review.

@MaxIhlenfeldt

Copy link
Copy Markdown
Collaborator

I find it useful to compare the new state of scarthgap to the current state of master, so both for this review and for future reference, this is the diff:

> git checkout brightsign/for/review/ossystems/scarthgap/147.0.7727.55
> cd meta-chromium/recipes-browser/chromium
> git diff master --stat -- .
 meta-chromium/recipes-browser/chromium/chromium-gn.inc                                                 | 30 ++++++++++++++++++++----------
 meta-chromium/recipes-browser/chromium/chromium.inc                                                    |  4 ++--
 meta-chromium/recipes-browser/chromium/files/0014-devtools-fix-import-meta-main-for-older-nodejs.patch | 37 +++++++++++++++++++++++++++++++++++++
 meta-chromium/recipes-browser/chromium/files/fix-clang20-defaulted-operator-crash.patch                | 24 ++++++++++++++++++++++++
 meta-chromium/recipes-browser/chromium/files/fix-cpp26-octal-literals.patch                            | 21 +++++++++++++++++++++
 meta-chromium/recipes-browser/chromium/files/fix-mksnapshot-clang20-miscompile.patch                   | 32 ++++++++++++++++++++++++++++++++
 meta-chromium/recipes-browser/chromium/files/fix-xr-rigid-transform-incomplete-type.patch              | 34 ++++++++++++++++++++++++++++++++++
 meta-chromium/recipes-browser/chromium/gn-native_147.0.7727.116.bb                                     | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 meta-chromium/recipes-browser/chromium/gn/0001-Pass-no-static-libstdc-to-gen.py.patch                  | 28 ++++++++++++++++++++++++++++
 9 files changed, 246 insertions(+), 12 deletions(-)
diff --git a/meta-chromium/recipes-browser/chromium/chromium-gn.inc b/meta-chromium/recipes-browser/chromium/chromium-gn.inc
index 4c720f96..08613c16 100644
--- a/meta-chromium/recipes-browser/chromium/chromium-gn.inc
+++ b/meta-chromium/recipes-browser/chromium/chromium-gn.inc
@@ -35,10 +35,17 @@ SRC_URI += "\
     file://fix-SYS_SECCOMP-redefinition.patch \
     file://use-adler2.patch \
     file://chromium-145-zip_ffi_glue-use-edition2024.patch \
+    file://0014-devtools-fix-import-meta-main-for-older-nodejs.patch \
+    file://fix-cpp26-octal-literals.patch \
+    file://fix-clang20-defaulted-operator-crash.patch \
+    file://fix-xr-rigid-transform-incomplete-type.patch \
 "
 
 # ARM/AArch64-specific patches.
-SRC_URI:append:aarch64 = "${@bb.utils.contains('TUNE_FEATURES', 'crypto', '', ' file://arm/0001-Fix-AES-crypto-SIGILL-on-rpi4-64.patch', d)}"
+SRC_URI:append:aarch64 = "\
+    file://fix-mksnapshot-clang20-miscompile.patch \
+    ${@bb.utils.contains('TUNE_FEATURES', 'crypto', '', ' file://arm/0001-Fix-AES-crypto-SIGILL-on-rpi4-64.patch', d)} \
+"
 
 # musl-specific patches.
 SRC_URI:append:libc-musl = "\
@@ -81,7 +88,6 @@ DEPENDS += " \
     libwebp \
     libxkbcommon \
     libxslt \
-    lld-native \
     ninja-native \
     nodejs-native \
     nspr \
@@ -198,16 +204,13 @@ GN_ARGS += "use_lld=true use_gold=false"
 # file and other utilities are unable to read a 32-bit binary this size, which
 # causes it not to be stripped.
 # The solution is two-fold:
-# 1. Set DEBUG_LEVELFLAG as needed, which is used in both FULL_OPTIMIZATION
-#    and DEBUG_OPTIMIZATION.
+# 1. Override DEBUG_FLAGS to remove -g, preventing Yocto from injecting debug
+#    flags that override GN's -g0. With LTO, debug sections can exceed 4GB
+#    causing R_X86_64_32 relocation overflow during linking.
 # 2. Explicitly pass symbol_level=0 to GN. This causes -g0 to be passed
 #    instead, so that if DEBUG_BUILD is not set GN will not create a huge debug
-#    binary anyway. Since our compiler flags are passed after GN's, -g0 does
-#    not cause any issues if DEBUG_BUILD is set, as -g1 will be passed later.
-DEBUG_LEVELFLAG = "-g1"
-# For ARM builds, completely remove debug flags that cause binary size issues
-# This prevents the "output file too large" linker error on ARM32
-DEBUG_LEVELFLAG:arm = ""
+#    binary anyway.
+DEBUG_FLAGS = "-feliminate-unused-debug-types ${DEBUG_PREFIX_MAP}"
 GN_ARGS += "symbol_level=0"
 
 # Disable Chrome Remote Desktop (aka Chromoting) support. Building host support
@@ -511,7 +514,14 @@ addtask copy_clang_library after do_add_clang_latest before do_compile
 do_copy_target_rustlibs () {
     # Chromium needs a single Rust sysroot that contains the rustlibs for both
     # the host and target, so we copy the target rustlibs to the native sysroot.
+    # Remove old rlibs/rmeta first to avoid duplicates from rust-cross vs
+    # libstd-rs causing symbol hash mismatches at link time.
+    # Use RUST_TARGET_SYS (not TARGET_ARCH*) to avoid nuking host rlibs.
     rustlib_src_dir="${STAGING_LIBDIR}/rustlib/${TARGET_ARCH}"*
+    if [ -d "${STAGING_LIBDIR_NATIVE}/rustlib/${RUST_TARGET_SYS}/lib" ]; then
+        rm -f "${STAGING_LIBDIR_NATIVE}/rustlib/${RUST_TARGET_SYS}/lib"/*.rlib
+        rm -f "${STAGING_LIBDIR_NATIVE}/rustlib/${RUST_TARGET_SYS}/lib"/*.rmeta
+    fi
     cp -r $rustlib_src_dir "${STAGING_LIBDIR_NATIVE}/rustlib"
 }
 addtask copy_target_rustlibs after do_configure before do_compile
diff --git a/meta-chromium/recipes-browser/chromium/chromium.inc b/meta-chromium/recipes-browser/chromium/chromium.inc
index cc2da29a..4a930408 100644
--- a/meta-chromium/recipes-browser/chromium/chromium.inc
+++ b/meta-chromium/recipes-browser/chromium/chromium.inc
@@ -5,7 +5,7 @@ CVE_PRODUCT = "chromium:chromium google:chrome"
 
 SRC_URI = "https://commondatastorage.googleapis.com/chromium-browser-official/chromium-${PV}.tar.xz"
 SRC_URI[sha256sum] = "fe6baaaedada963ef730869a93152fd559c9450f7c92ebe3e8c3a15cb05b3db7"
-S = "${UNPACKDIR}/chromium-${PV}"
+S = "${WORKDIR}/chromium-${PV}"
 
 # GCC is not tested or officially supported upstream, and supporting it here
 # requires an ever-growing amount of backports and custom patches, without any
@@ -14,7 +14,7 @@ TOOLCHAIN = "clang"
 
 # By default, clang.bbclass sets TOOLCHAIN:class-native to "gcc", but we want
 # to build the native recipes (e.g. GN) with clang too.
-TOOLCHAIN_NATIVE = "clang"
+TOOLCHAIN:class-native = "clang"
 
 # This makes the target build use libc++ and compiler_rt instead of the GNU
 # runtime, just like upstream does. The native binaries compiled and run as
diff --git a/meta-chromium/recipes-browser/chromium/files/0014-devtools-fix-import-meta-main-for-older-nodejs.patch b/meta-chromium/recipes-browser/chromium/files/0014-devtools-fix-import-meta-main-for-older-nodejs.patch
new file mode 100644
index 00000000..e327c321
--- /dev/null
+++ b/meta-chromium/recipes-browser/chromium/files/0014-devtools-fix-import-meta-main-for-older-nodejs.patch
@@ -0,0 +1,37 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Copilot <223556219+Copilot@users.noreply.github.com>
+Date: Wed, 23 Apr 2026 13:30:00 +0100
+Subject: [PATCH] devtools: Replace import.meta.main with Node.js 22 compatible
+ check
+
+import.meta.main requires Node.js >= 24.2.0 but scarthgap ships
+Node.js 22.11.0. Use a URL comparison of import.meta.url against
+process.argv[1] as a fallback, which works on all Node.js ESM versions.
+
+Upstream-Status: Inappropriate [OE-specific workaround]
+
+Signed-off-by: Copilot <223556219+Copilot@users.noreply.github.com>
+---
+ .../src/scripts/build/generate_css_js_files.js | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/third_party/devtools-frontend/src/scripts/build/generate_css_js_files.js b/third_party/devtools-frontend/src/scripts/build/generate_css_js_files.js
+--- a/third_party/devtools-frontend/src/scripts/build/generate_css_js_files.js
++++ b/third_party/devtools-frontend/src/scripts/build/generate_css_js_files.js
+@@ -4,6 +4,7 @@
+ import cssnano from 'cssnano';
+ import cssnanoPresetLite from 'cssnano-preset-lite';
+ import * as fs from 'node:fs';
++import * as url from 'node:url';
+ import * as path from 'node:path';
+ import postcss from 'postcss';
+ 
+@@ -80,6 +81,7 @@ async function runMain() {
+   );
+ }
+ 
+-if (import.meta.main) {
++const isMain = import.meta.main ?? (url.fileURLToPath(import.meta.url) === fs.realpathSync(process.argv[1]));
++if (isMain) {
+   runMain();
+ }
diff --git a/meta-chromium/recipes-browser/chromium/files/fix-clang20-defaulted-operator-crash.patch b/meta-chromium/recipes-browser/chromium/files/fix-clang20-defaulted-operator-crash.patch
new file mode 100644
index 00000000..767913b9
--- /dev/null
+++ b/meta-chromium/recipes-browser/chromium/files/fix-clang20-defaulted-operator-crash.patch
@@ -0,0 +1,24 @@
+From: OE Build <oe@build>
+Subject: [PATCH] Fix Clang 20 crash on defaulted out-of-class friend operator==
+
+Clang 20 crashes (ICE in SetDeclDefaulted) when an out-of-class friend
+operator== with a DLL-export attribute uses = default. Provide an
+explicit implementation instead. Chromium 147 targets Clang 23 which
+doesn't have this bug.
+
+Upstream-Status: Inappropriate [scarthgap backport compatibility]
+Signed-off-by: OE Build <oe@build>
+
+--- a/services/network/public/cpp/permissions_policy/origin_with_possible_wildcards.cc
++++ b/services/network/public/cpp/permissions_policy/origin_with_possible_wildcards.cc
+@@ -94,7 +94,9 @@
+ }
+ 
+ bool operator==(const OriginWithPossibleWildcards& lhs,
+-                const OriginWithPossibleWildcards& rhs) = default;
++                const OriginWithPossibleWildcards& rhs) {
++  return lhs.csp_source == rhs.csp_source;
++}
+ 
+ std::strong_ordering operator<=>(const OriginWithPossibleWildcards& lhs,
+                                  const OriginWithPossibleWildcards& rhs) {
diff --git a/meta-chromium/recipes-browser/chromium/files/fix-cpp26-octal-literals.patch b/meta-chromium/recipes-browser/chromium/files/fix-cpp26-octal-literals.patch
new file mode 100644
index 00000000..b09c95d3
--- /dev/null
+++ b/meta-chromium/recipes-browser/chromium/files/fix-cpp26-octal-literals.patch
@@ -0,0 +1,21 @@
+From: OE Build <oe@build>
+Subject: [PATCH] Fix C++26 octal literal syntax for older compilers
+
+The 0o prefix for octal literals (P3275R0) requires C++26/Clang 21+.
+Replace with standard C++ 0-prefix octal literals for compatibility
+with Clang 20.
+
+Upstream-Status: Inappropriate [scarthgap backport compatibility]
+Signed-off-by: OE Build <oe@build>
+
+--- a/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector_linux.cc
++++ b/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector_linux.cc
+@@ -116,7 +116,7 @@ bool NamedMojoServerEndpointConnectorLinux::TryStart() {
+   if (!options_.require_same_peer_user) {
+     // Allow any user to write to the UDS. fchmod doesn't work after bind(), so
+     // we need to call chmod on the socket filename, which is the server name.
+-    if (chmod(options_.server_name.c_str(), 0o666) != 0) {
++    if (chmod(options_.server_name.c_str(), 0666) != 0) {
+       PLOG(ERROR) << "chmod failed";
+       return false;
+     }
diff --git a/meta-chromium/recipes-browser/chromium/files/fix-mksnapshot-clang20-miscompile.patch b/meta-chromium/recipes-browser/chromium/files/fix-mksnapshot-clang20-miscompile.patch
new file mode 100644
index 00000000..c3c10496
--- /dev/null
+++ b/meta-chromium/recipes-browser/chromium/files/fix-mksnapshot-clang20-miscompile.patch
@@ -0,0 +1,32 @@
+From: user <user@example.com>
+Subject: [PATCH] v8: Fix RegisterAllocator crash under QEMU user-mode emulation
+
+When cross-compiling for aarch64 with Clang 20, V8's mksnapshot
+crashes under QEMU user-mode emulation with SIGTRAP in
+RegisterAllocator::Free(). The crash occurs because std::find
+fails to locate a register pointer in allocated_registers_,
+causing erase(end()) which is undefined behavior.
+
+This appears to be triggered by Clang 20's optimization of the
+std::vector find+erase pattern combined with QEMU's emulation.
+The issue does not occur with Clang 23 on native arm64 hardware.
+
+Make Free() defensive by checking the find result before erasing.
+This is a build-time-only code path (mksnapshot generates V8
+builtins during compilation) with no runtime performance impact.
+
+--- a/v8/src/builtins/arm64/builtins-arm64.cc
++++ b/v8/src/builtins/arm64/builtins-arm64.cc
+@@ -3578,8 +3578,10 @@
+     DCHECK_NE(*reg, no_reg);
+     available_.Combine(*reg);
+     *reg = no_reg;
+-    allocated_registers_.erase(
+-      find(allocated_registers_.begin(), allocated_registers_.end(), reg));
++    auto it = find(allocated_registers_.begin(), allocated_registers_.end(),
++                   reg);
++    if (it != allocated_registers_.end())
++      allocated_registers_.erase(it);
+   }
+ 
+   void Reserve(const Register& reg) {
diff --git a/meta-chromium/recipes-browser/chromium/files/fix-xr-rigid-transform-incomplete-type.patch b/meta-chromium/recipes-browser/chromium/files/fix-xr-rigid-transform-incomplete-type.patch
new file mode 100644
index 00000000..04f74035
--- /dev/null
+++ b/meta-chromium/recipes-browser/chromium/files/fix-xr-rigid-transform-incomplete-type.patch
@@ -0,0 +1,34 @@
+From: Copilot <223556219+Copilot@users.noreply.github.com>
+Subject: [PATCH] Fix incomplete type error with XRRigidTransform destructor
+
+Clang 20's libc++ requires complete types for unique_ptr destruction.
+Move the defaulted destructor from the header to the .cc file where
+gfx::Transform is fully defined.
+
+---
+ .../renderer/modules/xr/xr_rigid_transform.cc   | 2 ++
+ .../renderer/modules/xr/xr_rigid_transform.h    | 2 +-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+--- a/third_party/blink/renderer/modules/xr/xr_rigid_transform.h
++++ b/third_party/blink/renderer/modules/xr/xr_rigid_transform.h
+@@ -37,7 +37,7 @@
+   XRRigidTransform(const XRRigidTransform&) = delete;
+   XRRigidTransform& operator=(const XRRigidTransform&) = delete;
+ 
+-  ~XRRigidTransform() override = default;
++  ~XRRigidTransform() override;
+ 
+   DOMPointReadOnly* position() const { return position_.Get(); }
+   DOMPointReadOnly* orientation() const { return orientation_.Get(); }
+--- a/third_party/blink/renderer/modules/xr/xr_rigid_transform.cc
++++ b/third_party/blink/renderer/modules/xr/xr_rigid_transform.cc
+@@ -25,6 +25,8 @@
+ }
+ }  // anonymous namespace
+ 
++XRRigidTransform::~XRRigidTransform() = default;
++
+ // makes a deep copy of transformationMatrix
+ XRRigidTransform::XRRigidTransform(const gfx::Transform& transformationMatrix)
+     : matrix_(std::make_unique<gfx::Transform>(transformationMatrix)) {
diff --git a/meta-chromium/recipes-browser/chromium/gn-native_147.0.7727.116.bb b/meta-chromium/recipes-browser/chromium/gn-native_147.0.7727.116.bb
new file mode 100644
index 00000000..5a3225be
--- /dev/null
+++ b/meta-chromium/recipes-browser/chromium/gn-native_147.0.7727.116.bb
@@ -0,0 +1,48 @@
+# gn-native contains the GN binary used to configure Chromium.
+# It is not released separately, and each Chromium release is only expected to
+# work with the GN version provided with it.
+
+require chromium.inc
+
+inherit native
+
+S = "${WORKDIR}/chromium-${PV}"
+
+# bootstrap.py --no_clean hardcodes the build location to out_bootstrap.
+# Omitting --no_clean causes the script to create a temporary directory with a
+# random name outside the build directory, so we choose the lesser of the two
+# evils.
+B = "${S}/out_bootstrap"
+
+SRC_URI += " \
+        file://0001-Pass-no-static-libstdc-to-gen.py.patch \
+"
+
+# The build system expects the linker to be invoked via the compiler. If we use
+# the default value for BUILD_LD, it will fail because it does not recognize
+# some of the arguments passed to it.
+BUILD_LD = "${CXX}"
+
+# Use LLVM's ar rather than binutils'. Depending on the optimizations enabled
+# in the build ar(1) may not be enough.
+BUILD_AR = "llvm-ar"
+
+DEPENDS = "clang-native ninja-native"
+DEPENDS:append:runtime-llvm = " compiler-rt-native libcxx-native"
+# Use libcxx headers for native parts
+CXXFLAGS:append:runtime-llvm = " -isysroot=${STAGING_DIR_NATIVE} -stdlib=libc++"
+# Use libgcc for native parts
+LDFLAGS:append:runtime-llvm = " -rtlib=libgcc -unwindlib=libgcc -stdlib=libc++ -lc++abi -rpath ${STAGING_LIBDIR_NATIVE}"
+
+do_configure[noexec] = "1"
+
+do_compile() {
+	python3 ${S}/tools/gn/bootstrap/bootstrap.py --skip-generate-buildfiles
+}
+
+do_install() {
+	install -d ${D}${bindir}
+	install -m 0755 ${S}/out/Release/gn ${D}${bindir}/gn
+}
+
+INSANE_SKIP:${PN} += "already-stripped"
diff --git a/meta-chromium/recipes-browser/chromium/gn/0001-Pass-no-static-libstdc-to-gen.py.patch b/meta-chromium/recipes-browser/chromium/gn/0001-Pass-no-static-libstdc-to-gen.py.patch
new file mode 100644
index 00000000..9c142ce3
--- /dev/null
+++ b/meta-chromium/recipes-browser/chromium/gn/0001-Pass-no-static-libstdc-to-gen.py.patch
@@ -0,0 +1,28 @@
+From 43aa14f7dbfb3f1336fe73cd40fe300364643838 Mon Sep 17 00:00:00 2001
+From: Maksim Sisov <msisov@igalia.com>
+Date: Thu, 19 Dec 2019 15:47:53 +0200
+Subject: [PATCH] Pass no-static-libstdc++ to gen.py
+
+Upstream-Status: Inappropriate
+
+GN requires libstdc++.a to be installed on host systems by default,
+which is often not very common, for no particular reason.
+
+Signed-off-by: Raphael Kubo da Costa <kubo@igalia.com>
+Signed-off-by: Maksim Sisov <msisov@igalia.com>
+---
+ tools/gn/bootstrap/bootstrap.py | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tools/gn/bootstrap/bootstrap.py b/tools/gn/bootstrap/bootstrap.py
+index 8955e051ac..28a2ed4b7d 100755
+--- a/tools/gn/bootstrap/bootstrap.py
++++ b/tools/gn/bootstrap/bootstrap.py
+@@ -111,6 +111,7 @@ def main(argv):
+   cmd = [
+       sys.executable,
+       os.path.join(GN_ROOT, 'build', 'gen.py'),
++      '--no-static-libstdc++',
+       '--no-last-commit-position',
+       '--out-path=' + gn_build_dir,
+   ]

@MaxIhlenfeldt MaxIhlenfeldt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two questions, as well as some requests for changing patch authors / sign offs. All in all fantastic work, thanks!

Comment thread meta-chromium/recipes-browser/chromium/files/fix-cpp26-octal-literals.patch Outdated
Comment thread meta-chromium/recipes-browser/chromium/files/fix-cpp26-octal-literals.patch Outdated
Comment thread meta-chromium/recipes-browser/chromium/chromium-gn.inc
Comment thread meta-chromium/recipes-browser/chromium/chromium-gn.inc Outdated
@OSSystems OSSystems deleted a comment from nsabedra27-glitch May 4, 2026
@caneraltinbasak caneraltinbasak force-pushed the for/review/ossystems/scarthgap/147.0.7727.55 branch from 92898de to 11ed21e Compare May 5, 2026 09:15

@caneraltinbasak caneraltinbasak left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've used copilot to fix the problems and I didn't want to hide the fact that I did use copilot. I reviewed the patches myself and they looked all good.

I've replied the questions and fixed the copilot generated patches.

Comment thread meta-chromium/recipes-browser/chromium/chromium-gn.inc
Comment thread meta-chromium/recipes-browser/chromium/files/fix-cpp26-octal-literals.patch Outdated
Comment thread meta-chromium/recipes-browser/chromium/files/fix-cpp26-octal-literals.patch Outdated
Comment thread meta-chromium/recipes-browser/chromium/chromium-gn.inc Outdated

@MaxIhlenfeldt MaxIhlenfeldt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the updates to this PR as well as your transparency regarding the use of Copilot! now all lgtm, thanks again for all the work!

@MaxIhlenfeldt

Copy link
Copy Markdown
Collaborator

Ah, just one more thing, can you please sign off the first commit for this PR?

@MaxIhlenfeldt MaxIhlenfeldt changed the title chromium: Upgrade to 147.0.7727.116 [scarthgap] chromium: Upgrade to 147.0.7727.116 May 6, 2026
caneraltinbasak and others added 2 commits May 6, 2026 15:17
Port of upstream master commit 5b9a7e7 to scarthgap branch.

Release notes:
https://chromereleases.googleblog.com/2026/04/stable-channel-update-for-desktop.html

Build and patch changes:
------------------------

Removed patches (from upstream):
* 0006-Don-t-pass-unknown-LLVM-options.patch
  Merged into the new version.

* 0008-Use-the-correct-path-to-libclang_rt.builtins.a.patch
  Merged into the new version.

* musl/0008-Use-monotonic-clock-for-pthread_cond_timedwait-with-.patch
  Merged into the new version.

* musl/0015-fix-libc-version-include.patch
  Merged into the new version.

Modified patches (from upstream):
* 0001-Drop-GN-compiler-settings-conflicting-with-OE.patch
  Adapted to the new version.

* 0003-wrapper-extra-flags.patch
  Adapted to the new version.

* 0004-Delete-compiler-options-not-available-in-release-ver.patch
  Also delete compiler option -fno-lifetime-dse as clang does not accept it.

* 0009-Adjust-the-Rust-build-to-our-needs.patch
  Adapted to the new version.

* 0013-Reduce-minimum-browser-window-width-to-480px.patch
  Adapted to the new version.

* musl/0001-mallinfo-implementation-is-glibc-specific.patch
  Adapted to the new version.

* musl/0004-fontconfig-Musl-does-not-have-rand_r-API.patch
  Adapted to the new version.

* musl/0006-debug-Fix-build-with-musl.patch
  Adapted to the new version.

* musl/0007-mallopt-is-glibc-specific-API.patch
  Adapted to the new version.

* musl/0009-Fix-tab-crashes-on-musl.patch
  Adapted to the new version.

* musl/0011-sys-stat.patch
  Adapted to the new version.

New patches (from upstream):
* 0001-Fix-building-gpu_host_impl.cc-on-Linux.patch
  Fix build of gpu_host_impl.cc on Linux.

* chromium-142-crabbyavif-rust18x.patch
  Fix crabbyavif build with Rust 1.8x.

* chromium-145-zip_ffi_glue-use-edition2024.patch
  Fix zip_ffi_glue Rust edition.

* fix-SYS_SECCOMP-redefinition.patch
  Fix SYS_SECCOMP redefinition error.

* use-adler2.patch
  Use adler2 crate instead of deprecated adler.

New patches (scarthgap-specific):
* 0014-devtools-fix-import-meta-main-for-older-nodejs.patch
  Replace import.meta.main with a Node.js 22 compatible fallback.
  import.meta.main requires Node.js >= 24.2.0, scarthgap ships 22.11.0.

* fix-cpp26-octal-literals.patch
  Replace C++26 octal literal syntax 0o666 with standard 0666.
  The 0o prefix (P3275R0) requires Clang 21+, scarthgap has Clang 20.

* fix-clang20-defaulted-operator-crash.patch
  Work around Clang 20 ICE on out-of-class defaulted friend operator==
  with COMPONENT_EXPORT attribute in origin_with_possible_wildcards.cc.

* fix-xr-rigid-transform-incomplete-type.patch
  Move XRRigidTransform destructor from header to .cc file. Fixes
  incomplete type error with unique_ptr<gfx::Transform> on Clang 20.

* fix-mksnapshot-clang20-miscompile.patch (aarch64 only)
  Make V8 RegisterAllocator::Free() defensive against find() returning
  end(). Fixes mksnapshot SIGTRAP crash under QEMU aarch64 user-mode
  emulation caused by Clang 20 compiling erase(end()) as brk #1.

Recipe changes (scarthgap-specific):
* chromium-gn.inc: Remove lld-native from DEPENDS (lld is part of
  clang-native on scarthgap).
* chromium-gn.inc: Override DEBUG_FLAGS to remove -g. With LTO enabled,
  Yocto's -g flag causes debug sections to exceed 4GB, resulting in
  R_X86_64_32 relocation overflow during linking.
* chromium-gn.inc: Fix do_copy_target_rustlibs to remove stale rlibs
  from rust-cross before copying libstd-rs rlibs. Prevents symbol hash
  mismatches when Chromium's find_std_rlibs.py picks wrong duplicates.
* chromium.inc: Use WORKDIR instead of UNPACKDIR (not in scarthgap).
* chromium.inc: Use TOOLCHAIN:class-native instead of TOOLCHAIN_NATIVE.

License changes:
----------------

Same as upstream commit 5b9a7e7. See master branch for details.

Test-built:
-----------

* chromium-ozone-wayland
  * MACHINE=qemux86-64, qemuarm64, qemuarm

Test dependencies:
------------------

* URI: git://git.openembedded.org/openembedded-core
  - branch: scarthgap
  - revision: 52380df998b3a8fe6a091f8547434a3231320a8e

* URI: git://git.openembedded.org/meta-openembedded
  - layers: meta-oe
  - branch: scarthgap
  - revision: 5124ac4a658899158f4a7a2ddf1d2ca931ec7d0e

* URI: git@github.com:kraj/meta-clang.git
  - branch: scarthgap-clang20
  - revision: f26bab34e6c208149fe1ad04521864b663489f4d

* URI: git://git.yoctoproject.org/meta-lts-mixins
  - branch: scarthgap/rust
  - revision: c19b6da5a3afd3c892b3b1b44983e993ac6d5308

Signed-off-by: Caner Altinbasak <cal@brightsign.biz>
Release notes:

147.0.7727.101
https://chromereleases.googleblog.com/2026/04/stable-channel-update-for-desktop_15.html

147.0.7727.116
https://chromereleases.googleblog.com/2026/04/stable-channel-update-for-desktop_22.html

Build and patch changes:
------------------------

None

License changes:
----------------

None

Test-built:
-----------

* chromium-ozone-wayland
  * MACHINE=intel-corei7-64, qemuarm64, raspberrypi3

* chromium-x11
  * MACHINE=intel-corei7-64, qemuarm64, raspberrypi3

Test dependencies:
------------------

* URI: git://git.openembedded.org/openembedded-core
  - branch: master
  - revision: a16eb33fc401db34fbeaba623231d006312eb48e

* URI: git://git.openembedded.org/meta-openembedded
  - layers: meta-oe
  - branch: master
  - revision: 420222862f5a6d95023b8f5f3b7e1808b2264ef9

* URI: git://git.yoctoproject.org/meta-intel
  - branch: master
  - revision: 511ddb7ea90499b2088248f59bab3e9d6f3c900c

* URI: https://github.com/agherzan/meta-raspberrypi
  - branch: master
  - revision: b83766291188efb956c475b09c9666c2dfe2cb69

Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
@caneraltinbasak caneraltinbasak force-pushed the for/review/ossystems/scarthgap/147.0.7727.55 branch from 11ed21e to f0b3bc5 Compare May 6, 2026 14:19

@MaxIhlenfeldt MaxIhlenfeldt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@MaxIhlenfeldt MaxIhlenfeldt merged commit 85eeb6b into OSSystems:scarthgap May 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

4 participants