build.sh raw
1 #!/bin/bash
2 #
3 # Fennec build scripts
4 # Copyright (C) 2020-2024 Matías Zúñiga, Andrew Nayenko, Tavi
5 #
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU Affero General Public License as
8 # published by the Free Software Foundation, either version 3 of the
9 # License, or (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU Affero General Public License for more details.
15 #
16 # You should have received a copy of the GNU Affero General Public License
17 # along with this program. If not, see <https://www.gnu.org/licenses/>.
18 #
19
20 set -e
21
22 # shellcheck source=paths.sh
23 source "$(dirname "$0")/paths.sh"
24
25 # Constrain parallelism — Rust and Gradle will each try to use all cores
26 export CARGO_BUILD_JOBS=1
27 export RUSTFLAGS="${RUSTFLAGS:-} -C codegen-units=1"
28 export GRADLE_OPTS="${GRADLE_OPTS:-} -Dorg.gradle.workers.max=1 -Dorg.gradle.parallel=false -Xmx4g"
29 export MOZ_PARALLEL_BUILD=1
30 export NINJA_JOBS=1
31 export MAKEFLAGS="-j1"
32
33 # Gradle version aliases
34 GRADLE_811=/opt/gradle-8.11.1/bin/gradle
35 GRADLE_814=/opt/gradle-8.14.3/bin/gradle
36 GRADLE_92=/opt/gradle-9.2.1/bin/gradle
37
38 # We publish the artifacts into a local Maven repository instead of using the
39 # auto-publication workflow because the latter does not work for Gradle
40 # plugins (Glean).
41
42 # Set up Android SDK
43 sdkmanager 'build-tools;36.1.0' # for GeckoView
44 sdkmanager 'platforms;android-36.1' # for GeckoView
45
46 # Set up Rust
47 cargo install --force --vers 0.29.2 cbindgen
48
49 # Build LLVM
50 pushd "$llvm"
51 llvmtarget=$(cat "$llvm/targets_to_build")
52 cmake -S llvm -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=out -DCMAKE_C_COMPILER=clang \
53 -DCMAKE_CXX_COMPILER=clang++ -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_TARGETS_TO_BUILD="$llvmtarget" \
54 -DLLVM_USE_LINKER=lld -DLLVM_BINUTILS_INCDIR=/usr/include -DLLVM_ENABLE_PLUGINS=FORCE_ON \
55 -DLLVM_DEFAULT_TARGET_TRIPLE="x86_64-unknown-linux-gnu"
56 cmake --build build -j1
57 cmake --build build --target install -j1
58 popd
59
60 # Build WASI SDK
61 pushd "$wasi"
62 mkdir -p build/install/wasi
63 touch build/compiler-rt.BUILT # fool the build system
64 make \
65 PREFIX=/wasi \
66 build/wasi-libc.BUILT \
67 build/libcxx.BUILT \
68 -j1
69 popd
70
71 # Build microG libraries
72 pushd "$gmscore"
73 $GRADLE_811 -x javaDocReleaseGeneration \
74 :play-services-ads-identifier:publishToMavenLocal \
75 :play-services-base:publishToMavenLocal \
76 :play-services-basement:publishToMavenLocal \
77 :play-services-fido:publishToMavenLocal \
78 :play-services-tasks:publishToMavenLocal
79 popd
80
81 pushd "$glean"
82 export TARGET_CFLAGS=-DNDEBUG
83 $GRADLE_814 publishToMavenLocal
84 popd
85
86 pushd "$glean_as"
87 $GRADLE_814 publishToMavenLocal
88 popd
89
90 pushd "$mozilla_release"
91 ./mach build
92 ./mach package
93 read -ra locales < "$patches/locales"
94 ./mach package-multi-locale --locales "${locales[@]}"
95 MOZ_CHROME_MULTILOCALE=${locales[*]}
96 export MOZ_CHROME_MULTILOCALE
97 $GRADLE_92 -x javadocRelease :geckoview:publishReleasePublicationToMavenLocal
98 $GRADLE_92 -x javadocRelease :exoplayer2:publishReleasePublicationToMavenLocal
99 popd
100
101 pushd "$android_components"
102 # Required by A-S
103 $GRADLE_92 :components:concept-fetch:publishToMavenLocal
104 # Required by UnifiedPush
105 $GRADLE_92 :components:concept-base:publishToMavenLocal
106 $GRADLE_92 :components:support-base:publishToMavenLocal
107 $GRADLE_92 :components:ui-icons:publishToMavenLocal
108 popd
109
110 pushd "$application_services"
111 export NSS_DIR="$application_services/libs/desktop/linux-x86-64/nss"
112 export NSS_STATIC=1
113 ./libs/verify-android-environment.sh
114 $GRADLE_814 publishToMavenLocal
115 # Build and install nimbus-fml manually
116 pushd components/support/nimbus-fml
117 cargo build --release
118 popd
119 mv target/release/nimbus-fml "$mozilla_release/obj/dist/host/bin/nimbus-fml"
120 popd
121
122 pushd "$unifiedpush_ac"
123 $GRADLE_814 publishToMavenLocal
124 popd
125
126 pushd "$android_components"
127 $GRADLE_92 publishToMavenLocal
128 popd
129
130 pushd "$fenix"
131 $GRADLE_92 assembleRelease
132 popd
133