diff options
author | Martin Rodriguez Reboredo | 2022-09-30 18:00:54 -0300 |
---|---|---|
committer | Caleb Maclennan | 2022-12-12 20:52:51 +0300 |
commit | c28d690ab7040a782c4dd77caa1ad1436574e2a6 (patch) | |
tree | 2b33d2a187f98036c3b499bb207d49ba3c73cc5c /PKGBUILD | |
parent | 87f40c12c21f05e5adcb77bafe52170f8f5c68fd (diff) | |
download | aur-c28d690ab7040a782c4dd77caa1ad1436574e2a6.tar.gz |
uppkg: brave 1.44.112
upstream release
Signed-off-by: Caleb Maclennan <caleb@alerque.com>
Diffstat (limited to 'PKGBUILD')
-rw-r--r-- | PKGBUILD | 749 |
1 files changed, 434 insertions, 315 deletions
@@ -1,4 +1,5 @@ # Maintainer: Caleb Maclennana <caleb@alerque.com> +# Contributor: Martin Rodriguez Reboredo <yakoyoku@gmail.com> # Contributor: Monarc <warcraft99@web.de> # Contributor: Joan Figueras <ffigue at gmail dot com> # Contributor: Jacek Szafarkiewicz <szafar@linux.pl> @@ -23,93 +24,116 @@ ## 2 -> static ## 3 -> debug ## 4 -> release with custom cflags and system libs -: "${COMPONENT:=1}" +: "${COMPONENT:=4}" pkgname=brave -pkgver=1.30.87 +pkgver=1.44.112 pkgrel=1 pkgdesc='A web browser that stops ads and trackers by default' arch=(x86_64) url='https://www.brave.com/download' -license=(custom) +license=(BSD MPL custom:chromium) depends=(alsa-lib + dbus + desktop-file-utils gtk3 - json-glib + hicolor-icon-theme + libcups + libgcrypt + libpulse libva libxss nss - ttf-font) -makedepends=(clang + pciutils + systemd + ttf-liberation + xdg-utils) +makedepends=(cargo-audit + cbindgen + clang + cxxbridge git - glibc + gn gperf - icu java-runtime-headless + jq + lld llvm + ninja npm pipewire - python python-protobuf) optdepends=('pipewire: WebRTC desktop sharing under Wayland' 'kdialog: support for native dialogs in Plasma' - 'org.freedesktop.secrets: password storage backend on GNOME / Xfce' - 'kwallet: support for storing passwords in KWallet on Plasma' - 'sccache: For faster builds') -options=(!lto) -_chromium_base_ver=94 -_patchset=3 -_patchset_name="chromium-$_chromium_base_ver-patchset-$_patchset" + 'org.freedesktop.secrets: password storage backend') +_chromium_ver=106.0.5249.119 +_gcc_patchset=2 +_patchset_name="chromium-${_chromium_ver%%.*}-patchset-$_gcc_patchset" _launcher_ver=8 +_brave_base_ver="1.28" +_brave_patchset="1" +_brave_patchset_name="brave-$_brave_base_ver-patches-$_brave_patchset" source=("brave-browser::git+https://github.com/brave/brave-browser.git#tag=v$pkgver" - 'chromium::git+https://github.com/chromium/chromium.git' - 'git+https://chromium.googlesource.com/chromium/tools/depot_tools.git' - "git+https://github.com/brave/brave-core.git#tag=v$pkgver" - 'git+https://github.com/brave/adblock-rust.git' - brave-launcher - brave-browser.desktop - "chromium-launcher-$_launcher_ver.tar.gz::https://github.com/foutrelis/chromium-launcher/archive/v$_launcher_ver.tar.gz" + "brave::git+https://github.com/brave/brave-core.git#tag=v$pkgver" + "chromium::git+https://chromium.googlesource.com/chromium/src.git#tag=$_chromium_ver" + 'depot_tools::git+https://chromium.googlesource.com/chromium/tools/depot_tools.git' + "https://github.com/foutrelis/chromium-launcher/archive/refs/tags/v$_launcher_ver/chromium-launcher-$_launcher_ver.tar.gz" "https://github.com/stha09/chromium-patches/releases/download/$_patchset_name/$_patchset_name.tar.xz" - chromium-no-history.patch) -_arch_revision=d1911c4fdd73fad51b38c5ff29e2457975312f1b -_patches=(replace-blacklist-with-ignorelist.patch - add-a-TODO-about-a-missing-pnacl-flag.patch - use-ffile-compilation-dir.patch - sql-make-VirtualCursor-standard-layout-type.patch - chromium-93-ffmpeg-4.4.patch - chromium-94-ffmpeg-roll.patch - unexpire-accelerated-video-decode-flag.patch - use-oauth2-client-switches-as-default.patch) + "https://gitlab.com/hadogenes/brave-patches/-/archive/$_brave_patchset_name/brave-patches-$_brave_patchset_name.zip" + chromium-launcher-electron-app.patch + rust-autocxx-use_sysroot.patch + system-rust-utils.patch + brave-1.43-bat-native-ads-hash_vectorizer_fix-cstring.patch + brave-1.43-bat-native-ads-vector_data_fix-cmath.patch + brave-1.43-bitcoin-core_remove-serialize.h.patch + brave-1.43-brave_today-base_utf_string_conversions.patch + brave-1.43-debounce-debounce_navigation_throttle_fix.patch + brave-1.43-ntp_background_images-std-size_t.patch) +_arch_revision=bf2401407df5bcc938382eb03748fbef41e41c89 +_patches=(unbundle-jsoncpp-avoid-CFI-faults-with-is_cfi-true.patch + REVERT-enable-GlobalMediaControlsCastStartStop.patch + REVERT-roll-src-third_party-ffmpeg-m102.patch + REVERT-roll-src-third_party-ffmpeg-m106.patch + angle-wayland-include-protocol.patch) for _patch in "${_patches[@]}"; do - source+=("$_patch::https://raw.githubusercontent.com/archlinux/svntogit-packages/$_arch_revision/chromium/trunk/$_patch") + source+=("$_patch::https://raw.githubusercontent.com/archlinux/svntogit-packages/$_arch_revision/trunk/$_patch") done sha256sums=('SKIP' 'SKIP' 'SKIP' 'SKIP' - 'SKIP' - 'e4478c79e2eed500777117bb1d48f4be1866908dcda8d75003a5d055618dfdca' - 'fa6ed4341e5fc092703535b8becaa3743cb33c72f683ef450edd3ef66f70d42d' '213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a' - '22692bddaf2761c6ddf9ff0bc4722972bca4d4c5b2fd3e5dbdac7eb60d914320' - 'ea3446500d22904493f41be69e54557e984a809213df56f3cdf63178d2afb49e' - 'd3344ba39b8c6ed202334ba7f441c70d81ddf8cdb15af1aa8c16e9a3a75fbb35' - 'd53da216538f2e741a6e048ed103964a91a98e9a3c10c27fdfa34d4692fdc455' - '921010cd8fab5f30be76c68b68c9b39fac9e21f4c4133bb709879592bbdf606e' - 'dd317f85e5abfdcfc89c6f23f4c8edbcdebdd5e083dcec770e5da49ee647d150' - '1a9e074f417f8ffd78bcd6874d8e2e74a239905bf662f76a7755fa40dc476b57' - '56acb6e743d2ab1ed9f3eb01700ade02521769978d03ac43226dec94659b3ace' - '2a97b26c3d6821b15ef4ef1369905c6fa3e9c8da4877eb9af4361452a425290b' - 'e393174d7695d0bafed69e868c5fbfecf07aa6969f3b64596d0bae8b067e1711') + '2ad419439379d17385b7fd99039aca875ba36ca31b591b9cd4ccef84273be121' + 'c63c8eeac709293991418a09ac7d8c0adde10c151495876794e025bd2b0fb8fe' + '9235485adc4acbfaf303605f4428a6995a7b0b3b5a95181b185afbcb9f1f6ae5' + '8fc41a0d98b328a12b17d6b6702a65c13292332ed8a843e7f35392424e545913' + 'f4345b63200a8bcf00876fa2f6eba99c49c97af1b6253b159072fbfad8fefeef' + '754cecaf8bc6707f95265b5b0d56a3837e115f6583b6125c8e6b9ee37c4d6d8e' + '5c1e562b25d4fe614f3a77e00accc53001541b7b3f308fb7512cce1138878d7e' + '0b5764355b9201d201b1e08f700bbb5a7fa238bef127b95d36cbf8ce2afa73a6' + 'ca7f3edbf17aeca84ec595b0cedcca47fb098fa8600651dcea6b396af3af8d93' + '30a6a9ca2a6dd965cb2d9f02639079130948bf45d483f0c629f2cf8394a1c22f' + 'ea0cd714ccaa839baf7c71e9077264016aa19415600f16b77d5398fd49f5a70b' + 'b908f37c5a886e855953f69e4dd6b90baa35e79f5c74673f7425f2cdb642eb00' + '779fb13f2494209d3a7f1f23a823e59b9dded601866d3ab095937a1a04e19ac6' + '30df59a9e2d95dcb720357ec4a83d9be51e59cc5551365da4c0073e68ccdec44' + '4c12d31d020799d31355faa7d1fe2a5a807f7458e7f0c374adf55edb37032152' + 'cd0d9d2a1d6a522d47c3c0891dabe4ad72eabbebc0fe5642b9e22efa3d5ee572') # Possible replacements are listed in build/linux/unbundle/replace_gn_files.py # Keys are the names in the above script; values are the dependencies in Arch declare -gA _system_libs=( + [brotli]=brotli + [dav1d]=dav1d [ffmpeg]=ffmpeg [flac]=flac [fontconfig]=fontconfig [freetype]=freetype2 [harfbuzz-ng]=harfbuzz [icu]=icu + [jsoncpp]=jsoncpp + [libaom]=aom + #[libavif]=libavif # needs https://github.com/AOMediaCodec/libavif/commit/d22d4de94120 [libdrm]= [libjpeg]=libjpeg [libpng]=libpng @@ -120,284 +144,379 @@ declare -gA _system_libs=( [opus]=opus [re2]=re2 [snappy]=snappy + [woff2]=woff2 [zlib]=minizip ) _unwanted_bundled_libs=( - "$(printf "%s\n" ${!_system_libs[@]} | sed 's/^libjpeg$/&_turbo/')" + "$(printf "%s\n" ${!_system_libs[@]} | sed 's/^libjpeg$/&_turbo/')" ) -# Add depends if user wants a release with custom cflags and system libs -if [ "$COMPONENT" = "4" ]; then - # echo "Build with system libs is disabled for now" && exit 1 - brave_base_ver="$(echo "$pkgver" | cut -d . -f 1-2)" - brave_patchset="1" - brave_patchset_name="brave-$brave_base_ver-patches-$brave_patchset" - source+=("https://gitlab.com/hadogenes/brave-patches/-/archive/$brave_patchset_name/brave-patches-$brave_patchset_name.zip") - sha256sums+=("c63c8eeac709293991418a09ac7d8c0adde10c151495876794e025bd2b0fb8fe") - - depends+=('libpulse' 'pciutils') - depends+=("${_system_libs[@]}") - makedepends+=('lld' 'libva' 'pipewire') -else - makedepends+=('ncurses5-compat-libs') -fi - -_msg() { - printf " -> %s" "$@" -} - prepare() { - cd brave-browser - - _msg "Prepare the environment..." - npm install - patch -Np1 -i ../chromium-no-history.patch - - git submodule init - git config submodule.chromium.url "$srcdir"/chromium - git config submodule.brave-core.url "$srcdir"/brave - git config submodule.depot_tools.url "$srcdir"/depot_tools - git config submodule.adblock-rust.url "$srcdir"/adblock-rust - git submodule update - cp -rT "$srcdir"/chromium src - cp -rT "$srcdir"/brave-core src/brave - cp -r "$srcdir"/depot_tools src/brave/vendor/ - cp -rT "$srcdir"/adblock-rust src/components/adblock_rust_ffi - - # checkout pgo profiles - sed -i 's/"checkout_pgo_profiles": "%False%"/"checkout_pgo_profiles": "%True%"/g' src/brave/build/commands/lib/util.js - - _msg "Running \"npm run\"" - if [ -d src/out/Release ]; then - npm run sync -- --force - else - npm run init - fi - - _msg "Apply Chromium patches..." - cd src/ - - # https://crbug.com/893950 - sed -i -e 's/\<xmlMalloc\>/malloc/' -e 's/\<xmlFree\>/free/' \ - third_party/blink/renderer/core/xml/*.cc \ - third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \ - third_party/libxml/chromium/*.cc - - # Use the --oauth2-client-id= and --oauth2-client-secret= switches for - # setting GOOGLE_DEFAULT_CLIENT_ID and GOOGLE_DEFAULT_CLIENT_SECRET at - # runtime -- this allows signing into Chromium without baked-in values - patch -Np1 -i ../../use-oauth2-client-switches-as-default.patch - - # Fix build with older ffmpeg - patch -Np1 -i ../chromium-93-ffmpeg-4.4.patch - - # Revert change to custom function av_stream_get_first_dts; will need to - # switch to bundled ffmpeg when we're no longer using ffmpeg 4.4 in Arch - # Upstream commit that made first_dts internal causing Chromium to add a - # custom function: https://github.com/FFmpeg/FFmpeg/commit/591b88e6787c4 - # https://crbug.com/1251779 - patch -Rp1 -i ../chromium-94-ffmpeg-roll.patch - - # https://crbug.com/1207478 - patch -Np0 -i ../../unexpire-accelerated-video-decode-flag.patch - - # Revert transition to -fsanitize-ignorelist (needs newer clang) - patch -Rp1 -i ../../replace-blacklist-with-ignorelist.patch - - # Revert addition of -ffile-compilation-dir= (needs newer clang) - patch -Rp1 -i ../../add-a-TODO-about-a-missing-pnacl-flag.patch - patch -Rp1 -i ../../use-ffile-compilation-dir.patch - - # https://chromium-review.googlesource.com/c/chromium/src/+/2862724 - patch -Np1 -i ../../sql-make-VirtualCursor-standard-layout-type.patch - - # Fixes for building with libstdc++ instead of libc++ - patch -Np1 -i ../patches/chromium-90-ruy-include.patch - patch -Np1 -i ../patches/chromium-94-CustomSpaces-include.patch - - # Link to system tools required by the build - mkdir -p third_party/node/linux/node-linux-x64/bin - ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/ - ln -s /usr/bin/java third_party/jdk/current/bin/ - - - # Hacky patching - sed -e 's/enable_distro_version_check = true/enable_distro_version_check = false/g' -i chrome/installer/linux/BUILD.gn - - # don't overwrite makepkg.conf RUSTFLAGS - sed -i 's/= args.rust_flags/+= args.rust_flags/g' brave/script/cargo.py - - if [ "$COMPONENT" = "4" ]; then - _msg "Add patches for custom build" - - # Allow building against system libraries in official builds - sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \ - tools/generate_shim_headers/generate_shim_headers.py - - # 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 "${_unwanted_bundled_libs[@]}"; 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[@]}" - fi + cd chromium-launcher-$_launcher_ver + patch -Np1 -i ../chromium-launcher-electron-app.patch + + cd ../brave-browser + + export DEPOT_TOOLS_UPDATE=0 + export PATH="${PATH}:${srcdir:?}/depot_tools" + + echo "Prepare the environment..." + npm install + + cp -r ../brave src + cp -r ../depot_tools src/brave/vendor + + cd src/brave || exit + + if [ "$COMPONENT" = "4" ]; then + patch -Np1 -i "${srcdir}/system-rust-utils.patch" + fi + + jq ".config.projects.chrome.repository.url = \"file://${srcdir}/chromium@${_chromium_ver}\"" package.json > tmp.json + mv {tmp,package}.json + + npm install + + cd ../.. + + echo "Running \"npm run\"" + if [ -d src/out/Release ]; then + npm run sync -- --force --nohooks + else + npm run init -- --nohooks + fi + + echo "Running hooks..." + # python "${srcdir}/depot_tools/gclient.py" runhooks + src/build/landmines.py + src/build/util/lastchange.py -o src/build/util/LASTCHANGE + src/build/util/lastchange.py -m GPU_LISTS_VERSION \ + --revision-id-only --header src/gpu/config/gpu_lists_version.h + src/build/util/lastchange.py -m SKIA_COMMIT_HASH \ + -s src/third_party/skia --header src/skia/ext/skia_commit_hash.h + src/build/util/lastchange.py -s src/third_party/dawn \ + --revision src/gpu/webgpu/DAWN_VERSION + # Create sysmlink to system clang-format + ln -sf /usr/bin/clang-format src/buildtools/linux64 + # Create sysmlink to system Node.js + mkdir -p src/third_party/node/linux/node-linux-x64/bin + ln -sf /usr/bin/node src/third_party/node/linux/node-linux-x64/bin + src/third_party/depot_tools/download_from_google_storage.py \ + --no_resume --extract --no_auth --bucket chromium-nodejs \ + -s src/third_party/node/node_modules.tar.gz.sha1 + python src/tools/download_optimization_profile.py \ + --newest_state=src/chrome/android/profiles/newest.txt \ + --local_state=src/chrome/android/profiles/local.txt \ + --output_name=src/chrome/android/profiles/afdo.prof \ + --gs_url_base=chromeos-prebuilt/afdo-job/llvm + # ln -s /usr/bin/java third_party/jdk/current/bin + + # Brave specific hooks + cd src/brave + # python script/bootstrap.py + echo > vendor/depot_tools/python3_bin_reldir.txt + ln -sf /usr/bin/python vendor/depot_tools/python3 + npm install --no-save --yes + python script/web_discovery_project.py --install + python script/generate_licenses.py + cd ../.. + + echo "Apply Chromium patches..." + cd src + + # https://crbug.com/893950 + sed -i -e 's/\<xmlMalloc\>/malloc/' -e 's/\<xmlFree\>/free/' \ + third_party/blink/renderer/core/xml/*.cc \ + third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \ + third_party/libxml/chromium/*.cc \ + third_party/maldoca/src/maldoca/ole/oss_utils.h + + # Upstream fixes + patch -Np1 -i "${srcdir}/unbundle-jsoncpp-avoid-CFI-faults-with-is_cfi-true.patch" + + # Revert kGlobalMediaControlsCastStartStop enabled by default + # https://crbug.com/1314342 + patch -Rp1 -F3 -i "${srcdir}/REVERT-enable-GlobalMediaControlsCastStartStop.patch" + + # Revert ffmpeg roll requiring new channel layout API support + # https://crbug.com/1325301 + patch -Rp1 -i "${srcdir}/REVERT-roll-src-third_party-ffmpeg-m102.patch" + # Revert switch from AVFrame::pkt_duration to AVFrame::duration + patch -Rp1 -i "${srcdir}/REVERT-roll-src-third_party-ffmpeg-m106.patch" + + # https://crbug.com/angleproject/7582 + patch -Np0 -i "${srcdir}/angle-wayland-include-protocol.patch" + + # Fixes for building with libstdc++ instead of libc++ + patch -Np1 -i "${srcdir}/patches/chromium-103-VirtualCursor-std-layout.patch" + patch -Np1 -i "${srcdir}/patches/chromium-105-compiler.patch" + patch -Np1 -i "${srcdir}/patches/chromium-106-AutofillPopupControllerImpl-namespace.patch" + + # Sysroot usage in autocxx for Rust + patch -Np1 -i "${srcdir}/rust-autocxx-use_sysroot.patch" + + # Hacky patching + sed -e 's/\(enable_distro_version_check =\) true/\1 false/g' -i chrome/installer/linux/BUILD.gn + + # Allow building against system libraries in official builds + if [ "$COMPONENT" = "4" ]; then + sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \ + tools/generate_shim_headers/generate_shim_headers.py + + echo "Add patches for custom build" + rm "$srcdir/brave-patches-$_brave_patchset_name"/brave-*logging*.patch + rm "$srcdir/brave-patches-$_brave_patchset_name"/brave-*ads-dismissed*.patch + rm "$srcdir/brave-patches-$_brave_patchset_name"/brave-*ads-hash*.patch + rm "$srcdir/brave-patches-$_brave_patchset_name"/brave-*ads-vector*.patch + rm "$srcdir/brave-patches-$_brave_patchset_name"/brave-*ads-ad*.patch + rm "$srcdir/brave-patches-$_brave_patchset_name"/brave-*ads-eligible*.patch + rm "$srcdir/brave-patches-$_brave_patchset_name"/brave-*bitcoin*.patch + for _patch in "$srcdir/brave-patches-$_brave_patchset_name"/*.patch; do + patch -Np1 -i "$_patch" + done + for _patch in "$srcdir/brave"*.patch; do + patch -Np1 -i "$_patch" + done + + # 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 and + # preserving their git directories + local _lib + for _lib in ${_unwanted_bundled_libs[@]}; 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 '.*\.\(git.*\|gn\|gni\|isolate\)' \ + -delete + done + + ./build/linux/unbundle/replace_gn_files.py \ + --system-libraries "${!_system_libs[@]}" + fi } build() { - cd "brave-browser" - - if check_buildoption ccache y; then - # Avoid falling back to preprocessor mode when sources contain time macros - export CCACHE_SLOPPINESS=time_macros - fi - - export CC=clang - export CXX=clang++ - export AR=llvm-ar - export NM=llvm-nm - - if [ "$USE_SCCACHE" -eq "1" ]; then - echo "sccache = /usr/bin/sccache" >> .npmrc - fi - - echo 'brave_variations_server_url = https://variations.brave.com/seed' >> .npmrc - echo 'brave_stats_updater_url = https://laptop-updates.brave.com' >> .npmrc - echo 'brave_stats_api_key = fe033168-0ff8-4af6-9a7f-95e2cbfc' >> .npmrc - echo 'brave_sync_endpoint = https://sync-v2.brave.com/v2' >> .npmrc - echo "uphold_client_id = 6d8d9473ed20be627f71ed46e207f40c004c5b1a" >> .npmrc - echo "uphold_client_secret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" >> .npmrc - echo "uphold_staging_client_id = 4c2b665ca060d912fec5c735c734859a06118cc8" >> .npmrc - echo "uphold_staging_client_secret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" >> .npmrc - echo "gemini_api_url = https://api.gemini.com/v1" >> .npmrc - echo "gemini_oauth_url = https://api.gemini.com/v1/oauth" >> .npmrc - echo "gemini_wallet_client_id = 6d8d9473ed20be627f71ed46e207f40c004c5b1a" >> .npmrc - echo "gemini_wallet_client_secret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" >> .npmrc - - npm_args=() - if [ "$COMPONENT" = "4" ]; then - local _flags=( - 'custom_toolchain="//build/toolchain/linux/unbundle:default"' - 'host_toolchain="//build/toolchain/linux/unbundle:default"' - 'clang_use_chrome_plugins=false' - 'is_official_build=true' # implies is_cfi=true on x86_64 - 'treat_warnings_as_errors=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_gnome_keyring=false' - 'use_sysroot=false' - 'use_custom_libcxx=false' - 'enable_hangout_services_extension=true' - 'enable_widevine=true' - 'enable_nacl=false' - 'target_sysroot=/' - 'use_vaapi=true' - 'is_clang=true' - 'use_lld=true' - 'chrome_pgo_phase=2' - ) - - if [[ -n ${_system_libs[icu]+set} ]]; then - _flags+=('icu_use_data_file=false') - fi - - if check_option strip y; then - _flags+=('symbol_level=0' - 'blink_symbol_level=0') - fi - - # Filter known bad flags - CFLAGS=${CFLAGS/Ofast/O3} - CXXFLAGS=${CXXFLAGS/Ofast/O3} - - # Facilitate deterministic builds (taken from build/config/compiler/BUILD.gn) - CFLAGS+=' -Wno-builtin-macro-redefined' - CXXFLAGS+=' -Wno-builtin-macro-redefined' - CPPFLAGS+=' -D__DATE__= -D__TIME__= -D__TIMESTAMP__=' - - # Do not warn about unknown warning options - CFLAGS+=' -Wno-unknown-warning-option' - CXXFLAGS+=' -Wno-unknown-warning-option' - - npm_args+=( - "$(echo "${_flags[@]}" | tr ' ' '\n' | sed -e 's/=/:/' -e 's/^/--gn=/')" - ) - fi - - ## See explanation on top to select your build - case $COMPONENT in - 0) - _msg "Normal build (with debug)" - npm run build - ;; - 2) - _msg "Static build" - npm run build -- Static - ;; - 3) - _msg "Debug build" - npm run build -- Debug - ;; - 4) - _msg "Release custom build" - npm run build Release -- "${npm_args[@]}" - ;; - 1|*) - _msg "Release build" - npm run build Release - ;; - esac + make CHROMIUM_APP=Brave CHROMIUM_NAME=brave -C chromium-launcher-$_launcher_ver + + cd "brave-browser" + + if check_buildoption ccache y; then + # Avoid falling back to preprocessor mode when sources contain time macros + export CCACHE_SLOPPINESS=time_macros + fi + + export PATH="${PATH}:${srcdir:?}/brave-browser/src/brave/vendor/depot_tools" + + export CC=clang + export CXX=clang++ + export AR=llvm-ar + export NM=llvm-nm + + if [ "$USE_SCCACHE" -eq "1" ]; then + echo "sccache = /usr/bin/sccache" >> .npmrc + fi + + echo "brave_services_key = qjVKcxtUybh8WpKNoQ7EbgbkJTMu7omjDHKk=VrPApb8PwJyPE9eqchxedTsMEWg" > .npmrc + echo "brave_variations_server_url = https://variations.brave.com/seed" >> .npmrc + echo "brave_stats_updater_url = https://laptop-updates.brave.com" >> .npmrc + echo "brave_stats_api_key = fe033168-0ff8-4af6-9a7f-95e2cbfc" >> .npmrc + echo "brave_sync_endpoint = https://sync-v2.brave.com/v2" >> .npmrc + echo "updater_dev_endpoint = https://go-updater-dev.bravesoftware.com/extensions" >> .npmrc + echo "updater_prod_endpoint = https://go-updater.brave.com/extensions" >> .npmrc + echo "rewards_grant_dev_endpoint = https://grant.rewards.brave.com" >> .npmrc + echo "rewards_grant_staging_endpoint = https://grant.rewards.brave.com" >> .npmrc + echo "rewards_grant_prod_endpoint = https://grant.rewards.brave.com" >> .npmrc + echo "uphold_client_id = 6d8d9473ed20be627f71ed46e207f40c004c5b1a" >> .npmrc + echo "uphold_client_secret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" >> .npmrc + echo "uphold_staging_client_id = 4c2b665ca060d912fec5c735c734859a06118cc8" >> .npmrc + echo "uphold_staging_client_secret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" >> .npmrc + echo "gemini_api_url = https://api.gemini.com/v1" >> .npmrc + echo "gemini_oauth_url = https://api.gemini.com/v1/oauth" >> .npmrc + echo "gemini_wallet_client_id = 6d8d9473ed20be627f71ed46e207f40c004c5b1a" >> .npmrc + echo "gemini_wallet_client_secret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" >> .npmrc + echo "sardine_client_id = 7ca8433c-7e61-4e25-b76e-25aa2da68df1" >> .npmrc + echo "sardine_client_secret = 7ca8433c-7e61-4e25-b76e-25aa2da68df1" >> .npmrc + + npm_args=() + if [ "$COMPONENT" = "4" ]; then + local _flags=( + 'custom_toolchain="//build/toolchain/linux/unbundle:default"' + 'host_toolchain="//build/toolchain/linux/unbundle:default"' + 'clang_base_path="/usr"' + 'clang_use_chrome_plugins=false' + 'symbol_level=0' # sufficient for backtraces on x86(_64) + 'chrome_pgo_phase=0' # needs newer clang to read the bundled PGO profile + 'treat_warnings_as_errors=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_gnome_keyring=false' + 'use_sysroot=false' + 'use_custom_libcxx=false' + 'enable_hangout_services_extension=true' + 'enable_widevine=true' + 'enable_nacl=false' + 'use_vaapi=true' + ) + _flags+=("rustup_path=\"$HOME/.rustup\"" "cargo_path=\"$HOME/.cargo\"") + + if [[ -n ${_system_libs[icu]+set} ]]; then + _flags+=('icu_use_data_file=false') + fi + + # This specific tool requires to be built outside of an official build + echo "${_flags[@]}" | tr ' ' '\n' >> src/brave/tools/redirect_cc/args.gni + + _flags+=('is_official_build=true') # implies is_cfi=true on x86_64 + + # Facilitate deterministic builds (taken from build/config/compiler/BUILD.gn) + CFLAGS+=' -Wno-builtin-macro-redefined' + CXXFLAGS+=' -Wno-builtin-macro-redefined' + CPPFLAGS+=' -D__DATE__= -D__TIME__= -D__TIMESTAMP__=' + + # Do not warn about unknown warning options + CFLAGS+=' -Wno-unknown-warning-option' + CXXFLAGS+=' -Wno-unknown-warning-option' + + npm_args+=( + $(echo "${_flags[@]}" | tr ' ' '\n' | sed -e 's/=/:/' -e 's/^/--gn=/') + ) + fi + + # Let Chromium set its own symbol level + CFLAGS=${CFLAGS/-g } + CXXFLAGS=${CXXFLAGS/-g } + + # https://github.com/ungoogled-software/ungoogled-chromium-archlinux/issues/123 + CFLAGS=${CFLAGS/-fexceptions} + CFLAGS=${CFLAGS/-fcf-protection} + CXXFLAGS=${CXXFLAGS/-fexceptions} + CXXFLAGS=${CXXFLAGS/-fcf-protection} + + # This appears to cause random segfaults when combined with ThinLTO + # https://bugs.archlinux.org/task/73518 + CFLAGS=${CFLAGS/-fstack-clash-protection} + CXXFLAGS=${CXXFLAGS/-fstack-clash-protection} + + # https://crbug.com/957519#c122 + CXXFLAGS=${CXXFLAGS/-Wp,-D_GLIBCXX_ASSERTIONS} + + ## See explanation on top to select your build + case $COMPONENT in + 0) + echo "Normal build (with debug)" + npm run build + npm run build -- --target chrome_sandbox + npm run build -- --target chromedriver.unstripped + ;; + 2) + echo "Static build" + npm run build Static + npm run build Static -- --target chrome_sandbox + npm run build Static -- --target chromedriver.unstripped + ;; + 3) + echo "Debug build" + npm run build Debug + npm run build Debug -- --target chrome_sandbox + npm run build Debug -- --target chromedriver.unstripped + ;; + 4) + echo "Release custom build" + npm run build Release -- "${npm_args[@]}" + npm run build Release -- --target chrome_sandbox "${npm_args[@]}" + npm run build Release -- --target chromedriver.unstripped "${npm_args[@]}" + ;; + 1|*) + echo "Release build" + npm run build Release + npm run build Release -- --target chrome_sandbox + npm run build Release -- --target chromedriver.unstripped + ;; + esac } package() { - install -d -m0755 "$pkgdir/usr/lib/$pkgname/"{,swiftshader,locales,resources} - - # Copy necessary release files - cd "brave-browser/src/out/Release" - cp -a --reflink=auto \ - MEIPreload \ - brave \ - brave_*.pak \ - chrome_*.pak \ - resources.pak \ - v8_context_snapshot.bin \ - libGLESv2.so \ - libEGL.so \ - chrome_crashpad_handler \ - "$pkgdir/usr/lib/$pkgname/" - cp -a --reflink=auto \ - swiftshader/libGLESv2.so \ - swiftshader/libEGL.so \ - "$pkgdir/usr/lib/$pkgname/swiftshader/" - cp -a --reflink=auto \ - locales/*.pak \ - "$pkgdir/usr/lib/$pkgname/locales/" - cp -a --reflink=auto \ - resources/brave_extension \ - resources/brave_rewards \ - "$pkgdir/usr/lib/$pkgname/resources/" - - if [ "$COMPONENT" != "4" ] || [[ -z ${_system_libs[icu]+set} ]]; then - cp -a --reflink=auto \ - icudtl.dat \ - "$pkgdir/usr/lib/$pkgname/" - fi - - cd "$srcdir" - install -Dm0755 brave-launcher "$pkgdir/usr/bin/$pkgname" - install -Dm0644 -t "$pkgdir/usr/share/applications/" brave-browser.desktop - install -Dm0644 "brave-browser/src/brave/app/theme/brave/product_logo_128.png" "$pkgdir/usr/share/pixmaps/$pkgname.png" - install -Dm0644 -t "$pkgdir/usr/share/licenses/$pkgname" "brave-browser/LICENSE" + cd chromium-launcher-$_launcher_ver + make PREFIX=/usr DESTDIR="$pkgdir" CHROMIUM_NAME=brave install + + install -Dm644 LICENSE \ + "$pkgdir/usr/share/licenses/$pkgname/LICENSE.launcher" + + install -d -m0755 "$pkgdir/usr/lib/$pkgname/"{,locales,resources} + + # Copy necessary release files + cd ../brave-browser/src + + install -Dm755 out/Release/$pkgname "$pkgdir/usr/lib/$pkgname/$pkgname" + install -Dm755 out/Release/chromedriver.unstripped "$pkgdir/usr/bin/bravedriver" + install -Dm4755 out/Release/chrome_sandbox "$pkgdir/usr/lib/$pkgname/chrome-sandbox" + ln -s $pkgname "$pkgdir/usr/bin/$pkgname-browser" + ln -s $pkgname "$pkgdir/usr/lib/$pkgname/$pkgname-browser" + + install -Dm644 chrome/installer/linux/common/desktop.template \ + "$pkgdir/usr/share/applications/$pkgname-browser.desktop" + sed -i \ + -e 's/@@MENUNAME@@/Brave/g' \ + -e 's/@@PACKAGE@@/brave/g' \ + -e 's/@@USR_BIN_SYMLINK_NAME@@/brave/g' \ + "$pkgdir/usr/share/applications/$pkgname-browser.desktop" + + install -Dm644 chrome/installer/linux/common/chromium-browser/chromium-browser.appdata.xml \ + "$pkgdir/usr/share/metainfo/$pkgname-browser.appdata.xml" + sed -ni \ + -e 's/chromium-browser\.desktop/brave-browser.desktop/' \ + -e '/<update_contact>/d' \ + -e '/<p>/N;/<p>\n.*\(We invite\|Chromium supports Vorbis\)/,/<\/p>/d' \ + -e '/^<?xml/,$p' \ + "$pkgdir/usr/share/metainfo/$pkgname-browser.appdata.xml" + + local toplevel_files=( + brave_100_percent.pak + brave_200_percent.pak + brave_resources.pak + + # Chromium + chrome_100_percent.pak + chrome_200_percent.pak + chrome_crashpad_handler + resources.pak + v8_context_snapshot.bin + + # ANGLE + libEGL.so + libGLESv2.so + + # SwiftShader ICD + libvk_swiftshader.so + vk_swiftshader_icd.json + ) + + if [[ -z ${_system_libs[icu]+set} ]]; then + toplevel_files+=(icudtl.dat) + fi + + cp "${toplevel_files[@]/#/out/Release/}" "$pkgdir/usr/lib/$pkgname/" + install -Dm644 -t "$pkgdir/usr/lib/$pkgname/locales" out/Release/locales/*.pak + install -Dm644 -t "$pkgdir/usr/lib/$pkgname/MEIPreload" out/Release/MEIPreload/*.* + + cp -r out/Release/resources/brave_* "$pkgdir/usr/lib/$pkgname/resources/" + + for size in 24 48 64 128 256; do + install -Dm644 "chrome/app/theme/chromium/product_logo_$size.png" \ + "$pkgdir/usr/share/icons/hicolor/${size}x${size}/apps/$pkgname.png" + done + + for size in 16 32; do + install -Dm644 "chrome/app/theme/default_100_percent/chromium/product_logo_$size.png" \ + "$pkgdir/usr/share/icons/hicolor/${size}x${size}/apps/$pkgname.png" + done + + install -Dm0644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE.chromium" + install -Dm0644 brave/LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" } |