mirror of
https://github.com/ironfox-oss/IronFox.git
synced 2026-01-19 03:20:35 -05:00
ironfox-oss/IronFox!112 ____ ## Changes - [Enabled memory tagging](e24a24e63c) *(via [Android's Arm Memory Tagging Extension](https://developer.android.com/ndk/guides/arm-mte))* to improve security for supported devices *(such as the Pixel 8 and newer)*. - [Fixed an issue with Obtainium app installation](6026d6524f). - Updated Bundletool to [`1.18.3`](https://github.com/google/bundletool/releases/tag/1.18.3). - Updated to Firefox [`146.0.1`](https://firefox.com/firefox/android/146.0.1/releasenotes/). - Updated microG to [`v0.3.11.250932`](https://github.com/microg/GmsCore/releases/tag/v0.3.11.250932). - Updated Rust to [`1.92.0`](https://releases.rs/docs/1.92.0/). - [Various tweaks, fixes, and refinements - especially to the build process](https://gitlab.com/ironfox-oss/IronFox/-/merge_requests/112/diffs). MR-author: celenity <celenity@celenity.dev> Co-authored-by: Weblate <hosted@weblate.org> Co-authored-by: Akash Yadav <itsaky01@gmail.com> Co-authored-by: techaddict <20232669-techaddict@users.noreply.gitlab.com> Co-authored-by: user <user@localhost.localdomain> Approved-by: Akash Yadav <itsaky01@gmail.com> Merged-by: celenity <celenity@celenity.dev>
288 lines
8.8 KiB
Bash
Executable File
288 lines
8.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -eo pipefail
|
|
|
|
source "$(dirname $0)/versions.sh"
|
|
|
|
# If variables are defined with a custom `env_override.sh`, let's use those
|
|
if [[ -f "$(dirname $0)/env_override.sh" ]]; then
|
|
source "$(dirname $0)/env_override.sh"
|
|
fi
|
|
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
ANDROID_SDK_PLATFORM=mac
|
|
PLATFORM=macos
|
|
PREBUILT_PLATFORM=osx
|
|
# Ensure we use GNU tar on macOS
|
|
TAR=gtar
|
|
else
|
|
ANDROID_SDK_PLATFORM=linux
|
|
PLATFORM=linux
|
|
PREBUILT_PLATFORM=linux
|
|
TAR=tar
|
|
fi
|
|
|
|
clone_repo() {
|
|
url="$1"
|
|
path="$2"
|
|
revision="$3"
|
|
|
|
if [[ "$url" == "" ]]; then
|
|
echo "URL missing for clone"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$path" == "" ]]; then
|
|
echo "Path is required for cloning '$url'"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$revision" == "" ]]; then
|
|
echo "Revision is required for cloning '$url'"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -f "$path" ]]; then
|
|
echo "'$path' exists and is not a directory"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -d "$path" ]]; then
|
|
echo "'$path' already exists"
|
|
read -p "Do you want to re-clone this repository? [y/N] " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
echo "Cloning $url::$revision"
|
|
git clone --revision="$revision" --depth=1 "$url" "$path"
|
|
}
|
|
|
|
download() {
|
|
local url="$1"
|
|
local filepath="$2"
|
|
|
|
if [[ "$url" == "" ]]; then
|
|
echo "URL is required (file: '$filepath')"
|
|
exit 1
|
|
fi
|
|
|
|
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
|
|
|
|
mkdir -vp "$(dirname "$filepath")"
|
|
|
|
echo "Downloading $url"
|
|
wget --https-only --no-cache --secure-protocol=TLSv1_3 --show-progress --verbose "$url" -O "$filepath"
|
|
}
|
|
|
|
# Extract zip removing top level directory
|
|
extract_rmtoplevel() {
|
|
local archive_path="$1"
|
|
local to_name="$2"
|
|
local extract_to="${ROOTDIR}/external/$to_name"
|
|
|
|
if ! [[ -f "$archive_path" ]]; then
|
|
echo "Archive '$archive_path' does not exist!"
|
|
fi
|
|
|
|
# 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"
|
|
;;
|
|
*.tar.zst)
|
|
$TAR --zstd -xvf "$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 -vp "$to_parent"
|
|
mv "$temp_dir/$top_dir" "$to_parent/$to_name"
|
|
|
|
rm -rf "$temp_dir"
|
|
}
|
|
|
|
download_and_extract() {
|
|
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"
|
|
elif [[ "$url" =~ \.tar\.zst$ ]]; then
|
|
extension=".tar.zst"
|
|
else
|
|
extension=".zip"
|
|
fi
|
|
|
|
local repo_archive="$DOWNLOADSDIR/${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
|
|
}
|
|
|
|
if [[ -z ${JAVA_HOME+x} ]]; then
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
export JAVA_HOME="/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home"
|
|
else
|
|
export JAVA_HOME="/usr/lib/jvm/temurin-17-jdk"
|
|
fi
|
|
export PATH="$JAVA_HOME/bin:$PATH"
|
|
fi
|
|
|
|
echo "Downloading the Android SDK..."
|
|
download_and_extract "android-cmdline-tools" "https://dl.google.com/android/repository/commandlinetools-${ANDROID_SDK_PLATFORM}-${ANDROID_SDK_REVISION}_latest.zip"
|
|
mkdir -vp "$ANDROIDSDKDIR/cmdline-tools"
|
|
mv -v "$ROOTDIR/external/android-cmdline-tools" "$ANDROIDSDKDIR/cmdline-tools/latest"
|
|
|
|
# Accept Android SDK licenses
|
|
SDK_MANAGER="$ANDROIDSDKDIR/cmdline-tools/latest/bin/sdkmanager"
|
|
{ yes || true; } | $SDK_MANAGER --sdk_root="$ANDROIDSDKDIR" --licenses
|
|
|
|
$SDK_MANAGER "build-tools;$ANDROID_BUILDTOOLS_VERSION"
|
|
$SDK_MANAGER "platforms;android-$ANDROID_PLATFORM_VERSION"
|
|
$SDK_MANAGER "ndk;$ANDROID_NDK_REVISION"
|
|
|
|
echo "Downloading Bundletool..."
|
|
download "https://github.com/google/bundletool/releases/download/${BUNDLETOOL_VERSION}/bundletool-all-${BUNDLETOOL_VERSION}.jar" "$BUNDLETOOLDIR/bundletool.jar"
|
|
|
|
if ! [[ -f "$BUNDLETOOLDIR/bundletool" ]]; then
|
|
echo "Creating bundletool script..."
|
|
{
|
|
echo '#!/bin/bash'
|
|
echo "exec java -jar ${BUNDLETOOLDIR}/bundletool.jar \"\$@\""
|
|
} > "$BUNDLETOOLDIR/bundletool"
|
|
chmod +x "$BUNDLETOOLDIR/bundletool"
|
|
fi
|
|
|
|
echo "Bundletool is set up at $BUNDLETOOLDIR/bundletool"
|
|
|
|
echo "Downloading F-Droid's Gradle script..."
|
|
download "https://gitlab.com/fdroid/gradlew-fdroid/-/raw/$GRADLE_COMMIT/gradlew.py" "$GRADLEDIR/gradlew.py"
|
|
|
|
if ! [[ -f "$GRADLEDIR/gradle" ]]; then
|
|
echo "Creating Gradle script..."
|
|
{
|
|
echo '#!/bin/bash'
|
|
echo "exec python3 $GRADLEDIR/gradlew.py \"\$@\""
|
|
} > "$GRADLEDIR/gradle"
|
|
chmod +x "$GRADLEDIR/gradle"
|
|
fi
|
|
|
|
echo "Gradle is set up at $GRADLEDIR/gradle"
|
|
|
|
# Clone Glean
|
|
echo "Cloning Glean..."
|
|
clone_repo "https://github.com/mozilla/glean.git" "$GLEANDIR" "$GLEAN_COMMIT"
|
|
|
|
# Clone MicroG
|
|
echo "Cloning microG..."
|
|
clone_repo "https://github.com/microg/GmsCore.git" "$GMSCOREDIR" "$GMSCORE_COMMIT"
|
|
|
|
# Download Phoenix
|
|
echo "Downloading Phoenix..."
|
|
download "https://gitlab.com/celenityy/Phoenix/-/raw/$PHOENIX_COMMIT/android/phoenix.js" "$PATCHDIR/gecko-overlay/ironfox/prefs/000-phoenix.js"
|
|
download "https://gitlab.com/celenityy/Phoenix/-/raw/$PHOENIX_COMMIT/android/phoenix-extended.js" "$PATCHDIR/gecko-overlay/ironfox/prefs/001-phoenix-extended.js"
|
|
|
|
# Clone application-services
|
|
echo "Cloning application-services..."
|
|
clone_repo "https://github.com/mozilla/application-services.git" "$APPSERVICESDIR" "$APPSERVICES_COMMIT"
|
|
|
|
# Clone Firefox
|
|
echo "Cloning Firefox..."
|
|
clone_repo "https://github.com/mozilla-firefox/firefox.git" "$GECKODIR" "$FIREFOX_COMMIT"
|
|
|
|
# Prebuilds
|
|
if [[ "$NO_PREBUILDS" == "1" ]]; then
|
|
echo "Cloning the prebuilds build repository..."
|
|
clone_repo "https://gitlab.com/ironfox-oss/prebuilds.git" "$PREBUILDSDIR" "$PREBUILDS_COMMIT"
|
|
|
|
pushd "$PREBUILDSDIR"
|
|
echo "Downloading prebuild sources..."
|
|
bash "$PREBUILDSDIR/scripts/get_sources.sh"
|
|
popd
|
|
|
|
UNIFFIDIR="$PREBUILDSDIR/build/outputs/uniffi-rs/uniffi-rs"
|
|
WASISDKDIR="$PREBUILDSDIR/build/outputs/wasi-sdk/wasi"
|
|
else
|
|
# Get Tor's no-op UniFFi binding generator
|
|
echo "Downloading prebuilt uniffi-bindgen..."
|
|
if [[ "$PLATFORM" == "macos" ]]; then
|
|
download_and_extract "uniffi" "https://gitlab.com/ironfox-oss/prebuilds/-/raw/$UNIFFI_OSX_IRONFOX_COMMIT/uniffi-bindgen/$UNIFFI_VERSION/$PREBUILT_PLATFORM/uniffi-bindgen-$UNIFFI_VERSION-$UNIFFI_OSX_IRONFOX_REVISION-$PREBUILT_PLATFORM.tar.xz"
|
|
else
|
|
download_and_extract "uniffi" "https://gitlab.com/ironfox-oss/prebuilds/-/raw/$UNIFFI_LINUX_IRONFOX_COMMIT/uniffi-bindgen/$UNIFFI_VERSION/$PREBUILT_PLATFORM/uniffi-bindgen-$UNIFFI_VERSION-$UNIFFI_LINUX_IRONFOX_REVISION-$PREBUILT_PLATFORM.tar.xz"
|
|
fi
|
|
|
|
# Get WebAssembly SDK
|
|
echo "Downloading prebuilt wasi-sdk..."
|
|
if [[ "$PLATFORM" == "macos" ]]; then
|
|
download_and_extract "wasi-sdk" "https://gitlab.com/ironfox-oss/prebuilds/-/raw/$WASI_OSX_IRONFOX_COMMIT/wasi-sdk/$WASI_VERSION/$PREBUILT_PLATFORM/wasi-sdk-$WASI_VERSION-$WASI_OSX_IRONFOX_REVISION-$PREBUILT_PLATFORM.tar.xz"
|
|
else
|
|
download_and_extract "wasi-sdk" "https://gitlab.com/ironfox-oss/prebuilds/-/raw/$WASI_LINUX_IRONFOX_COMMIT/wasi-sdk/$WASI_VERSION/$PREBUILT_PLATFORM/wasi-sdk-$WASI_VERSION-$WASI_LINUX_IRONFOX_REVISION-$PREBUILT_PLATFORM.tar.xz"
|
|
fi
|
|
fi
|
|
|
|
# Write env_local.sh
|
|
echo "Writing ${ENV_SH}..."
|
|
cat > "$ENV_SH" << EOF
|
|
export builddir="$BUILDDIR"
|
|
export patches="$PATCHDIR"
|
|
export rootdir="$ROOTDIR"
|
|
export android_components="$ANDROID_COMPONENTS"
|
|
export android_ndk_dir="$ANDROIDSDKDIR/ndk/$ANDROID_NDK_REVISION"
|
|
export android_sdk_dir="$ANDROIDSDKDIR"
|
|
export application_services="$APPSERVICESDIR"
|
|
export bundletool="$BUNDLETOOLDIR"
|
|
export fenix="$FENIX"
|
|
export glean="$GLEANDIR"
|
|
export gmscore="$GMSCOREDIR"
|
|
export gradle="$GRADLEDIR/gradle"
|
|
export mozilla_release="$GECKODIR"
|
|
export prebuilds="$PREBUILDSDIR"
|
|
export uniffi="$UNIFFIDIR"
|
|
export wasi="$WASISDKDIR"
|
|
|
|
export target_abi={target_abi}
|
|
|
|
source "\$rootdir/scripts/env_common.sh"
|
|
EOF
|