]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
BEE Backport bacula/src/qt-console/tray-monitor/android/make_release.sh
authorHenrique <henrique.faria@baculasystems.com>
Tue, 21 Jul 2020 07:55:57 +0000 (09:55 +0200)
committerEric Bollengier <eric@baculasystems.com>
Tue, 1 Mar 2022 14:36:16 +0000 (15:36 +0100)
This commit is the result of the squash of the following main commits:

Author: Henrique <henrique.faria@baculasystems.com>
Date:   Tue Oct 15 18:12:55 2019 -0300

    android: changed executable name to 'bacula_@arch@'

Author: Henrique <henrique.faria@baculasystems.com>
Date:   Tue Aug 13 21:04:53 2019 -0300

    android: created enterprise and community versions

Author: Henrique <henrique.faria@baculasystems.com>
Date:   Thu Jun 20 18:50:03 2019 -0300

    android: Added FD Background Service to project. Updated Gradle and SDK

Author: Henrique <henrique.faria@baculasystems.com>
Date:   Tue Jun 18 14:23:29 2019 -0300

    android: added static compilation of openssl for both static-bacula-fd and tray-monitor targets

Author: Henrique <henrique.faria@baculasystems.com>
Date:   Mon Jun 17 10:38:16 2019 -0300

    android: fixed addition of libcrypto.so and libssl.so to android apk file

Author: Henrique <henrique.faria@baculasystems.com>
Date:   Thu Jun 13 22:27:20 2019 -0300

    android: added openssl to build-depkgs / make scripts

Author: Henrique <henrique.faria@baculasystems.com>
Date:   Tue Jun 11 20:31:14 2019 -0300

    android: fixed usage of android SDK in make script

Author: Henrique <henrique.faria@baculasystems.com>
Date:   Mon May 27 21:35:26 2019 -0300

    android: changed build files to include static-bacula-fd creation and bundling

Author: Henrique <henrique.faria@baculasystems.com>
Date:   Mon May 27 03:50:37 2019 -0300

    android: added code to unpack / start / stop bacula-fd

Author: Henrique <henrique.faria@baculasystems.com>
Date:   Mon May 20 13:12:56 2019 -0300

    android: Add skip clean option to build scripts

Author: Henrique <henrique.faria@baculasystems.com>
Date:   Sat May 11 19:35:06 2019 -0300

    android: created build-depkgs and make_release scripts. Removed keystore from git. tweak on setenvs script

bacula/src/qt-console/tray-monitor/android/make_release.sh [new file with mode: 0644]

diff --git a/bacula/src/qt-console/tray-monitor/android/make_release.sh b/bacula/src/qt-console/tray-monitor/android/make_release.sh
new file mode 100644 (file)
index 0000000..945a27d
--- /dev/null
@@ -0,0 +1,307 @@
+#!/bin/sh
+#
+#
+
+usage()
+{
+   echo "usage: $0 [-f <keystore-file> -p <keystore-password> -a <android-arch>] ..."
+   echo "  -h                  Displays this usage"
+   echo "  -f <keystore-file>  Path to Keystore File"
+   echo "  -p <keystore-pwd>   Keystore Password"
+   echo "  -a <android-arch>   Desired android architecture"
+   echo "  (Accepted values: "arm", "aarch64", "x86, "x86_64", "mips", "mips64)"
+   echo "  -s                  Skip clean"
+   echo "  -e                  Generate enterprise version"
+   echo ""
+}
+
+setenvs()
+{
+_TOOLCHAIN_NAME=$1
+
+#Used to create NDK's standalone toolchain compiler
+_GCC_VERSION="4.9"
+
+# Set _ANDROID_API to the API you want to use. You should set it
+# to one of: android-26, android-24, etc.
+export ANDROID_API="21"
+
+#####################################################################
+
+# Error checking
+
+# ANDROID_NDK_ROOT should always be set by the user (even when not running this script)
+# http://groups.google.com/group/android-ndk/browse_thread/thread/a998e139aca71d77
+if [ -z "$ANDROID_NDK_ROOT" ] || [ ! -d "$ANDROID_NDK_ROOT" ]; then
+  echo "Error: ANDROID_NDK_ROOT not found. Please, create this Environment Variable"
+  exit 1
+fi
+
+if [ ! -d "$ANDROID_NDK_ROOT/build/tools" ]; then
+  echo "Error: ANDROID_NDK_ROOT/build/tools is not a valid path. Please edit this script."
+  exit 1
+fi
+
+if [ ! -e "$ANDROID_NDK_ROOT/build/tools/make-standalone-toolchain.sh" ]; then
+  echo "Error: $ANDROID_NDK_ROOT/build/tools/make-standalone-toolchain.sh not found. Please edit this script."
+  exit 1
+fi
+
+if [ -z "$QT_ROOT" ] || [ ! -d "$QT_ROOT" ]; then
+  echo "Error: QT_ROOT not found. Please, create this Environment Variable"
+  exit 1
+fi
+
+#####################################################################
+
+#Uses config.guess script to save the system's canonical name
+#This will be used by Bacula's configure script
+#(needed to perform a cross-compilation)
+
+export BUILD_SYSTEM=$(${TOP_DIR}/autoconf/config.guess)
+
+######################################################################
+
+# Figure it out the Standalone Toolchain.
+# If it isn't been created yet, we create one
+# with the "make-standalone-toolchain.sh" script
+# Also, set up $ANDROID_ARCH variable to be used
+# with Bacula's "configure" script
+
+_FULL_TOOLCHAIN_NAME=""
+_ANDROID_ARCH=""
+_QT_LIB_FOLDER=""
+_QT_BIN_FOLDER=""
+_OPENSSL_MACHINE=""
+_OPENSSL_RELEASE=2.6.37
+_OPENSSL_SYSTEM=""
+_OPENSSL_ARCH=""
+
+case ${_TOOLCHAIN_NAME} in
+       "arm")
+      _FULL_TOOLCHAIN_NAME="arm-linux-androideabi"
+      _ANDROID_ARCH="armv7-none-linux-androideabi"
+      _QT_LIB_FOLDER="armeabi-v7a"
+      _QT_BIN_FOLDER="armv7"
+      _OPENSSL_MACHINE=armv7
+      _OPENSSL_SYSTEM=armv7
+      _OPENSSL_ARCH=arm
+         ;;
+       "aarch64")
+      _FULL_TOOLCHAIN_NAME="aarch64-linux-android"
+      _ANDROID_ARCH="aarch64-none-linux-android"
+      _QT_LIB_FOLDER="arm64-v8a"
+      _QT_BIN_FOLDER="$_TOOLCHAIN_NAME"
+      _OPENSSL_MACHINE=armv7
+      _OPENSSL_SYSTEM=armv7
+      _OPENSSL_ARCH=arm
+         ;;
+       "x86")
+      _FULL_TOOLCHAIN_NAME="x86"
+      _ANDROID_ARCH="i686-none-linux-android"
+      _QT_LIB_FOLDER="$_TOOLCHAIN_NAME"
+      _QT_BIN_FOLDER="$_TOOLCHAIN_NAME"
+      _OPENSSL_MACHINE=i686
+      _OPENSSL_SYSTEM=x86
+      _OPENSSL_ARCH=x86
+         ;;
+       "x86_64")
+      _FULL_TOOLCHAIN_NAME="x86_64-linux-android"
+      _ANDROID_ARCH="x86_64-none-linux-android"
+      _QT_LIB_FOLDER="$_TOOLCHAIN_NAME"
+      _QT_BIN_FOLDER="$_TOOLCHAIN_NAME"
+      _OPENSSL_MACHINE=i686
+      _OPENSSL_SYSTEM=x86
+      _OPENSSL_ARCH=x86
+         ;;
+       "mips")
+      _FULL_TOOLCHAIN_NAME="mipsel-linux-android"
+      _ANDROID_ARCH="mipsel-none-linux-android"
+      _QT_LIB_FOLDER="$_TOOLCHAIN_NAME"
+      _QT_BIN_FOLDER="$_TOOLCHAIN_NAME"
+         ;;
+       "mips64")
+      _FULL_TOOLCHAIN_NAME="mips64el-linux-android"
+      _ANDROID_ARCH="mips64el-none-linux-android"
+      _QT_LIB_FOLDER="$_TOOLCHAIN_NAME"
+      _QT_BIN_FOLDER="$_TOOLCHAIN_NAME"
+         ;;
+       *)
+         echo "Invalid Android architecture. Possible values are: 'arm', 'aarch64', 'x86', 'x86_64', 'mips', 'mips64'"
+     exit 1
+         ;;
+esac
+
+export ANDROID_ARCH="$_ANDROID_ARCH"
+export ANDROID_SYSROOT="$ANDROID_NDK_ROOT/platforms/android-$ANDROID_API/arch-$_TOOLCHAIN_NAME/"
+export ANDROID_QT_BUILD_LIBS="libs/$_QT_LIB_FOLDER"
+export ANDROID_QT_QMAKE="$QT_ROOT/android_$_QT_BIN_FOLDER/bin/qmake"
+export ANDROID_QT_APK_MAKE="$QT_ROOT/android_$_QT_BIN_FOLDER/bin/androiddeployqt"
+
+export MACHINE="$_OPENSSL_MACHINE"
+export RELEASE="$_OPENSSL_RELEASE"
+export SYSTEM="$_OPENSSL_SYSTEM"
+export ARCH="$_OPENSSL_ARCH"
+
+export TOOLCHAIN_PATH="$ANDROID_NDK_ROOT"/standalone/"$_TOOLCHAIN_NAME-android-$ANDROID_API"
+
+if [ ! -d "$TOOLCHAIN_PATH" ]; then
+  echo "Creating Standalone Toolchain... (this may take a few seconds)"
+"$ANDROID_NDK_ROOT"/build/tools/make-standalone-toolchain.sh \
+                 --platform="android-$ANDROID_API" \
+                 --toolchain="$_FULL_TOOLCHAIN_NAME-$_GCC_VERSION" \
+                 --install-dir="$TOOLCHAIN_PATH"
+fi
+
+
+######################################################################
+
+# Tries to find the C and C++ compilers
+# inside the Standalone Toolchain location
+
+CC_NAME=""
+CXX_NAME=""
+
+case ${_TOOLCHAIN_NAME} in
+       "x86")
+      CC_NAME="i686-linux-android-gcc"
+      CXX_NAME="i686-linux-android-g++"
+         ;;
+       *)
+         CC_NAME="$_FULL_TOOLCHAIN_NAME-gcc"
+      CXX_NAME="$_FULL_TOOLCHAIN_NAME-g++"
+         ;;
+esac
+
+export CC="$TOOLCHAIN_PATH/bin/$CC_NAME"
+export CXX="$TOOLCHAIN_PATH/bin/$CXX_NAME"
+export CPPFLAGS="-D__ANDROID_API__=$ANDROID_API -fPIC"
+export CXXFLAGS="-fPIC"
+export LDFLAGS="-fPIE -pie"
+export ANDROID_INSTALL_DIR="/data/user/0/org.baculasystems.bmob.alfa/files"
+
+if [ ! -e "$CC" ]; then
+  echo "Error: Toolchain C compiler not found at $CC. Please edit this script."
+  exit 1
+fi
+
+if [ ! -e "$CXX" ]; then
+  echo "Error: Toolchain C++ compiler not found at $CXX. Please edit this script."
+  exit 1
+fi
+
+VERBOSE=1
+if [ ! -z "$VERBOSE" ] && [ "$VERBOSE" != "0" ]; then
+
+  echo "" 
+  echo "######### COMPILER VARIABLES ########" 
+  echo ""
+  echo "BUILD_SYSTEM: $BUILD_SYSTEM"
+  echo "CC:           $CC"
+  echo "CXX:          $CXX"
+  echo "CPPFLAGS:     $CPPFLAGS"
+  echo "LDFLAGS:      $LDFLAGS"
+  echo ""
+  
+  echo "######### ANDROID VARIABLES ########" 
+  echo ""
+  echo "ANDROID_API_LEVEL:   $ANDROID_API"
+  echo "ANDROID_ARCH:        $ANDROID_ARCH"
+  echo "TOOLCHAIN_FULL_NAME: $_FULL_TOOLCHAIN_NAME"
+  echo "ANDROID_INSTALL_DIR: $ANDROID_INSTALL_DIR" 
+  echo "ANDROID_NDK_ROOT:    $ANDROID_NDK_ROOT"
+  echo "ANDROID_SYSROOT:     $ANDROID_SYSROOT"
+  echo "TOOLCHAIN_PATH:      $TOOLCHAIN_PATH"
+  echo ""
+
+  echo "######### QT VARIABLES ########" 
+  echo ""
+  echo "ANDROID_QT_QMAKE:      $ANDROID_QT_QMAKE" 
+  echo "ANDROID_QT_APK_MAKE:   $ANDROID_QT_APK_MAKE" 
+  echo "ANDROID_QT_BUILD_LIBS: (ANDROID-BUILD-DIR)/$ANDROID_QT_BUILD_LIBS" 
+  echo ""
+
+  echo "######### OPENSSL VARIABLES ########" 
+  echo ""
+  echo "OPENSSL_MACHINE:       $MACHINE"
+  echo "OPENSSL_RELEASE:       $RELEASE"
+  echo "OPENSSL_SYSTEM:        $SYSTEM"
+  echo "OPENSSL_ARCH:          $ARCH"
+  echo ""
+fi
+}
+
+#TODO - 'guess' top dir
+TOP_DIR=../../../..
+CWD=${PWD}
+FILED_DIR=${TOP_DIR}/src/filed
+TRAYMON_DIR=${TOP_DIR}/src/qt-console/tray-monitor
+SKIP_CLEAN=
+ENTERPRISE=
+
+while getopts ":f:p:a:sehH:" opt; do
+   case ${opt} in
+   f)
+      export KEYSTORE_FILE="${OPTARG}"
+      ;;
+   p)
+      export KEYSTORE_PASSWORD="${OPTARG}"
+      ;;
+   a)
+      export BMOB_ARCH="${OPTARG}"
+      ;;
+   s) 
+      export SKIP_CLEAN="true"
+      ;;
+   e) 
+      export ENTERPRISE="true"
+      ;;
+   H|h|\?)
+      usage
+      exit 1
+      ;;
+   esac
+done
+
+if [ ! -e "${KEYSTORE_FILE}" ]; then
+  echo "Error: Keystore file not found"
+  exit 1
+fi
+
+export DEPKGS_DIR="${HOME}/android-depkgs"
+
+if [ ! -d "$DEPKGS_DIR" ]; then
+  echo "Error: Android Depkgs folder not found. Please, run 'build-depkgs-android.sh' first."
+  exit 1
+fi
+
+export QT_ROOT=${HOME}/android-depkgs/qt
+export ANDROID_OPENSSL_DIR=${DEPKGS_DIR}/openssl/build-${BMOB_ARCH}
+export ANDROID_NDK_ROOT=${DEPKGS_DIR}/ndk
+export ANDROID_SDK_ROOT=${DEPKGS_DIR}/sdk
+export ANDROID_HOME=${ANDROID_SDK_ROOT}
+export PATH=${PATH}:${ANDROID_HOME}
+
+setenvs $BMOB_ARCH
+
+if [ ! -d "${ANDROID_OPENSSL_DIR}" ]; then
+   rm -rf $ANDROID_OPENSSL_DIR
+   mkdir $ANDROID_OPENSSL_DIR
+   (cd ${DEPKGS_DIR}/src/openssl; make clean)
+   (cd ${DEPKGS_DIR}/src/openssl; ./Configure android-${SYSTEM} no-shared no-asm no-comp no-hw no-engine zlib threads --prefix="${ANDROID_OPENSSL_DIR}")
+   (cd ${DEPKGS_DIR}/src/openssl; make depend)
+   (cd ${DEPKGS_DIR}/src/openssl; make install)
+fi
+
+if [ -z "${SKIP_CLEAN}" ]; then
+   (cd ${TOP_DIR}; ./platforms/android/configure_android.sh)
+   (cd ${TOP_DIR}; make clean)
+   (cd ${TOP_DIR}/src/lib; make)
+   (cd ${TOP_DIR}/src/findlib; make)
+   (cd ${FILED_DIR}; make static-bacula-fd)
+fi
+
+cd ${TRAYMON_DIR}
+./make_release_apk.sh
+cd ${CWD}
+cp -a ${TRAYMON_DIR}/android-build/build/outputs/apk/release/android-build-release.apk ./bacula_${BMOB_ARCH}.apk