Files
IronFox/scripts/get_sources.sh
2025-01-08 00:40:53 +05:30

145 lines
3.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
FIREFOX_TAG="FIREFOX-ANDROID_134_0_RELEASE"
WASI_TAG="wasi-sdk-20"
GLEAN_TAG="v62.0.0"
GMSCORE_TAG="v0.3.6.244735"
APPSERVICES_TAG="v134.0"
# Configuration
ROOTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
PATHS_SH="${ROOTDIR}/scripts/paths_local.sh"
BUILDDIR="${ROOTDIR}/build"
PATCHDIR="${ROOTDIR}/patches"
GECKODIR="${ROOTDIR}/gecko"
GLEANDIR="${ROOTDIR}/glean"
APPSERVICESDIR="${ROOTDIR}/appservices"
GMSCOREDIR="${ROOTDIR}/gmscore"
WASISDKDIR="${ROOTDIR}/wasi-sdk"
ANDROID_COMPONENTS="${GECKODIR}/mobile/android/android-components"
FENIX="${GECKODIR}/mobile/android/fenix"
download() {
local url="$1"
local filepath="$2"
if [ -f "$filepath" ]; then
echo "$filepath already exists."
read -p "Do you want to re-download? [y/N] " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "Removing $filepath..."
rm -f "$filepath"
else
return 0
fi
fi
echo "Downloading $url"
wget "$url" -O "$filepath"
}
# Extract zip removing top level directory
extract_rmtoplevel() {
local archive_path="$1"
local to_name="$2"
local extract_to="${ROOTDIR}/$to_name"
# Create temporary directory for extraction
local temp_dir=$(mktemp -d)
# Extract based on file extension
case "$archive_path" in
*.zip)
unzip -q "$archive_path" -d "$temp_dir"
;;
*.tar.gz)
tar xzf "$archive_path" -C "$temp_dir"
;;
*.tar.xz)
tar xJf "$archive_path" -C "$temp_dir"
;;
*)
echo "Unsupported archive format: $archive_path"
rm -rf "$temp_dir"
exit 1
;;
esac
local top_dir=$(ls "$temp_dir")
local to_parent=$(dirname "$extract_to")
rm -rf "$extract_to"
mkdir -p "$to_parent"
mv "$temp_dir/$top_dir" "$to_parent/$to_name"
rm -rf "$temp_dir"
}
do_download() {
local repo_name="$1"
local url="$2"
local extension
if [[ "$url" =~ \.tar\.xz$ ]]; then
extension=".tar.xz"
elif [[ "$url" =~ \.tar\.gz$ ]]; then
extension=".tar.gz"
else
extension=".zip"
fi
local repo_archive="${BUILDDIR}/${repo_name}${extension}"
download "$url" "$repo_archive"
if [ ! -f "$repo_archive" ]; then
echo "Source archive for $repo_name does not exist."
exit 1
fi
echo "Extracting $repo_archive"
extract_rmtoplevel "$repo_archive" "$repo_name"
echo
}
mkdir -p "$BUILDDIR"
echo "Cloning glean..."
git clone --branch "$GLEAN_TAG" --depth=1 "https://github.com/mozilla/glean" "$GLEANDIR"
echo "Cloning gmscore..."
git clone --branch "$GMSCORE_TAG" --depth=1 "https://github.com/microg/GmsCore" "$GMSCOREDIR"
if [[ -z ${FDROID_BUILD+x} ]]; then
echo "Downloading prebuilt wasi-sdk..."
do_download "wasi-sdk" "https://github.com/itsaky/ironfox/releases/download/$WASI_TAG/$WASI_TAG-firefox.tar.xz"
else
echo "Cloning wasi-sdk..."
git clone --branch "$WASI_TAG" --depth=1 "https://github.com/WebAssembly/wasi-sdk" "$WASISDKDIR"
(cd "$WASISDKDIR" && git submodule update --init --depth=1)
fi
echo "Cloning appservices..."
git clone --branch "$APPSERVICES_TAG" --depth=1 "https://github.com/mozilla/application-services" "$APPSERVICESDIR"
(cd "$APPSERVICESDIR" && git submodule update --init --depth=1)
do_download "gecko" "https://hg.mozilla.org/releases/mozilla-release/archive/${FIREFOX_TAG}.zip"
echo "Writing ${PATHS_SH}..."
cat > "$PATHS_SH" << EOF
export patches=${PATCHDIR}
export rootdir=${ROOTDIR}
export builddir="\$rootdir/build"
export android_components=${ANDROID_COMPONENTS}
export application_services=${APPSERVICESDIR}
export glean=${GLEANDIR}
export fenix=${FENIX}
export mozilla_release=${GECKODIR}
export gmscore=${GMSCOREDIR}
export wasi=${WASISDKDIR}
export paths_source="true"
EOF