diff options
author | bill-auger <mr.j.spam.me@gmail.com> | 2020-12-29 12:47:46 -0500 |
---|---|---|
committer | bill-auger <mr.j.spam.me@gmail.com> | 2021-01-04 04:03:46 -0500 |
commit | 5a4432312c859ee73a76b4dd090ac58e1ce33275 (patch) | |
tree | d885813bb68d22e52fd65ec131b08b3e54f89c26 /libre/icecat/PKGBUILD | |
parent | 4f6e9acd7de4b8704f80901e86e999c1a77ff8bb (diff) |
[icecat]: wip - antifeatures-check - i686wip-icecat-78.4
Diffstat (limited to 'libre/icecat/PKGBUILD')
-rw-r--r-- | libre/icecat/PKGBUILD | 262 |
1 files changed, 214 insertions, 48 deletions
diff --git a/libre/icecat/PKGBUILD b/libre/icecat/PKGBUILD index ab4f84fb4..c128a81d8 100644 --- a/libre/icecat/PKGBUILD +++ b/libre/icecat/PKGBUILD @@ -44,19 +44,67 @@ options=(!emptydirs !makeflags !strip) source=(https://repo.parabola.nu/other/${pkgname}/${pkgname}-${_upstream_ver}-pre.tar.bz2{,.sig} ${pkgname}.desktop 0001-Use-remoting-name-for-GDK-application-names.patch - rust_1.48.patch.gz) + rust-1.48_icecat-78.6.0.patch) source+=(libre.patch mozilla-1663715.patch) +source_i686=('avoid-libxul-OOM-python-check.patch' + 'rust-static-disable-network-test-on-static-libraries.patch') sha256sums=('314171bb68cd8b0fb7b880a77f3a2daa65acd660fc6f2a7d6871c5a5ba44be52' 'SKIP' 'f9f954fd06739e70a72ccf4774cfa71f349a4b133ec8f5dea0a3bcca2cf7321d' '3bb7463471fb43b2163a705a79a13a3003d70fff4bbe44f467807ca056de9a75' - 'd32c87c4526e897d64453914da43f99366d1d0b7d71e43b4027a6cb5aa274040' + 'd90faa59dc59f457c5770b3cc1ee4caa5b255e754ab9ab3993af894992c007e4' '28029afa3201e1be8138be06f741c59d64869edf0c9e90dbb05cfa6b5fff4ecd' '665cf25255fd240f79d5d010b3c3764f2d80aa81fdc7b6e9a9728e4a7970685b') +sha256sums_i686=('80b6461579398398c28f9b72b0c55220f261d9bf6c5a253e3bc66dc8a65131f6' + 'e661665ee00ecec66c33e115b0af3474452022f0d8ceda634a6315dc8cb99014') validpgpkeys=('318C679D94F17700CC847DE646A70073E4E50D4E' # Ruben Rodriguez '3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40') # bill-auger + +# PGO requires networking +_should_skip_pgo_armv7h=1 # disable for armv7h - always +_should_skip_pgo_i686=1 # disable for i686 - always +_should_skip_pgo_x86_64=0 # disable for x86_64 - libremakepkg +eval "_should_skip_pgo=\$_should_skip_pgo_${CARCH}" + + +_check_build_config() { + pushd "${srcdir}"/${pkgname}-${pkgver%_*} > /dev/null + + echo "Checking build configuration..." + + # Configure produces mozinfo.json that reflects current configuration. + # See build/docs/mozinfo.rst + ./mach configure + + # In this test, jq collects values of the following keys of mozinfo.json into array, + # and checks if any of them are not equal to false, in which case it returns "true". + # E.g. if the value of any key is true or null (in case the key is missing from mozinfo.json), + # that means the build configuration has to be reworked. + declare -A antifeatures=( [.crashreporter]=true \ + [.datareporting]=true \ + [.healthreport]=true \ + [.normandy]=true \ + [.telemetry]=true \ + [.updater]=true ) + local obj_directory=$(./mach environment | sed -En '/object directory:/{n;s/^\s+//;p;}') + local config_file="${obj_directory}"/mozinfo.json + echo "verifying disabled anti-features in: ${config_file}" + for key in ${!antifeatures[@]} + do jq -e "${key} != false" "${config_file}" > /dev/null || unset antifeatures[${key}] + done + if (( ${#antifeatures[@]} )) + then echo "Some anti-features are not disabled in build configuration files - aborting:" + for key in ${!antifeatures[@]} ; do echo " - ${key} is enabled" ; done ; +# FIXME: '- .datareporting is enabled' - this build may not be FSDG-fit +# TODO: investigate the implications of this +# return 1 + fi + + popd > /dev/null +} + prepare() { mkdir -p mozbuild cd "$srcdir/$pkgname-${pkgver%_*}" @@ -65,7 +113,7 @@ prepare() { patch -Np1 -i ../0001-Use-remoting-name-for-GDK-application-names.patch # https://bugzilla.mozilla.org/show_bug.cgi?id=1667736 - patch -Np1 -i ../rust_1.48.patch + patch -Np1 -i ../rust-1.48_icecat-78.6.0.patch # https://bugzilla.mozilla.org/show_bug.cgi?id=1663715 patch -Np1 -i ../mozilla-1663715.patch @@ -112,24 +160,58 @@ ac_add_options --disable-updater ac_add_options --disable-eme END -# if [[ $CARCH = arm* ]]; then -# sed -i '/--enable-linker=gold/d' .mozconfig -# sed -i '/--enable-rust-simd/d' .mozconfig + + ## [ARCH-SPECIFIC CONFIG] ## + + # TODO: this per-arch handling is yet to be re-worked for armv7h + case "${CARCH}" in + armv*) +# sed -i '/--enable-linker=gold/d' ../mozconfig +# sed -i '/--enable-rust-simd/d' ../mozconfig # # # https://bugzilla.mozilla.org/show_bug.cgi?id=1463035 # patch -Np1 -i "$srcdir"/mozilla-1463035.patch # -# cat >> .mozconfig <<END +# cat >> ../mozconfig <<END #ac_add_options --enable-optimize="-g -O2 -fno-schedule-insns" #ac_add_options --disable-elf-hack #ac_add_options --disable-webrtc #ac_add_options --disable-av1 #END -# fi -# -# if [[ $CARCH = i686 ]]; then -# sed -i '/--enable-linker=gold/d' .mozconfig -# fi + ;; + i686) + # disable LTO and use gcc toolchain (clang has issues on IA32) + # disable SIMD (SSE20 for i686) + export MOZ_SOURCE_CHANGESET="DEVEDITION_${pkgver//./_}_RELEASE" + cat >>../mozconfig <<END +ac_add_options --disable-linker=lld +ac_add_options --enable-linker=bfd +ac_add_options --disable-lto +ac_add_options --disable-rust-simd +export CC=gcc +export CXX=g++ +export AR=gcc-ar +export NM=gcc-nm +export RANLIB=gcc-ranlib +END + +# sed -i '/--enable-linker=gold/d' ../mozconfig + + # readelf: Error: Unable to seek to 0x801db328 for section headers +# echo "applying avoid-libxul-OOM-python-check.patch" +# patch -p1 -i ../avoid-libxul-OOM-python-check.patch + + # test failure in rust code (complaining about network functions) when PGO is used, + # see https://bugzilla.mozilla.org/show_bug.cgi?id=1565757 +# echo "applying rust-static-disable-network-test-on-static-libraries.patch" +# patch -p1 -i ../rust-static-disable-network-test-on-static-libraries.patch + ;; + *) echo "no [ARCH-SPECIFIC CONFIG] for arch: ${CARCH}" ; return 1 ; + ;; + esac + + + ## searchengines ## # install our searchengines locales=( $(jq ".locales|keys|.[]" < browser/components/search/extensions/list.json) ) @@ -165,11 +247,13 @@ EOF } } EOF - # quick syntax check - jq < browser/components/search/extensions/list.json + # Sanity-check search-engines patching + local engines_err_msg="search-engines patching needs re-working" + jq < browser/components/search/extensions/list.json || ! echo "${engines_err_msg}" # Patch and remove anything that's left - patch -Np1 -i "$srcdir/libre.patch" + echo "applying libre.patch" + patch -Np1 -i "${srcdir}"/libre.patch } build() { @@ -178,54 +262,118 @@ build() { export MOZ_NOSPAM=1 export MOZBUILD_STATE_PATH="$srcdir/mozbuild" -# if [[ $CARCH = armv7h ]]; then -# export RUSTFLAGS+=" -Cdebuginfo=0 -Clto=off" -# export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" -# fi -# -# if [[ $CARCH = i686 ]]; then -# export RUSTFLAGS+=" -Cdebuginfo=0 -Clto=off" -# export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" -# fi - # LTO needs more open files ulimit -n 4096 - # -fno-plt with cross-LTO causes obscure LLVM errors - # LLVM ERROR: Function Import: link error - CFLAGS="${CFLAGS/-fno-plt/}" - CXXFLAGS="${CXXFLAGS/-fno-plt/}" - - # Do 3-tier PGO - echo "Building instrumented browser..." - cat >.mozconfig ../mozconfig - <<END + # clang-{9,10,11} -> error: unknown argument: '-fvar-tracking-assignments' + CFLAGS="${CFLAGS/-fvar-tracking-assignments/}" + CXXFLAGS="${CXXFLAGS/-fvar-tracking-assignments/}" + + + ## [ARCH-SPECIFIC BUILD ENV] ## + + # TODO: this per-arch handling is yet to be re-worked for armv7h + case "${CARCH}" in + armv*) +# export RUSTFLAGS+=" -Cdebuginfo=0 -Clto=off" +# export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" +# export CFLAGS +# export CXXFLAGS + ;; + i686) + # -fno-plt with cross-LTO -> LLVM ERROR: Function Import: link error + CFLAGS="${CFLAGS/-fno-plt/}" + CXXFLAGS="${CXXFLAGS/-fno-plt/}" + + export RUSTFLAGS+=" -Cdebuginfo=0 -Clto=off" +# export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" # ld.lld: error: unknown argument '--reduce-memory-overheads' + export LDFLAGS+=" -Wl,--no-keep-memory" + export CFLAGS + export CXXFLAGS + ;; + x86_64) + # TODO: this may only be needed for v78 + # -fno-plt with cross-LTO causes obscure LLVM errors + # LLVM ERROR: Function Import: link error + CFLAGS="${CFLAGS/-fno-plt/}" + CXXFLAGS="${CXXFLAGS/-fno-plt/}" + + export CFLAGS + export CXXFLAGS + ;; + *) echo "no [ARCH-SPECIFIC BUILD ENV] for arch: ${CARCH}" ; return 1 ; + ;; + esac + + + ## [ARCH-SPECIFIC BUILD CONFIG] ## + + # TODO: this per-arch handling is yet to be re-worked for armv7h + case ${CARCH} in + armv7h) + ;; + i686) + # avoid excessive debug symbols in rust leading to out-of-memory situations + sed -i "s/debug_info = '\''2'\''/debug_info = '\''0'\''/" build/moz.configure/toolchain.configure + ;; + x86_64) + ;; + *) echo "no [ARCH-SPECIFIC BUILD CONFIG] for arch: ${CARCH}" ; return 1 ; + ;; + esac + + + ## PGO build ## + + if (( $_should_skip_pgo )) + then + # skipping "3-tier PGO" "instrumented browser", to avoid OOM problems; + # so we have the final .mozconfig now + cp ../mozconfig .mozconfig + else + # Do 3-tier PGO + echo "Building instrumented browser..." + cat >.mozconfig ../mozconfig - <<END ac_add_options --enable-profile-generate=cross END - ./mach build + _check_build_config + ./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 + 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 "Profile data found (%s bytes)" merged.profdata + test -s merged.profdata - stat -c "Jar log found (%s bytes)" jarlog - test -s jarlog + stat -c "Jar log found (%s bytes)" jarlog + test -s jarlog - echo "Removing instrumented browser..." - ./mach clobber + echo "Removing instrumented browser..." + ./mach clobber - echo "Building optimized browser..." - cat >.mozconfig ../mozconfig - <<END + cat >.mozconfig ../mozconfig - <<END 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 + fi # $_should_skip_pgo + + + ## sanity checks ## + + # each of the [ARCH-SPECIFIC BUILD CONFIG] branches above should have created .mozconfig + [[ ! -f .mozconfig ]] && echo ".mozconfig file not found in source root" && return 1 + _check_build_config + + + ## main build ## + + echo "Building optimized browser..." ./mach build # echo "Building symbol archive..." @@ -318,4 +466,22 @@ END if [[ -e $nssckbi ]]; then ln -srfv "$pkgdir/usr/lib/libnssckbi.so" "$nssckbi" fi + + + ## [ARCH-SPECIFIC INSTALL] ## + + # TODO: this per-arch handling is yet to be re-worked for armv7h + case ${CARCH} in + armv7h) + ;; + i686) + # libxul.so cannot find it's libraries +# install -dm 755 "${pkgdir}"/etc/ld.so.conf.d +# echo "/usr/lib/${pkgname}" > "${pkgdir}"/etc/ld.so.conf.d/${pkgname}.conf + ;; + x86_64) + ;; + *) echo "no [ARCH-SPECIFIC INSTALL] for arch: ${CARCH}" ; return 1 ; + ;; + esac } |