mirror of
https://github.com/ironfox-oss/IronFox.git
synced 2026-01-30 08:52:45 -05:00
145 lines
3.8 KiB
Bash
Executable File
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
|