# Maintainer: jc_gargma # Maintainer (Arch): Jan Alexander Steffens (heftig) # Contributor: Aqua-sama # Contributor (Arch): Ionut Biru # Contributor (Arch): Jakub Schmidtke # # I maintain this because: # Arch version uses eme # Arch version uses git # Arch version uses python2 # Arch version uses clang # Arch version requires signed addons # Arch version doesn't remove system addons # Arch version enables debug symbols # Arch version lacks privacy and security by default _modclang=1 _modpgo=0 pkgname=firefox pkgver=93.0 pkgrel=1 pkgdesc="Standalone web browser from mozilla.org" arch=(x86_64 aarch64) license=(MPL GPL LGPL) url="https://www.mozilla.org/firefox/" depends=(gtk3 libxt mime-types dbus-glib ffmpeg ttf-font libpulse alsa-lib bzip2 libffi icu libjpeg-turbo libevent libvpx nspr nss pixman libpng sqlite libwebp zlib) makedepends=(unzip zip diffutils yasm mesa imake inetutils xorg-server-xvfb autoconf2.13 rust clang llvm jack nodejs cbindgen nasm python-setuptools python-psutil python-zstandard lld dump_syms) optdepends=('networkmanager: Location detection via available WiFi networks' 'libnotify: Notification integration' 'alsa-utils: ALSA support' 'jack: Jack support' 'pulseaudio: PulseAudio support' 'speech-dispatcher: Text-to-Speech' 'hunspell-en_CA: Spell checking, Canadian English' 'xdg-desktop-portal: Screensharing with Wayland' 'firefox-preferences: Custom vendor.js with security by default' 'firefox-preferences-basic: Custom vendor.js with less breaking changes') options=(!emptydirs !makeflags) conflicts=(firefox-esr) source=( "https://archive.mozilla.org/pub/$pkgname/releases/$pkgver/source/$pkgname-$pkgver.source.tar.xz"{,.asc} 0001-Use-remoting-name-for-GDK-application-names.patch $pkgname.desktop identity-icons-brand.svg distribution.ini mozconfig.in.gcc mozconfig.in.clang mozconfig.common.override arc4_enable-lto-for-gcc.patch firefox-gcc-build.patch arc4_enable-pgo-for-gcc.patch pgo.patch arc4_remove-health-reporting.patch arc4_remove-system-addons.patch ) b2sums=('f4315a81ea5709fbf622ea39a4b259e44e8bafad95468d3f41fa8413dd1d5d92e260f549aacafe8b6af04f0c036fb9d59fe8531f0e2fa8de5dffcc403b33f2e1' 'SKIP' 'cfd09442eb344fb80b2233da86a101082926b9942849d988d0e43cac4cb6c15690dc8eae42514e114260b712c206cacd81f773e401cf8f861ee4b805fb872643' 'e18f2c22e394ca3b6758bc130245b254947e4d15921be3da443d6d7c3c4b0d22ead1b39fbc10a4f896edd19e2a1dffbd1cbb34dc4beb0621a6ddb70ccc53b3a7' '63a8dd9d8910f9efb353bed452d8b4b2a2da435857ccee083fc0c557f8c4c1339ca593b463db320f70387a1b63f1a79e709e9d12c69520993e26d85a3d742e34' '877eda442eb4730600dccf209a6e961ad3122ab456bbfda4ff041e8493ebaaf96224ac218360931259ff4214482f6bf65b3a3052f977ade1a274f38ffd859535' 'b75aa686d66fe5fe1aec0c40878183e5a367b429daddc697d9c30183ee4666d8f72bb753f5cdb4c2fd167a288358e99a8eeb7ca78149625462902180d751ab65' '46db9cd9c902370b174bd919d8aff4f4e37b03b4d9f91ba251eaa651abce5ad2c04f5a86d2950601c61653ef37fe84d04ad205a42f9a38211c7640c0b122717c' '1c7ac58af8b817067c7d79ffef8d9100f513d77f4fc1a2bce2684ff8d8d3cbc3d37b31865c7e5d873fd71d4649374bbd25ca08166d8afb25ffbd597759655063' '3b76cfb76a3e527d4c77d61a127606aef0b46826d7a0f7866164e0b490098714cc11429002fc35ac32b75ffbc61f76596a5e984aea37f8876bcd939030bcfa21' '69624493c96e98caecf5286ed77946f104feff9b61679bcc842f6d989a2b4b28acce47324f805925f55170935a37a0bc10c596b82b41391f9f8ef342c09a3d0e' '1250b2d4a713b241d9768dc386ecf9130d295587efd5070c2e494185436ca9d99a465b97ed80fe23ab14d6d07ecde8537a3a3d11ba843c4e3791b4df52e08f27' '87dd810443be6acf41dad2cbdf8b14ba6ae68d55364e80560e96200e1acb866858068234088bae261c26e65e171b49d4f530ee4098f41e5c8cf855d1f2fe0e12' '1dce1277c0c8b83089551057ed61c8794aa65242d0c19573dab96081f00b1042af73fbc0a40ba49dfa31eff46f4636ffd985cf8e6bd28db614a639ca6c11c74e' '379adf3726664668f6167eaeab35dec40342d9288ff081d22a8363f163ab0945b17ce69e7d4276a31e99e56f690afa070c410c51a5060ed835356fd216256e7b') validpgpkeys=('14F26682D0916CDD81E37B6D61B7B526D98F0353') # Mozilla Software Releases prepare() { mkdir mozbuild cd ${pkgname}-${pkgver} # https://bugzilla.mozilla.org/show_bug.cgi?id=1530052 patch -Np1 -i ../0001-Use-remoting-name-for-GDK-application-names.patch if [ "${_modclang}" == "0" ]; then # Apply gcc lto patches patch -Np1 -i ../arc4_enable-lto-for-gcc.patch patch -Np1 -i ../firefox-gcc-build.patch fi if [ "${_modclang}" == "0" ] && [ "${_modpgo}" == "1" ]; then # Apply gcc pgo patches patch -Np1 -i ../arc4_enable-pgo-for-gcc.patch patch -Np1 -i ../pgo.patch fi if [ "${_modclang}" == "1" ] && [ "${_modpgo}" == "1" ]; then # Add the custom mozconfig for clang pgo cp $srcdir/mozconfig.in.clang $srcdir/${pkgname}-${pkgver}/.mozconfig cat >$srcdir/${pkgname}-${pkgver}/.mozconfig - <$srcdir/${pkgname}-${pkgver}/.mozconfig - <$srcdir/${pkgname}-${pkgver}/.mozconfig - <> browser/themes/shared/incontentprefs/preferences.inc.css # Hide plugindeprecation-notice echo "#plugindeprecation-notice { display: none !important; }" >> toolkit/mozapps/extensions/content/extensions.css # Hide warnings on unsigned extensions echo ".warning{display: none!important; } .addon[notification=warning]{background-image: none!important;}" >> toolkit/mozapps/extensions/content/extensions.css } build() { cd ${pkgname}-${pkgver} export MOZ_NOSPAM=1 export MOZBUILD_STATE_PATH="$srcdir/mozbuild" export MACH_USE_SYSTEM_PYTHON=1 # firefox is prone to OOM, use 1 thread per 2GB ram #export MOZ_MAKE_FLAGS="${MAKEFLAGS}" export MOZ_MAKE_FLAGS="-j16" # -flto breaks cargo # -fPIE and -pie break compiling export CFLAGS="$CFLAGS -O3 -fstack-protector-all -fPIC" export CXXFLAGS="$CXXFLAGS -O3 -fstack-protector-all -fPIC" # LTO needs more open files ulimit -n 4096 if [ "${_modclang}" == "1" ] && [ "${_modclangpgo}" == "1" ]; then # clang does not support -fstack-clash-protection, so remove it #export CFLAGS="$(echo $CFLAGS | sed 's/ -fstack-clash-protection//' - )" #export CXXFLAGS="$(echo $CXXFLAGS | sed 's/ -fstack-clash-protection//' - )" # Do 3-tier PGO echo "Building instrumented browser..." ./mach build echo "Profiling instrumented browser..." ./mach package LLVM_PROFDATA=llvm-profdata \ JARLOG_FILE="$PWD/jarlog" \ xvfb-run -s "-screen 0 1920x1080x24 -nolisten local" \ ./mach python build/pgo/profileserver.py stat -c "Profile data found (%s bytes)" merged.profdata test -s merged.profdata stat -c "Jar log found (%s bytes)" jarlog test -s jarlog echo "Removing instrumented browser..." ./mach clobber echo "Building optimized browser..." # Add the custom mozconfig cp $srcdir/mozconfig.in.clang $srcdir/${pkgname}-${pkgver}/.mozconfig cat >$srcdir/${pkgname}-${pkgver}/.mozconfig - <.mozconfig - <