summaryrefslogtreecommitdiff
path: root/PKGBUILD
diff options
context:
space:
mode:
Diffstat (limited to 'PKGBUILD')
-rw-r--r--PKGBUILD150
1 files changed, 111 insertions, 39 deletions
diff --git a/PKGBUILD b/PKGBUILD
index f85f244..77aa819 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -15,23 +15,23 @@
# Arch version enables debug symbols
# Arch version lacks privacy and security by default
-_modclang=0
-#_modclang=1 # FIXME
+_modclang=1
+_modpgo=0
_pkgname=firefox
pkgname=${_pkgname}-esr
-pkgver=78.15.0
+pkgver=91.3.0
_pkgver=${pkgver}esr
pkgrel=1
pkgdesc="Standalone web browser from mozilla.org"
arch=(x86_64 aarch64)
license=(MPL GPL LGPL)
url="https://www.mozilla.org/firefox/"
-depends=(gtk2 gtk3 libxt mime-types dbus-glib ffmpeg ttf-font libpulse alsa-lib
+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)
+ python-setuptools python-psutil python-zstandard lld dump_syms)
optdepends=('networkmanager: Location detection via available WiFi networks'
'libnotify: Notification integration'
'alsa-utils: ALSA support'
@@ -39,6 +39,7 @@ optdepends=('networkmanager: Location detection via available WiFi networks'
'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)
@@ -48,47 +49,74 @@ 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
+ #mozconfig.in.gcc
mozconfig.in.clang
- mozconfig.in.clang.pgo
mozconfig.common.override
- arc4_enable-pgo-for-gcc.patch
+ #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=('dc8785613c2f72c55d484642c89c2545765a9efbd609bc7c2cf57b4a3a06a2ea22e6959e42b5b8af867db782e8b2097a67dec858796b744e47008a8e575e2316'
+b2sums=('316ac4c7e673eb1db88da9e7c1ea7eea6c3f6b6ca4d4066100c165512e52374c84f637aed1fd5037b126ce2cf51945a5a6276a4974f557ed1da7ffe1674135f2'
'SKIP'
- 'e4cf5d0ddd2c7271f1723b5c313f0aa8a7bf2242fb301ceba1ab5a4dca655ca7b9461d0aaebe5eaccf84b2f7a4c4199cbb0c18eab2bdaff273fcb730ec27219e'
+ 'cfd09442eb344fb80b2233da86a101082926b9942849d988d0e43cac4cb6c15690dc8eae42514e114260b712c206cacd81f773e401cf8f861ee4b805fb872643'
'1c3af4cc5199cf7b9f3aad9ceab98b3e8a3dc0d38f50896ed2f32ac648f1e904a1cdda5da559964885989edbfab4c4bf65448e9a0f71d946c77ec0ab5a6aff4c'
+ '63a8dd9d8910f9efb353bed452d8b4b2a2da435857ccee083fc0c557f8c4c1339ca593b463db320f70387a1b63f1a79e709e9d12c69520993e26d85a3d742e34'
'877eda442eb4730600dccf209a6e961ad3122ab456bbfda4ff041e8493ebaaf96224ac218360931259ff4214482f6bf65b3a3052f977ade1a274f38ffd859535'
- '157b457814a0ca7e2bb0405efdbc7ddb00c8b28e994483f48be3bc69f35aa51030496f774d32179a9fcad04a94712cf40449cc5e2584ccdbe769ba2553b43f80'
- '471d01a9d0914d8c1b62cd5ebe5c6ee319a28f3bc629b415bb39edaa280383919e09967ecaa3fdeab7bbce12ccba4e0440bf18474f538addc528672cee618e3a'
- 'bd967166ec95f134114d26de85559c8e4a0d18a40ea63d1fc045897198274ed6e523bb320632395e9b5277eb122c49e41d989413a3a019f8a868f7ab7743dc0d'
+ '645e9438585624c5ae20cd5fd8e59c912734ea6e5bbfb33ddeb226f3b88e1b443c334684b0445b748f6cbe64506acf8710f265b87efa6bfc2f0aa5623680aed0'
'1c7ac58af8b817067c7d79ffef8d9100f513d77f4fc1a2bce2684ff8d8d3cbc3d37b31865c7e5d873fd71d4649374bbd25ca08166d8afb25ffbd597759655063'
- '087ea758132905cab848e3a13a13537b42f70ba3a8bfd1ef4e2933d3e874e94038b50ee583b9e7e0c7b7cc7c2cf570f7f613b661f47121b7bf207f433b939f3d'
- '020695637162ce981929f54ea556100bf17e92931179a5849ca8265dfc0016f1b6599d9f77e9f71f192a1a4bb3b2d1eadbf5d5554e6c33bfa3f9388b0a3c7c6e'
- '635a84c64ea9dccf41fbde33b58a72a8123ecd841995ad045bd329e23855f56ffce05670fe2d69a12c4cef7a7399bc6becfc5f40bfd8cea9a4006074672a634d')
+ '87dd810443be6acf41dad2cbdf8b14ba6ae68d55364e80560e96200e1acb866858068234088bae261c26e65e171b49d4f530ee4098f41e5c8cf855d1f2fe0e12'
+ '1dce1277c0c8b83089551057ed61c8794aa65242d0c19573dab96081f00b1042af73fbc0a40ba49dfa31eff46f4636ffd985cf8e6bd28db614a639ca6c11c74e'
+ '379adf3726664668f6167eaeab35dec40342d9288ff081d22a8363f163ab0945b17ce69e7d4276a31e99e56f690afa070c410c51a5060ed835356fd216256e7b')
validpgpkeys=('14F26682D0916CDD81E37B6D61B7B526D98F0353') # Mozilla Software Releases
prepare() {
-# mkdir mozbuild
+ 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}" != "1" ]; then
+
+ 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 -p0 $srcdir/${_pkgname}-${pkgver}/security/sandbox/linux/moz.build $srcdir/arc4_enable-pgo-for-gcc.patch
+ patch -Np1 -i ../arc4_enable-pgo-for-gcc.patch
+ patch -Np1 -i ../pgo.patch
fi
- if [ "${_modclang}" == "1" ]; then
- # Add the custom mozconfig for pgo
- cp $srcdir/mozconfig.in.clang.pgo $srcdir/${_pkgname}-${pkgver}/.mozconfig
+ 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 - <<END
+mk_add_options MOZ_OBJDIR=${PWD@Q}/obj
+ac_add_options --enable-profile-generate=cross
+END
+ elif [ "${_modclang}" == "1" ] && [ "${_modpgo}" == "0" ]; then
+ # Add the custom mozconfig for clang
+ cp $srcdir/mozconfig.in.clang $srcdir/${_pkgname}-${pkgver}/.mozconfig
+ cat >$srcdir/${_pkgname}-${pkgver}/.mozconfig - <<END
+mk_add_options MOZ_OBJDIR=${PWD@Q}/obj
+END
+ elif [ "${_modclang}" == "0" ] && [ "${_modpgo}" == "1" ]; then
+ # Add the custom mozconfig for gcc pgo
+ cp $srcdir/mozconfig.in.gcc $srcdir/${_pkgname}-${pkgver}/.mozconfig
+ cat >$srcdir/${_pkgname}-${pkgver}/.mozconfig - <<END
+mk_add_options MOZ_OBJDIR=${PWD@Q}/obj
+ac_add_options --enable-profile-generate=cross
+END
else
- # Add the custom mozconfig
- cp $srcdir/mozconfig.in $srcdir/${_pkgname}-${pkgver}/.mozconfig
+ # Add the custom mozconfig for gcc
+ cp $srcdir/mozconfig.in.gcc $srcdir/${_pkgname}-${pkgver}/.mozconfig
fi
# MOZ_TELEMETRY_REPORTING only applied correctly when set in this override file
@@ -96,14 +124,14 @@ prepare() {
# Disable various components at the source level
- #sed -i 's|[;]1|;0|' $srcdir/${_pkgname}-${pkgver}/toolkit/components/telemetry/TelemetryStartup.manifest
+ sed -i 's|[;]1|;0|' $srcdir/${_pkgname}-${pkgver}/toolkit/components/telemetry/TelemetryStartup.manifest
sed -i 's/;1/;0/' $srcdir/${_pkgname}-${pkgver}/toolkit/components/telemetry/components.conf
# Patch out health reporting so that MOZ_DATA_REPORTING=0 can be applied.
- patch -p0 $srcdir/${_pkgname}-${pkgver}/browser/moz.configure $srcdir/arc4_remove-health-reporting.patch
+ patch -Np1 -i ../arc4_remove-health-reporting.patch
# Remove @RESPATH@/browser/features/* to prevent system addons from being part of the output package.
- patch -p0 $srcdir/${_pkgname}-${pkgver}/browser/installer/package-manifest.in $srcdir/arc4_remove-system-addons.patch
+ patch -Np1 -i ../arc4_remove-system-addons.patch
# Hide mobile promo
@@ -123,7 +151,7 @@ build() {
# firefox is prone to OOM, use 1 thread per 2GB ram
#export MOZ_MAKE_FLAGS="${MAKEFLAGS}"
- export MOZ_MAKE_FLAGS="-j16"
+ export MOZ_MAKE_FLAGS="-j32"
# -flto breaks cargo
# -fPIE and -pie break compiling
@@ -134,7 +162,7 @@ build() {
ulimit -n 4096
- if [ "${_modclang}" == "1" ]; then
+ 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//' - )"
@@ -162,12 +190,49 @@ build() {
echo "Building optimized browser..."
# Add the custom mozconfig
cp $srcdir/mozconfig.in.clang $srcdir/${_pkgname}-${pkgver}/.mozconfig
- cat >.mozconfig - <<END
+ cat >$srcdir/${_pkgname}-${pkgver}/.mozconfig - <<END
+mk_add_options MOZ_OBJDIR=${PWD@Q}/obj
+ac_add_options --enable-lto=cross
+ac_add_options --enable-profile-use=cross
ac_add_options --with-pgo-profile-path=${PWD@Q}/merged.profdata
ac_add_options --with-pgo-jarlog=${PWD@Q}/jarlog
+END
+ ./mach build
+
+ elif [ "${_modclang}" == "0" ] && [ "${_modpgo}" == "1" ]; then
+
+ # 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.gcc $srcdir/${_pkgname}-${pkgver}/.mozconfig
+ cat >.mozconfig - <<END
mk_add_options MOZ_OBJDIR=${PWD@Q}/obj
+ac_add_options --with-pgo-profile-path=${PWD@Q}/merged.profdata
+ac_add_options --with-pgo-jarlog=${PWD@Q}/jarlog
+ac_add_options --enable-lto=cross
+ac_add_options --enable-profile-use=cross
END
./mach build
+
else
echo "Building optimized browser..."
xvfb-run -s "-screen 0 1920x1080x24 -nolisten local" ./mach build
@@ -178,27 +243,34 @@ package() {
cd ${_pkgname}-${pkgver}
DESTDIR="$pkgdir" ./mach install
+ # Don't install in /usr/local
+ rm -rf "$pkgdir/usr/local/bin"
+ mkdir "$pkgdir/usr/lib"
+ mkdir "$pkgdir/usr/bin"
+ cp -r --reflink "$pkgdir/usr/local/lib/firefox" "$pkgdir/usr/lib/firefox"
+ rm -rf "$pkgdir/usr/local/lib/firefox"
install -Dm644 $srcdir/distribution.ini \
- "$pkgdir/usr/lib/$_pkgname/distribution/distribution.ini"
+ "$pkgdir/usr/lib/$pkgname/distribution/distribution.ini"
- # don't duplicate the binary, use a symlink instead
- rm "$pkgdir/usr/bin/firefox"
- ln -s "/usr/lib/$_pkgname/firefox" "$pkgdir/usr/bin/firefox"
+ # use a symlink in /usr/bin instead
+ ln -sf "/usr/lib/$pkgname/firefox" "$pkgdir/usr/bin/firefox"
# icons
local i theme=official
for i in 16 22 24 32 48 64 128 256; do
install -Dvm644 browser/branding/$theme/default$i.png \
- "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/$_pkgname.png"
+ "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/$pkgname.png"
done
install -Dvm644 browser/branding/$theme/content/about-logo.png \
- "$pkgdir/usr/share/icons/hicolor/192x192/apps/$_pkgname.png"
+ "$pkgdir/usr/share/icons/hicolor/192x192/apps/$pkgname.png"
install -Dvm644 browser/branding/$theme/content/about-logo@2x.png \
- "$pkgdir/usr/share/icons/hicolor/384x384/apps/$_pkgname.png"
- install -Dvm644 browser/branding/$theme/content/identity-icons-brand.svg \
- "$pkgdir/usr/share/icons/hicolor/symbolic/apps/$_pkgname-symbolic.svg"
+ "$pkgdir/usr/share/icons/hicolor/384x384/apps/$pkgname.png"
+ install -Dvm644 browser/branding/$theme/content/about-logo.svg \
+ "$pkgdir/usr/share/icons/hicolor/scalable/apps/$pkgname.svg"
+ install -Dvm644 ../identity-icons-brand.svg \
+ "$pkgdir/usr/share/icons/hicolor/symbolic/apps/$pkgname-symbolic.svg"
# install desktop file
install -Dvm644 ../$pkgname.desktop \