summaryrefslogtreecommitdiff
path: root/opt/firefox/MAKEPKG
blob: 5f39ce4fad7333648cc5be500fdf59b16d007366 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#!/bin/mkpkg
# description: Mozilla Firefox browser
# url: https://www.mozilla.org/firefox/

name=firefox
version=153.3.0esr
_version=153.3.0
_patch=153esr-patches-03
release=1
depends=(gtk3 nss nspr libvpx libwebp pixman libffi alsa-lib ffmpeg dbus)
makedeps=(rust cbindgen nodejs python3 nasm)
source=(
  https://ftp.mozilla.org/pub/$name/releases/$version/source/$name-$version.source.tar.xz
  https://dev.gentoo.org/~juippis/mozilla/patchsets/firefox-$_patch.tar.xz
  firefox.desktop
  rawnix.js
  policies.json
)

sha256sums=(
    "69f1335e78d2a340fc13fcf265c0a72bdce2df8774c9d4d49ee77d1726236df5"
    "39efa65af2e5eecac09745b8d2b469a6137365a786d118100d2eb1dc28288e49"
    "a092fddc62bf5bff0c0f7891f59278463fa9b6ec24e9d811e49cd10b2282bdee"
    "bab0f8bba99a0f6b2a129a0767168e6af7462ccdfdf7f610690fefb8f25f06b8"
    "14dafc23074acb8d0cb8b3f9657c80b6d172da1f5711ef1a547301d458cd9004"
)

patch() {
  cd $name-$_version

  # https://dev.gentoo.org/~juippis
  for p in "$SRC"/firefox-patches/*.patch; do
    [ -f "$p" ] && patch -p1 -i "$p"
  done

  # musl: allow select() syscall in all sandbox policies
  awk '/CASES_FOR_poll:/{print; print "#ifdef __NR_select"; print "      case __NR_select:"; print "#endif"; next}1' \
    security/sandbox/linux/SandboxFilter.cpp > SandboxFilter.tmp
  mv SandboxFilter.tmp security/sandbox/linux/SandboxFilter.cpp

  # bindgen: don't panic on unresolved field types when computing union layout (libclang 23)
  sed -i 's/ctx\.resolve_type(inner)\.layout(ctx)/ctx.resolve_item_fallible(inner)?.kind().as_type()?.layout(ctx)/' \
    third_party/rust/bindgen/ir/ty.rs
  sed -i 's/ctx\.resolve_type(data\.ty)\.layout(ctx)/ctx.resolve_item_fallible(data.ty)?.kind().as_type()?.layout(ctx)/' \
    third_party/rust/bindgen/ir/comp.rs
  sed -i 's/"files":{[^}]*}/"files":{}/' third_party/rust/bindgen/.cargo-checksum.json

}

build() {
  cd $name-$_version

  export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none
  export MOZBUILD_STATE_PATH="$PWD"/mozbuild
  export MOZ_NOSPAM=1
  export SHELL=/bin/bash

  # Toolchain
  export CC=clang CXX=clang++
  export AR=llvm-ar NM=llvm-nm RANLIB=llvm-ranlib
  export AS=clang

  # Flags
  export CFLAGS="$CFLAGS -w"
  export CXXFLAGS="$CXXFLAGS -w"
  export LDFLAGS="$LDFLAGS -Wl,-rpath=/usr/lib/firefox,--enable-new-dtags"
  export MOZ_DEBUG_FLAGS=-g0
  export CXXSTDLIB=c++
  export LIBCLANG_PATH=/usr/lib
  export MOZ_MAKE_FLAGS="-j$(nproc)"

  # Rustc wrapper: force -crt-static so build scripts can dlopen libclang
  mkdir -p "$PWD"/rustc-wrap
  printf '#!/bin/sh\nexec /usr/bin/rustc -Ctarget-feature=-crt-static -Cdebuginfo=0 "$@"\n' \
    > "$PWD"/rustc-wrap/rustc
  chmod +x "$PWD"/rustc-wrap/rustc
  export PATH="$PWD/rustc-wrap:$PATH"

  cat > .mozconfig << EOF
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/firefox-shared
unset MOZ_TELEMETRY_REPORTING

ac_add_options --prefix=/usr
ac_add_options --libdir=/usr/lib
ac_add_options --host=x86_64-unknown-linux-musl
ac_add_options --target=x86_64-unknown-linux-musl

ac_add_options --enable-release
ac_add_options --enable-optimize
ac_add_options --enable-strip
ac_add_options --enable-install-strip
ac_add_options --enable-official-branding
ac_add_options --enable-application=browser
ac_add_options --enable-audio-backends=alsa
ac_add_options --enable-dbus
ac_add_options --enable-rust-simd
ac_add_options --enable-default-toolkit=cairo-gtk3-wayland-only

# System libraries
ac_add_options --with-system-ffi
ac_add_options --with-system-jpeg
ac_add_options --with-system-libvpx
ac_add_options --with-system-nspr
ac_add_options --with-system-nss
ac_add_options --with-system-pixman
ac_add_options --without-system-png
ac_add_options --with-system-webp
ac_add_options --with-system-zlib
ac_add_options --without-wasm-sandboxed-libraries

# No Mozilla/Google service keys
ac_add_options --without-mozilla-api-keyfile
ac_add_options --without-google-location-service-api-keyfile
ac_add_options --without-google-safebrowsing-api-keyfile

# Disable unused features
ac_add_options --disable-jemalloc
ac_add_options --disable-elf-hack
ac_add_options --disable-tests
ac_add_options --disable-updater
ac_add_options --disable-crashreporter
ac_add_options --disable-debug
ac_add_options --disable-debug-symbols
ac_add_options --disable-profiling
ac_add_options --disable-necko-wifi
ac_add_options --disable-webspeech
ac_add_options --disable-accessibility
ac_add_options --disable-parental-controls
ac_add_options --disable-default-browser-agent
ac_add_options --disable-backgroundtasks
ac_add_options --disable-system-extension-dirs
ac_add_options --disable-vtune
ac_add_options --disable-callgrind
ac_add_options --disable-eme
ac_add_options --without-onnx-runtime
EOF

  ./mach configure
  ./mach build

  DESTDIR="$PKG" ./mach install

  # Desktop integration
  install -Dm644 "$SRC"/firefox.desktop "$PKG"/usr/share/applications/firefox.desktop
  mkdir -p "$PKG"/usr/share/pixmaps
  ln -sf /usr/lib/firefox/browser/chrome/icons/default/default128.png \
         "$PKG"/usr/share/pixmaps/firefox.png

  # System-wide privacy prefs (default prefs, user-overridable)
  install -Dm644 "$SRC"/rawnix.js \
    "$PKG"/usr/lib/firefox/browser/defaults/preferences/rawnix.js

  # Enterprise policies (hard kills + locked prefs)
  install -Dm644 "$SRC"/policies.json \
    "$PKG"/usr/lib/firefox/distribution/policies.json

  # Cleanup
  rm -f "$PKG"/usr/lib/firefox/firefox-bin
  rm -rf "$PKG"/usr/lib/firefox/browser/features
  rm -f "$PKG"/usr/lib/firefox/removed-files
}

signify() {
    untrusted comment: public key
    RWTZ9IduCSQ/mL8337TEUinPwT92xFEUpD92hkS7IxcOnzTt9QdpohT3
}

# vim: filetype=sh