From 05534e887570b1fbe5c04de091a54303de290724 Mon Sep 17 00:00:00 2001 From: EnumDev Date: Fri, 20 Feb 2026 13:37:22 +0200 Subject: [PATCH] Initial commit --- .gitignore | 3 + check-version.sh | 8 + pkg.info | 64 ++++++++ .../chromium-138-nodejs-version-check.patch | 49 ++++++ .../chromium-145-fix-SYS_SECCOMP.patch | 11 ++ source-files/chromium.sh | 6 + .../dont_require_profiler_builtins.rlib.patch | 27 ++++ source-files/increase-fortify-level.patch | 13 ++ ...-chromium-145-build-with-wasm-rollup.patch | 117 ++++++++++++++ ...se-oauth2-client-switches-as-default.patch | 21 +++ source.sh | 150 ++++++++++++++++++ 11 files changed, 469 insertions(+) create mode 100644 .gitignore create mode 100644 check-version.sh create mode 100644 pkg.info create mode 100644 source-files/chromium-138-nodejs-version-check.patch create mode 100644 source-files/chromium-145-fix-SYS_SECCOMP.patch create mode 100644 source-files/chromium.sh create mode 100644 source-files/dont_require_profiler_builtins.rlib.patch create mode 100644 source-files/increase-fortify-level.patch create mode 100644 source-files/ungoogled-chromium-145-build-with-wasm-rollup.patch create mode 100644 source-files/use-oauth2-client-switches-as-default.patch create mode 100644 source.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9d96df7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Ignore BPM archives and signatures +*.bpm +*.bpm.sig diff --git a/check-version.sh b/check-version.sh new file mode 100644 index 0000000..a7182d3 --- /dev/null +++ b/check-version.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +URL="https://chromiumdash.appspot.com/fetch_releases?channel=Stable&platform=Linux&num=1&offset=0" + +# Get version number from tag name +VERSION=$(curl "$URL" | jq -r '.[0].version') + +echo "$VERSION" diff --git a/pkg.info b/pkg.info new file mode 100644 index 0000000..316e6dc --- /dev/null +++ b/pkg.info @@ -0,0 +1,64 @@ +name: chromium +description: A safe, fast and stable open-source browser project +version: 145.0.7632.109 +revision: 1 +url: https://www.chromium.org/Home/ +license: BSD-3-License +maintainers: + - enumdev@enumerated.dev +architecture: any +type: source +depends: + - alsa-lib + - brotli + - dbus + - desktop-file-utils + - flac + - fontconfig + - freetype2 + - gtk3 + - harfbuzz + - hicolor-icon-theme + - libcups + - libffi + - libgcrypt + - libjpeg-turbo + - libpulse + - libva + - libwebp + - libxml2 + - libxslt + - libxscrnsaver + - minizip + - nss + - opus + - pciutils + - xdg-utils +optional_depends: + - gtk4 + - kdialog + - kwallet + - pipewire + - upower +make_depends: + - clang + - compiler-rt + - gperf + - gn + - gperf + - jre + - lld + - ninja + - nodejs + - npm + - pipewire + - python3 + - qt6-base + - rsync + - rustc + - rust-bindgen +downloads: + - url: https://github.com/chromium-linux-tarballs/chromium-tarballs/releases/download/${BPM_PKG_VERSION}/chromium-${BPM_PKG_VERSION}-linux.tar.xz + extract_to: ${BPM_SOURCE} + extract_strip_components: 1 + checksum: b9ea83023404cb1e33f9ef03f3d5076885611d7c262a43d70d1c05b4779b345e diff --git a/source-files/chromium-138-nodejs-version-check.patch b/source-files/chromium-138-nodejs-version-check.patch new file mode 100644 index 0000000..cc4b3b4 --- /dev/null +++ b/source-files/chromium-138-nodejs-version-check.patch @@ -0,0 +1,49 @@ +https://issues.chromium.org/issues/418397211 +From: Matt Jolly +Date: Tue, 25 Mar 2025 13:33:48 +1000 +Subject: [PATCH] Remove nodejs version check + +Added in https://github.com/chromium/chromium/commit/0ff8528999941d7182be6fc77aeb12a110a3cd86, +this change is only really useful for gclient checkouts and breaks the +ability for downstreams to provide their own, compatible, nodejs +version via the system package manager (or for use on arches other than +those that Google provides binaries for): + +[ERR_ASSERTION]: Failed NodeJS version check: Expected version 'v22.11.0', but found 'v22.13.1'. Did you run 'gclient sync' + +This is google development footgun protection, working around +poor development practices and gclient's inability to ensure +that the source tree is in a consistent state. We don't need it +here. + +Signed-off-by: Matt Jolly +--- a/third_party/node/node.gni ++++ b/third_party/node/node.gni +@@ -36,15 +36,5 @@ template("node") { + } + } + +- # Automatically add a dependency to ":check_version" to ensure NodeJS is +- # always running the expected version, except when the ':check_version' +- # target itself is running in which case it shouldn't depend on itself. +- if (get_label_info(":" + target_name, "label_no_toolchain") != +- "//third_party/node:check_version") { +- if (!defined(deps)) { +- deps = [] +- } +- deps += [ "//third_party/node:check_version" ] +- } + } + } +--- a/third_party/protobuf/proto_library.gni ++++ b/third_party/protobuf/proto_library.gni +@@ -562,7 +562,6 @@ template("proto_library") { + _protoc_gen_ts_path, + "//tools/protoc_wrapper/protoc-gen-ts_proto.py", + ] + _protoc_gen_ts_runtime_deps +- deps += [ "//third_party/node:check_version" ] + } + + if (_generate_with_plugin) { +-- +2.49.0 diff --git a/source-files/chromium-145-fix-SYS_SECCOMP.patch b/source-files/chromium-145-fix-SYS_SECCOMP.patch new file mode 100644 index 0000000..0c1e06c --- /dev/null +++ b/source-files/chromium-145-fix-SYS_SECCOMP.patch @@ -0,0 +1,11 @@ +https://bugs.gentoo.org/969846 +https://bugs.gentoo.org/969495 +https://crbug.com/456218403 +--- a/sandbox/linux/system_headers/linux_seccomp.h ++++ b/sandbox/linux/system_headers/linux_seccomp.h +@@ -7,4 +7,5 @@ + + #include ++#include + #include + diff --git a/source-files/chromium.sh b/source-files/chromium.sh new file mode 100644 index 0000000..2ffe442 --- /dev/null +++ b/source-files/chromium.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +export CHROME_WRAPPER=/usr/lib/chromium/chromium +export CHROME_DESKTOP=chromium.desktop +CHROME_FLAGS="--enable-gpu-rasterization $CHROME_FLAGS" +exec /usr/lib/chromium/chromium $CHROME_FLAGS "$@" diff --git a/source-files/dont_require_profiler_builtins.rlib.patch b/source-files/dont_require_profiler_builtins.rlib.patch new file mode 100644 index 0000000..fa2a476 --- /dev/null +++ b/source-files/dont_require_profiler_builtins.rlib.patch @@ -0,0 +1,27 @@ +From 7f9a0877029aa3492fd381313886d9c80efbb752 Mon Sep 17 00:00:00 2001 +From: Max Ihlenfeldt +Date: Wed, 7 Feb 2024 11:58:30 +0000 +Subject: [PATCH] Don't require profiler_builtins.rlib + +This library is only needed for profiling builds, which we don't do. +Including it leads to compile errors on with OE's current master branch +because they disabled building the library, so just skip it. + +Upstream-Status: Inappropriate [specific to our build setup] +Signed-off-by: Max Ihlenfeldt +--- + build/rust/std/BUILD.gn | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/build/rust/std/BUILD.gn b/build/rust/std/BUILD.gn +index 77f4b8c..3078de8 100644 +--- a/build/rust/std/BUILD.gn ++++ b/build/rust/std/BUILD.gn +@@ -100,7 +100,6 @@ if (toolchain_has_rust) { + # don't need to pass to the C++ linker because they're used for specialized + # purposes. + skip_stdlib_files = [ +- "profiler_builtins", + "rustc_std_workspace_alloc", + "rustc_std_workspace_core", + "rustc_std_workspace_std", diff --git a/source-files/increase-fortify-level.patch b/source-files/increase-fortify-level.patch new file mode 100644 index 0000000..1559b94 --- /dev/null +++ b/source-files/increase-fortify-level.patch @@ -0,0 +1,13 @@ +diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn +index eb329bc88fec..7c98dfddcf8a 100644 +--- a/build/config/compiler/BUILD.gn ++++ b/build/config/compiler/BUILD.gn +@@ -2054,7 +2054,7 @@ config("chromium_code") { + # Non-chromium code is not guaranteed to compile cleanly with + # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are + # disabled, so only do that for Release build. +- fortify_level = "2" ++ fortify_level = "3" + + # ChromeOS's toolchain supports a high-quality _FORTIFY_SOURCE=3 + # implementation with a few custom glibc patches. Use that if it's diff --git a/source-files/ungoogled-chromium-145-build-with-wasm-rollup.patch b/source-files/ungoogled-chromium-145-build-with-wasm-rollup.patch new file mode 100644 index 0000000..48316f7 --- /dev/null +++ b/source-files/ungoogled-chromium-145-build-with-wasm-rollup.patch @@ -0,0 +1,117 @@ +--- a/third_party/devtools-frontend/src/front_end/Images/BUILD.gn ++++ b/third_party/devtools-frontend/src/front_end/Images/BUILD.gn +@@ -28,7 +28,7 @@ node_action("generate_css_vars") { + } + + node_action("optimize_images") { +- script = "node_modules/rollup/dist/bin/rollup" ++ script = "../../node/node_modules/@rollup/wasm-node/dist/bin/rollup" + + _bundled_entrypoint = target_gen_dir + "/Images.prebundle.js" + _output_file_location = target_gen_dir + "/Images.js" +--- a/third_party/devtools-frontend/src/front_end/models/live-metrics/web-vitals-injected/BUILD.gn ++++ b/third_party/devtools-frontend/src/front_end/models/live-metrics/web-vitals-injected/BUILD.gn +@@ -26,7 +26,7 @@ devtools_module("web-vitals-injected") { + } + + node_action("bundled_library") { +- script = "node_modules/rollup/dist/bin/rollup" ++ script = "../../node/node_modules/@rollup/wasm-node/dist/bin/rollup" + + _bundled_entrypoint = target_gen_dir + "/web-vitals-injected.js" + _output_file_location = target_gen_dir + "/web-vitals-injected.generated.js" +--- a/third_party/devtools-frontend/src/front_end/panels/recorder/injected/BUILD.gn ++++ b/third_party/devtools-frontend/src/front_end/panels/recorder/injected/BUILD.gn +@@ -55,7 +55,7 @@ devtools_entrypoint("bundle") { + } + + node_action("bundled_library") { +- script = "node_modules/rollup/dist/bin/rollup" ++ script = "../../node/node_modules/@rollup/wasm-node/dist/bin/rollup" + + _bundled_entrypoint = target_gen_dir + "/injected.js" + _output_file_location = target_gen_dir + "/injected.generated.js" +--- a/third_party/devtools-frontend/src/inspector_overlay/BUILD.gn ++++ b/third_party/devtools-frontend/src/inspector_overlay/BUILD.gn +@@ -36,7 +36,7 @@ action("build_inspector_overlay") { + "$target_gen_dir/tool_window_controls.css", + "$target_gen_dir/main.js", + devtools_location_prepend + "inspector_overlay/loadCSS.rollup.js", +- devtools_location_prepend + "node_modules/rollup/dist/bin/rollup", ++ devtools_location_prepend + "../../node/node_modules/@rollup/wasm-node/dist/bin/rollup", + ] + + outputs = [ "$resources_out_dir/main.js" ] +--- a/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py ++++ b/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py +@@ -56,7 +56,7 @@ def rollup(input_path, output_path, file + [devtools_paths.node_path(), + devtools_paths.rollup_path()] + + ['--format', 'iife', '-n', 'InspectorOverlay'] + ['--input', target] + +- ['--plugin', rollup_plugin, '--plugin', 'terser'], ++ ['--plugin', rollup_plugin, '--plugin', path.join(devtools_paths.node_modules_path(), '@rollup', 'plugin-terser', 'dist', 'cjs', 'index.js')], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + universal_newlines=True, +--- a/third_party/devtools-frontend/src/scripts/build/ninja/bundle.gni ++++ b/third_party/devtools-frontend/src/scripts/build/ninja/bundle.gni +@@ -11,7 +11,7 @@ template("bundle") { + "You must define the 'entrypoint' for a bundle target") + + node_action(target_name) { +- script = "scripts/build/esbuild.js" ++ script = "../../node/node_modules/@rollup/wasm-node/dist/bin/rollup" + forward_variables_from(invoker, + [ + "visibility", +@@ -21,27 +21,23 @@ template("bundle") { + + inputs = [ + invoker.entrypoint, ++ devtools_location_prepend + "scripts/build/rollup.config.mjs", + devtools_location_prepend + "scripts/build/devtools_plugin.js", + devtools_location_prepend + "scripts/devtools_paths.js", + ] + +- _esbuild = devtools_location_prepend + "third_party/esbuild/esbuild" +- if (host_os == "win") { +- inputs += [ _esbuild + ".exe" ] +- } else { +- inputs += [ _esbuild ] +- } +- + args = [ ++ "--config", ++ rebase_path( ++ devtools_location_prepend + "scripts/build/rollup.config.mjs", ++ root_build_dir), ++ "--input", + rebase_path(invoker.entrypoint, root_build_dir), ++ "--file", + rebase_path(invoker.output_file_location, root_build_dir), + "--configSourcemaps", + ] + +- if (!is_debug) { +- args += [ "--minify" ] +- } +- + outputs = [ invoker.output_file_location ] + } + } +--- a/third_party/devtools-frontend/src/scripts/devtools_paths.py ++++ b/third_party/devtools-frontend/src/scripts/devtools_paths.py +@@ -64,8 +64,11 @@ def license_checker_path(): + + def rollup_path(): + return path.join( +- node_modules_path(), +- 'rollup', ++ third_party_path(), ++ 'node', ++ 'node_modules', ++ '@rollup', ++ 'wasm-node', + 'dist', + 'bin', + 'rollup', diff --git a/source-files/use-oauth2-client-switches-as-default.patch b/source-files/use-oauth2-client-switches-as-default.patch new file mode 100644 index 0000000..578b88d --- /dev/null +++ b/source-files/use-oauth2-client-switches-as-default.patch @@ -0,0 +1,21 @@ +diff --git a/google_apis/api_key_cache.cc b/google_apis/api_key_cache.cc +index bbb9420f40..690445534b 100644 +--- a/google_apis/api_key_cache.cc ++++ b/google_apis/api_key_cache.cc +@@ -235,14 +235,14 @@ ApiKeyCache::ApiKeyCache(const DefaultApiKeys& default_api_keys) { + + std::string default_client_id = CalculateKeyValue( + default_api_keys.google_default_client_id, +- STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_ID), std::string(), nullptr, ++ STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_ID), std::string(), ::switches::kOAuth2ClientID, + std::string(), environment.get(), command_line, gaia_config, + default_api_keys.allow_override_via_environment, + default_api_keys.allow_unset_values); + std::string default_client_secret = CalculateKeyValue( + default_api_keys.google_default_client_secret, + STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_SECRET), std::string(), +- nullptr, std::string(), environment.get(), command_line, gaia_config, ++ ::switches::kOAuth2ClientSecret, std::string(), environment.get(), command_line, gaia_config, + default_api_keys.allow_override_via_environment, + default_api_keys.allow_unset_values); + diff --git a/source.sh b/source.sh new file mode 100644 index 0000000..484f800 --- /dev/null +++ b/source.sh @@ -0,0 +1,150 @@ +# This is the source.sh script. It is executed by BPM in a temporary directory when compiling a source package +# BPM Expects the source code to be extracted into the automatically created 'source' directory which can be accessed using $BPM_SOURCE +# BPM Expects the output files to be present in the automatically created 'output' directory which can be accessed using $BPM_OUTPUT + +# The prepare function is executed in the root of the temp directory +# This function is used for putting downloaded files to the correct location or applying patches +prepare() { + cd "$BPM_SOURCE" + for _patch in "$BPM_WORKDIR"/*.patch; do + patch -Np1 -i "$_patch" + done + + # Allow building against system libraries in official builds + sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' tools/generate_shim_headers/generate_shim_headers.py + + # Link to system tools required by the build + mkdir -p third_party/node/linux/node-linux-x64/bin third_party/jdk/current/bin + ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/ + ln -s /usr/bin/java third_party/jdk/current/bin/ + + local _system_libs=( + brotli + flac + fontconfig + freetype + harfbuzz-ng + libjpeg + libwebp + libxml + libxslt + opus + zlib + ) + + # Remove bundled libraries for which we will use the system copies; this + # *should* do what the remove_bundled_libraries.py script does, with the + # added benefit of not having to list all the remaining libraries + local _lib + for _lib in "${_system_libs[@]//libjpeg/libjpeg_turbo}"; do + find "third_party/$_lib" -type f \ + \! -path "third_party/$_lib/chromium/*" \ + \! -path "third_party/$_lib/google/*" \ + \! -path "third_party/harfbuzz-ng/utils/hb_scoped.h" \ + \! -regex '.*\.\(gn\|gni\|isolate\)' \ + -delete + done + + ./build/linux/unbundle/replace_gn_files.py --system-libraries "${_system_libs[@]}" + + # Use correct libadler lib + sed -i 's/rustc_nightly_capability = use_chromium_rust_toolchain/rustc_nightly_capability = true/' build/config/rust.gni +} + +# The build function is executed in the source directory +# This function is used to compile the source code +build() { + export CC=clang CXX=clang++ AR=ar NM=nm + + local _flags=( + 'custom_toolchain="//build/toolchain/linux/unbundle:default"' + 'host_toolchain="//build/toolchain/linux/unbundle:default"' + 'is_official_build=true' # implies is_cfi=true on x86_64 + 'symbol_level=0' # sufficient for backtraces on x86(_64) + 'treat_warnings_as_errors=false' + 'fatal_linker_warnings=false' + 'disable_fieldtrial_testing_config=true' + 'blink_enable_generated_code_formatting=false' + 'ffmpeg_branding="Chrome"' + 'proprietary_codecs=true' + 'rtc_use_pipewire=true' + 'link_pulseaudio=true' + 'use_custom_libcxx=true' # https://github.com/llvm/llvm-project/issues/61705 + 'use_sysroot=false' + 'use_system_libffi=true' + 'enable_hangout_services_extension=true' + 'enable_widevine=true' + 'use_qt5=false' + 'use_qt6=true' + 'moc_qt6_path="/usr/lib/qt6"' + 'use_clang_modules=false' + 'clang_base_path="/usr"' + 'clang_use_chrome_plugins=false' + "clang_version=$(clang --version | grep -m1 version | sed 's/.* \([0-9]\+\).*/\1/')" + 'chrome_pgo_phase=0' + 'rust_sysroot_absolute="/usr"' + 'rust_bindgen_root="/usr"' + "rustc_version=\"$(rustc --version)\"" + ) + + export RUSTC_BOOTSTRAP=1 + + # Make builds deterministic and ignore unknown option warnings + export CFLAGS="${CFLAGS} -Wno-builtin-macro-redefined -Wno-unknown-warning-option" + export CXXFLAGS="${CXXFLAGS} -Wno-builtin-macro-redefined -Wno-unknown-warning-option" + export CPPFLAGS="${CPPFLAGS} -D__DATE__= -D__TIME__= -D__TIMESTAMP__=" + + gn gen out/Release --args="${_flags[*]}" + ninja -C out/Release chrome chrome_sandbox chromedriver.unstripped +} + +# The package function is executed in the source directory +# This function is used to move the compiled files into the output directory +package() { + install -Dm755 out/Release/chrome "$BPM_OUTPUT"/usr/lib/chromium/chromium + install -Dm755 out/Release/chrome_crashpad_handler "$BPM_OUTPUT"/usr/lib/chromium/chrome_crashpad_handler + install -Dm755 out/Release/chromedriver.unstripped "$BPM_OUTPUT"/usr/lib/chromium/chromedriver + install -Dm755 out/Release/libEGL.so "$BPM_OUTPUT"/usr/lib/chromium/libEGL.so + install -Dm755 out/Release/libGLESv2.so "$BPM_OUTPUT"/usr/lib/chromium/libGLESv2.so + install -Dm755 out/Release/libvk_swiftshader.so "$BPM_OUTPUT"/usr/lib/chromium/libvk_swiftshader.so + install -Dm755 out/Release/libvulkan.so.1 "$BPM_OUTPUT"/usr/lib/chromium/libvulkan.so.1 + install -Dm755 out/Release/vk_swiftshader_icd.json "$BPM_OUTPUT"/usr/lib/chromium/vk_swiftshader_icd.json + install -Dm755 out/Release/libqt6_shim.so "$BPM_OUTPUT"/usr/lib/chromium/libqt6_shim.so + install -Dm644 out/Release/icudtl.dat "$BPM_OUTPUT"/usr/lib/chromium/icudtl.dat + install -Dm644 out/Release/locales/*.pak -t "$BPM_OUTPUT"/usr/lib/chromium/locales/ + install -Dm644 out/Release/*.bin -t "$BPM_OUTPUT"/usr/lib/chromium + install -Dm644 out/Release/*.pak -t "$BPM_OUTPUT"/usr/lib/chromium + + # Install chromium launcher script + install -Dm755 "$BPM_WORKDIR"/chromium.sh "$BPM_OUTPUT"/usr/bin/chromium + + # Create symbolic link to usr/bin + ln -sf /usr/lib/chromium/chromedriver "$BPM_OUTPUT"/usr/bin/chromedriver + + # Install desktop icons + for size in 24 48 64 128 256; do + install -Dm644 chrome/app/theme/chromium/product_logo_${size}.png "$BPM_OUTPUT"/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png + done + for size in 16 32; do + install -Dm644 chrome/app/theme/default_100_percent/chromium/product_logo_${size}.png "$BPM_OUTPUT"/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png + done + + # Install desktop file + install -Dm644 chrome/installer/linux/common/desktop.template "$BPM_OUTPUT"/usr/share/applications/chromium.desktop + + # Install man page + install -Dm644 chrome/app/resources/manpage.1.in "$BPM_OUTPUT"/usr/share/man/man1/chromium.1 + + # Replace placeholders in desktop file and man page + sed -i \ + -e 's/@@MENUNAME/Chromium/g' \ + -e 's/@@PACKAGE/chromium/g' \ + -e 's/@@usr_bin_symlink_name/chromium/g' \ + -e 's|@@uri_scheme|x-scheme-handler/chromium;|g' \ + -e 's/@@extra_desktop_entries//g' \ + "$BPM_OUTPUT"/usr/share/applications/chromium.desktop \ + "$BPM_OUTPUT"/usr/share/man/man1/chromium.1 + + # Install package license + install -Dm644 "$BPM_SOURCE"/LICENSE "$BPM_OUTPUT"/usr/share/licenses/chromium/LICENSE +}