#!/bin/bash set -euo pipefail SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" APP_ROOT_DIR="$(dirname "$SCRIPT_DIR")" . "$APP_ROOT_DIR/config.sh" if [ $# -lt 2 ]; then echo "Usage: $0 /path/to/src/firefox x64|arm64|win32" >&2 exit 1 fi gecko_path=$1 arch=$2 if [ ! -d "$gecko_path" ]; then echo "$gecko_path is not a directory" >&2 exit 1 fi # Install required Rust version rustup toolchain install $RUST_VERSION if [ $arch = "x64" ]; then rust_target=x86_64 elif [ $arch = "arm64" ]; then rust_target=aarch64 elif [ $arch = "win32" ]; then rust_target=i686 else echo "Unknown architecture $arch" >&2 exit 1 fi rustup default $RUST_VERSION rustup target add $rust_target-pc-windows-msvc cp "$SCRIPT_DIR/mozconfig" "$gecko_path" if [[ $arch == "arm64" || $arch == "win32" ]]; then export Z_ARCH=$arch export RUST_TARGET=$rust_target-pc-windows-msvc fi cd "$gecko_path" ./mach build ./mach package # Copy the packaged ZIP back to app/win/ for launcher/xul.dll extraction case $arch in x64) zip_suffix=win64 ;; arm64) zip_suffix=win64-aarch64 ;; win32) zip_suffix=win32 ;; esac zip_file=$(ls "$gecko_path"/obj-*/dist/firefox-*.en-US.${zip_suffix}.zip 2>/dev/null | head -1) || true if [ -z "$zip_file" ] || [ ! -f "$zip_file" ]; then echo "Could not find packaged zip for $arch in $gecko_path/obj-*/dist/" >&2 exit 1 fi cp "$zip_file" "$SCRIPT_DIR/" echo "Copied $(basename "$zip_file") to $SCRIPT_DIR"