From e7735a0446473e0c4d74e0ceff5bb8fa269cf1ac Mon Sep 17 00:00:00 2001 From: Shihaam Abdul Rahman Date: Tue, 10 Mar 2026 21:15:17 +0500 Subject: [PATCH] script to build isodrive --- build_isodrive.sh | 77 +++++++++++++++++++++++++++++++++++ get_bin.sh => get_isodrive.sh | 0 2 files changed, 77 insertions(+) create mode 100755 build_isodrive.sh rename get_bin.sh => get_isodrive.sh (100%) mode change 100755 => 100644 diff --git a/build_isodrive.sh b/build_isodrive.sh new file mode 100755 index 0000000..cc3aced --- /dev/null +++ b/build_isodrive.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Build isodrive from source for all Android architectures +# Requires: Android NDK (or runs via nix-shell on NixOS) + +SCRIPT_DIR=$(dirname "$(realpath "$0")") +ISODRIVE_DIR="/tmp/isodrive" +OUTPUT_DIR="$SCRIPT_DIR/app/src/main/assets/bin" + +# Clone isodrive source +if [[ -d "$ISODRIVE_DIR" ]]; then + echo "Updating isodrive source..." + git -C "$ISODRIVE_DIR" pull +else + echo "Cloning isodrive..." + git clone --depth 1 https://github.com/nitanmarcel/isodrive "$ISODRIVE_DIR" +fi + +SRCS="$ISODRIVE_DIR/src/util.cpp $ISODRIVE_DIR/src/configfsisomanager.cpp $ISODRIVE_DIR/src/androidusbisomanager.cpp $ISODRIVE_DIR/src/main.cpp" +CFLAGS="-I$ISODRIVE_DIR/src/include -static-libstdc++ -Os -s" + +build_all() { + local NDK="$1" + local TOOLCHAIN="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin" + + echo "Building arm64-v8a..." + "$TOOLCHAIN/aarch64-linux-android26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/arm64-v8a/isodrive" + + echo "Building armeabi-v7a..." + "$TOOLCHAIN/armv7a-linux-androideabi26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/armeabi-v7a/isodrive" + + echo "Building x86_64..." + "$TOOLCHAIN/x86_64-linux-android26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/x86_64/isodrive" + + echo "Building x86..." + "$TOOLCHAIN/i686-linux-android26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/x86/isodrive" + + echo "Done! Built isodrive for all architectures." + ls -la "$OUTPUT_DIR"/*/isodrive +} + +# On NixOS, prefer nix-shell (local Android SDK has /bin/bash issues) +if command -v nix-shell &>/dev/null; then + echo "Using nix-shell to get Android NDK..." + export SRCS CFLAGS OUTPUT_DIR + NIXPKGS_ALLOW_UNFREE=1 nix-shell -p androidenv.androidPkgs.ndk-bundle --run ' + SDK_ROOT=$(find /nix/store -maxdepth 1 -name "*android-sdk-ndk*" -type d 2>/dev/null | head -1) + NDK=$(ls -d "$SDK_ROOT/libexec/android-sdk/ndk/"* | head -1) + TOOLCHAIN="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin" + + echo "Using NDK: $NDK" + + echo "Building arm64-v8a..." + "$TOOLCHAIN/aarch64-linux-android26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/arm64-v8a/isodrive" + + echo "Building armeabi-v7a..." + "$TOOLCHAIN/armv7a-linux-androideabi26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/armeabi-v7a/isodrive" + + echo "Building x86_64..." + "$TOOLCHAIN/x86_64-linux-android26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/x86_64/isodrive" + + echo "Building x86..." + "$TOOLCHAIN/i686-linux-android26-clang++" $CFLAGS $SRCS -o "$OUTPUT_DIR/x86/isodrive" + + echo "Done!" + ls -la "$OUTPUT_DIR"/*/isodrive + ' +elif [[ -n "${ANDROID_NDK_HOME:-}" ]]; then + build_all "$ANDROID_NDK_HOME" +elif [[ -n "${ANDROID_NDK:-}" ]]; then + build_all "$ANDROID_NDK" +else + echo "Error: Android NDK not found." + echo "Set ANDROID_NDK_HOME or ANDROID_NDK, or install nix-shell." + exit 1 +fi diff --git a/get_bin.sh b/get_isodrive.sh old mode 100755 new mode 100644 similarity index 100% rename from get_bin.sh rename to get_isodrive.sh