# Maintainer: dr460nf1r3 # Co-Maintainer: FGD # Three-stage profile-guided optimization : ${_build_pgo:=true} # Profile with xvfb-run, if possible : ${_build_pgo_xvfb:=false} pkgname=firedragon _pkgname=FireDragon pkgver=11.11.0 _floorp_core_commit="31ceb1c62a7b11b07b1cfb16f6ee3de35974594c" _floorp_l10n_commit="4c2c1ca3e907d8ce170be6770d892d17e08c0e56" pkgrel=1 epoch=1 pkgdesc="Floorp fork build using custom branding & settings" url='http://dr460nf1r3.org' arch=('x86_64') license=('MPL2') depends=(dbus dbus-glib ffmpeg gtk3 libevent libjpeg libpulse libvpx libwebp libxss libxt mime-types nss pipewire ttf-font zlib) makedepends=(cbindgen clang diffutils dump_syms imagemagick imake inetutils git jack lld llvm mesa mold nasm nodejs python rust unzip wasi-compiler-rt wasi-libc wasi-libc++ wasi-libc++abi xorg-server-xvfb yasm zip) optdepends=('hunspell-dictionary: Spell checking' 'libnotify: Notification integration' 'networkmanager: Location detection via available WiFi networks' 'profile-sync-daemon: Load the browser profile into RAM' 'pulseaudio: Audio support' 'searx: Searching the web using a locally running searX instance' 'speech-dispatcher: Text-to-Speech' 'whoogle: Searching the web using a locally running Whoogle instance' 'xdg-desktop-portal: Screensharing with Wayland') replaces=(firedragon-next) options=(!debug !emptydirs !lto !makeflags !strip) backup=("usr/lib/${pkgname}/${pkgname}.cfg" "usr/lib/${pkgname}/distribution/policies.json") source=(https://github.com/Floorp-Projects/Floorp/archive/refs/tags/v"${pkgver}".tar.gz "floorp-core::git+https://github.com/Floorp-Projects/Floorp-core#commit=$_floorp_core_commit" "floorp-l10n-central::git+https://github.com/Floorp-Projects/Unified-l10n-central#commit=$_floorp_l10n_commit" "common::git+https://gitlab.com/garuda-linux/firedragon/common.git" "settings::git+https://gitlab.com/garuda-linux/firedragon/settings.git" "${pkgname}.desktop") sha256sums=('b05d551fd0fe0114e79cbd9c2e872d5e8ced8299774a95219d332cd098c8d3ef' '824240c9799ac4939c195d26e43e22d788be07d23ebfb14a832194bf560b6561' 'c391478e5a144c08fdd92cf2c4e70971afbd913947509c578f3a653a4d36cb0f' 'SKIP' 'SKIP' '53d3e743f3750522318a786befa196237892c93f20571443fdf82a480e7f0560') install="${pkgname}.install" # Select the method of profiling if [[ "${_build_pgo::1}" == "t" ]]; then if [[ "${_build_pgo_xvfb::1}" == "t" ]]; then makedepends+=(xorg-server-xvfb) else makedepends+=(weston xwayland-run) fi fi prepare() { # Floorp's shenanigan to make the build work without cloning the whole # git source (puts submodules' content in place) mv -f "${srcdir}"/floorp-core/* ./Floorp-"${pkgver}"/floorp mv -f "${srcdir}"/floorp-l10n-central/* ./Floorp-"${pkgver}"/floorp/browser/locales/l10n-central rm -rf "${srcdir}/mozbuild" mkdir "${srcdir}/mozbuild" cd Floorp-"${pkgver}" || exit cat >../mozconfig <>browser/locales/en-US/browser/preferences/preferences.ftl # Update privacy preferences -- DISABLED to test UI changes and allow user to easily change the setting # _patch "${_patches_dir}"/custom/privacy-preferences.patch rm -f "${srcdir}"/common/source_files/mozconfig cp -r "${srcdir}"/common/source_files/* ./ } build() { cd Floorp-"${pkgver}" || exit export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=pip export MOZBUILD_STATE_PATH="${srcdir}/mozbuild" export MOZ_ENABLE_FULL_SYMBOLS=1 export MOZ_NOSPAM=1 export MOZ_PROFILER_STARTUP=1 # Starts the profiler is started as early as possible during startup. # Fix DRI/zink issues during compilation export LIBGL_ALWAYS_SOFTWARE=true # Malloc_usable_size is used in various parts of the codebase CFLAGS="${CFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}" CXXFLAGS="${CXXFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}" # LTO needs more open files ulimit -n 4096 # Do 3-tier PGO if [[ "${_build_pgo::1}" == "t" ]]; then local _old_profdata="${SRCDEST:-$startdir}/merged.profdata" local _old_jarlog="${SRCDEST:-$startdir}/jarlog" # Restore old profile if [[ "${_build_pgo_reuse::1}" == "t" ]]; then if [[ -s "$_old_profdata" ]]; then echo "Restoring old profile data." cp --reflink=auto -f "$_old_profdata" merged.profdata fi if [[ -s "$_old_jarlog" ]]; then echo "Restoring old jar log." cp --reflink=auto -f "$_old_jarlog" jarlog fi fi # Make new profile if [[ "${_build_pgo_reuse::1}" != "t" ]] || [[ ! -s merged.profdata ]]; then echo "Building instrumented browser..." cat >.mozconfig ../mozconfig echo >>.mozconfig "ac_add_options --enable-profile-generate=cross" ./mach build echo "Profiling instrumented browser..." ./mach package if [[ "${_build_pgo_xvfb::1}" == "t" ]]; then local _headless_run=( xvfb-run -s "-screen 0 1920x1080x24 -nolisten local" ) else local _headless_run=( wlheadless-run -c weston --width=1920 --height=1080 ) fi LLVM_PROFDATA=llvm-profdata JARLOG_FILE=${PWD@Q}/jarlog \ "${_headless_run[@]}" -- ./mach python build/pgo/profileserver.py echo "Removing instrumented browser..." ./mach clobber fi echo "Building optimized browser..." cat >.mozconfig ../mozconfig if [[ -s merged.profdata ]]; then stat -c "Profile data found (%s bytes)" merged.profdata echo >>.mozconfig "ac_add_options --enable-profile-use=cross" echo >>.mozconfig "ac_add_options --with-pgo-profile-path='${PWD@Q}/merged.profdata'" # save profdata for reuse cp --reflink=auto -f merged.profdata "$_old_profdata" else echo "Profile data not found." fi if [[ -s jarlog ]]; then stat -c "Jar log found (%s bytes)" jarlog echo >>.mozconfig "ac_add_options --with-pgo-jarlog='${PWD@Q}/jarlog'" # save jarlog for reuse cp --reflink=auto -f jarlog "$_old_jarlog" else echo "Jar log not found." fi ./mach build else echo "Building browser..." cat >.mozconfig ../mozconfig ./mach build fi echo "Building symbol archive..." ./mach buildsymbols } package() { cd Floorp-"${pkgver}" || exit DESTDIR="${pkgdir}" ./mach install rm "${pkgdir}/usr/lib/${pkgname}/pingsender" local vendorjs="${pkgdir}/usr/lib/${pkgname}/browser/defaults/preferences/vendor.js" install -Dvm644 /dev/stdin "${vendorjs}" <