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