Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save roscopecoltran/54cb059bd43a886641679e30400fcc79 to your computer and use it in GitHub Desktop.
Save roscopecoltran/54cb059bd43a886641679e30400fcc79 to your computer and use it in GitHub Desktop.
Hunter + Polly quick cross-compilation - QT5 camera (iOS, MacOSX, Android, Linux)
#!/bin/bash
# Author: Rosco Pecoltran
# Year: 2017
# Android NDK
cp ~/.bash_profile ~/.bash_profile.save.before.hunter
# set active ndk (available options: r10e, r11c, r12b, r13b, r14...)
# ref. use ./install-android-ndk.sh for custom version (eg ./install-android-ndk.sh r14
export ACTIVE_ANDROID_NDK=r10e
echo "export ACTIVE_ANDROID_NDK=r10e" >> ~/.bash_profile
# download android-ndk-r10e
mkdir -p ~/helpers/android/ndks
# extract tarball
wget -nc -q --no-check-certificate -P /Users/Luccio/helpers/android/ndks https://dl.google.com/android/repository/android-ndk-r10e-darwin-x86_64.zip
# export env variables related to Android NDK
echo "export ANDROID_NDKS_PREFIX_PATH=~/helpers/android/ndks/" >> ~/.bash_profile
echo "export ANDROID_NDK_r10e=\"$ANDROID_NDKS_PREFIX_PATH/android-ndk-r10e\"" >> ~/.bash_profile
#
echo "export HUNTER_ROOT=~/helpers/hunter" >> ~/.bash_profile
echo "export POLLY_ROOT=~/helpers/polly" >> ~/.bash_profile
echo "export PATH=$PATH:$POLLY_ROOT/bin" >> ~/.bash_profile
source ~/.bash_profile
git clone --recursive --depth=1 https://github.com/ruslo/hunter $HUNTER_ROOT
git clone --recursive --depth=1 https://github.com/ruslo/polly $POLLY_ROOT
## Qt5 Camera
cd $HUNTER_ROOT/examples/qt-camera
### for iOS
build.py --toolchain=ios-10-2 --config Release \
--jobs 4 \
--clear \
--reconfig \
--ios-combined \
--ios-multiarch \
--fwd HUNTER_CONFIGURATION_TYPES=Release \
BUILD_SHARED_LIBS=OFF
### for Android
build.py --toolchain=android-ndk-r10e-api-21-armeabi-v7a-neon \
--config Release \
--jobs 4 \
--fwd HUNTER_CONFIGURATION_TYPES=Release \
ANDROID=TRUE \
BUILD_SHARED_LIBS=OFF
### for Linux
build.py --toolchain=gcc \
--config Release \
--jobs 4 \
--fwd HUNTER_CONFIGURATION_TYPES=Release \
BUILD_SHARED_LIBS=OFF
### for MacOSX
build.py --toolchain=osx-10-12 \
--config Release \
--jobs 4 \
--fwd HUNTER_CONFIGURATION_TYPES=Release \
BUILD_SHARED_LIBS=OFF
open $HUNTER_ROOT/examples/qt-camera
#!/bin/bash
# default version to install
ANDROID_NDK_VERSION=${1:-r13b}
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
clear
echo
echo "[Sniper] *** Download and install *** Android NDK on your workspace"
# determine platform
CURRENT_PLATFORM_UNAME_INFO=$(uname -a)
CURRENT_PLATFORM_UNAME_ARCH=$(uname -m)
CMD_UTILITY_WGET=$(which wget)
CMD_UTILITY_CURL=$(which curl)
CMD_UTILITY_MD5=$(which md5)
CMD_UTILITY_OPENSSL=$(which openssl)
CMD_UTILITY_SHA1="openssl sha1"
CMD_UTILITY_ZIP=$(which zip)
CMD_UTILITY_UNZIP=$(which unzip)
CMD_UTILITY_TAR=$(which tar)
# (values: MACOSX, MACOSX32, MACOSX64, LINUX, LINUX32, LINUX64, WIN32, WIN64)
if [[ $CURRENT_PLATFORM_UNAME_INFO == *"Darwin"* ]]; then
CURRENT_PLATFORM_HOME_PREFIX_PATH=$(echo ~)
CURRENT_PLATFORM_ALIAS="MACOSX"
CURRENT_PLATFORM_NAME=$(uname)
ANDROID_NDKS_PREFIX_PATH="${CURRENT_PLATFORM_HOME_PREFIX_PATH}/helpers/android/ndks"
mkdir -p ${ANDROID_NDKS_PREFIX_PATH}
elif [[ $CURRENT_PLATFORM_UNAME_INFO == *"Darwin"* ]]; then
CURRENT_PLATFORM_ALIAS="LINUX"
CURRENT_PLATFORM_HOME_PREFIX_PATH=$(echo ~) # not sure for this one too
CURRENT_PLATFORM_NAME=$(uname) # not sure for linux, need to check in a docker container
ANDROID_NDKS_PREFIX_PATH="${CURRENT_PLATFORM_HOME_PREFIX_PATH}/dev/android/ndks"
mkdir -p ${ANDROID_NDKS_PREFIX_PATH}
else
echo
echo "[Sniper - Fatal] Need to auto-setup for other platform than Darwin or Linux platform for the moment."
echo
exit 1
fi
# default install behaviour
ANDROID_NDKS_DL_VERBOSE=TRUE
ANDROID_NDKS_DL_DRY_TEST=TRUE
ANDROID_NDKS_DL_ENV_LINKS="env-android-ndks-direct-links.sh"
# load available android ndks direct links
# note: separate script as loads of exceptions and evolutions have impacted android ndks since 2012, and changing download link schemes
. ${CURRENT_DIR}/${ANDROID_NDKS_DL_ENV_LINKS}
# android ndk (revision version, workstation arch, install prefix path)
ANDROID_NDK_PLATFORM=${CURRENT_PLATFORM_NAME}
ANDROID_NDK_PLATFORM_ARCH=${CURRENT_PLATFORM_UNAME_ARCH}
ANDROID_NDK_DESTINATION_FOLDER="android-ndk-${ANDROID_NDK_VERSION}"
ANDROID_NDK_TARBALL_PREFIX_VAR="ANDROID_NDK_${ANDROID_NDK_VERSION}_${CURRENT_PLATFORM_ALIAS}"
ANDROID_NDK_TARBALL_SHA1="ANDROID_NDK_${ANDROID_NDK_VERSION}_${CURRENT_PLATFORM_ALIAS}_SHA1"
ANDROID_NDK_TARBALL_BASENAME=$(basename ${!ANDROID_NDK_TARBALL_PREFIX_VAR})
echo
echo "[Sniper - Env]"
echo "[Sniper - Env] *** Workdir (current): ${CURRENT_DIR}"
echo "[Sniper - Env] *** Platform (current): ${CURRENT_PLATFORM_NAME}"
echo "[Sniper - Env] *** Platform alias: ${CURRENT_PLATFORM_ALIAS}"
echo "[Sniper - Env] *** Android NDK(s) prefix path: ${ANDROID_NDKS_PREFIX_PATH}"
echo "[Sniper - Env]"
echo
echo "[Sniper - Utils]"
echo "[Sniper - Utils] *** Download utilities:"
echo "[Sniper - Utils]"
echo "[Sniper - Utils] *** curl: ${CMD_UTILITY_CURL}"
echo "[Sniper - Utils] *** wget: ${CMD_UTILITY_WGET}"
echo "[Sniper - Utils]"
echo "[Sniper - Utils] *** Compression utilities"
echo "[Sniper - Utils]"
echo "[Sniper - Utils] *** zip: ${CMD_UTILITY_ZIP}"
echo "[Sniper - Utils] *** unzip: ${CMD_UTILITY_UNZIP}"
echo "[Sniper - Utils] *** tar: ${CMD_UTILITY_TAR}"
echo "[Sniper - Utils]"
echo
echo "[Sniper - Install]"
echo "[Sniper - Install] *** Android NDK(s) download args"
echo "[Sniper - Install] *** Revision: ${ANDROID_NDK_VERSION}, Platform: ${ANDROID_NDK_PLATFORM}, Architecture: ${ANDROID_NDK_PLATFORM_ARCH}"
echo "[Sniper - Install] *** Workstation: ${CURRENT_PLATFORM_ALIAS}"
echo "[Sniper - Install] *** Link: ${!ANDROID_NDK_TARBALL_PREFIX_VAR}"
echo "[Sniper - Install] *** Tarball Basename: ${ANDROID_NDK_TARBALL_BASENAME}"
echo "[Sniper - Install]"
echo
echo "[Sniper - Options]"
echo "[Sniper - Options] *** Verbose? ${ANDROID_NDKS_DL_VERBOSE}"
echo "[Sniper - Options] *** !!! Run dry test? ${ANDROID_NDKS_DL_DRY_TEST} !!! "
echo "[Sniper - Options] *** !!! Destination prefix path: ${ANDROID_NDKS_PREFIX_PATH} !!!"
echo "[Sniper - Options] *** !!! Destination folder name: ${ANDROID_NDK_DESTINATION_FOLDER} !!!"
echo "[Sniper - Options]"
# download specific revision function
function download_android_ndk_tarball
{
ANDROID_NDK_DOWNLOAD_VERBOSE=${1:-TRUE}
ANDROID_NDK_DOWNLOAD_DRYTEST=${2:-TRUE}
# default variable if not set
echo
echo "[Sniper - Debug]"
ANDROID_NDK_TARGET_VERSION=${ANDROID_NDK_VERSION:-r10e}
echo "[Sniper - Debug] *** ANDROID_NDK_TARGET_VERSION: ${ANDROID_NDK_TARGET_VERSION}"
ANDROID_NDK_TARGET_PLATFORM=${CURRENT_PLATFORM_NAME:-darwin}
echo "[Sniper - Debug] *** ANDROID_NDK_TARGET_PLATFORM: ${ANDROID_NDK_TARGET_PLATFORM}"
ANDROID_NDK_TARGET_PLATFORM_ARCH=${ANDROID_NDK_PLATFORM_ARCH:-x86_64}
echo "[Sniper - Debug] *** ANDROID_NDK_TARGET_PLATFORM_ARCH: ${ANDROID_NDK_TARGET_PLATFORM_ARCH}"
ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH="${ANDROID_NDKS_PREFIX_PATH:-/home/dev/helpers/android/ndks/.downloads}"
# tidy this plz
mkdir -p ${ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH}/.downloads
ANDROID_NDK_TARGET_DESTINATION_PREFIX_PATH="${ANDROID_NDKS_PREFIX_PATH:-/home/dev/helpers/android/ndks}"
echo "[Sniper - Debug] *** ANDROID_NDK_TARGET_DESTINATION_PREFIX_PATH: ${ANDROID_NDK_TARGET_DESTINATION_PREFIX_PATH}"
ANDROID_NDK_TARGET_DESTINATION_FOLDER=${ANDROID_NDK_DESTINATION_FOLDER:-r10e}
echo "[Sniper - Debug] *** ANDROID_NDK_TARGET_DESTINATION_FOLDER: ${ANDROID_NDK_TARGET_DESTINATION_FOLDER}"
ANDROID_NDK_TARGET_DESTINATION_FULLPATH="${ANDROID_NDK_TARGET_DESTINATION_PREFIX_PATH}/${ANDROID_NDK_TARGET_DESTINATION_FOLDER}"
echo "[Sniper - Debug] *** ANDROID_NDK_TARGET_DESTINATION_FULLPATH: ${ANDROID_NDK_TARGET_DESTINATION_FULLPATH}"
ANDROID_NDK_TARGET_DESTINATION_BASENAME=$(basename ${!ANDROID_NDK_TARBALL_PREFIX_VAR})
echo
echo "[Sniper - Sub-Task ] *** Check if local tarball exists ***"
#if [ -f "${ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH}/${ANDROID_NDK_TARBALL_BASENAME}" ]; then
#echo
#echo "[Sniper - |-check ] *** [EXISTS] ${ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH}/${ANDROID_NDK_TARBALL_BASENAME} file exists !!!!"
#ANDROID_NDK_TARBALL_LOCAL_EXISTS=TRUE
#ANDROID_NDK_TARBALL_LOCAL_MD5=$(${CMD_UTILITY_MD5} "${ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH}/${ANDROID_NDK_TARBALL_BASENAME}" | awk '{ print $4 }')
#ANDROID_NDK_TARBALL_LOCAL_SHA1=$(${CMD_UTILITY_SHA1} ${ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH}/${ANDROID_NDK_TARBALL_BASENAME})
#echo
#echo "[Sniper - |-Execute ] *** $ ${CMD_UTILITY_MD5} ${ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH}/${ANDROID_NDK_TARBALL_BASENAME}"
#echo "[Sniper - |-Execute ] *** $ ${CMD_UTILITY_SHA1} ${ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH}/${ANDROID_NDK_TARBALL_BASENAME}"
#echo
#echo "[Sniper - |- Output: ] *** local sha1 checksum: ${ANDROID_NDK_TARBALL_LOCAL_SHA1}"
#echo "[Sniper - |- - ] *** expected sha1 checksum: ${!ANDROID_NDK_TARBALL_SHA1}"
#echo
#if [ "${ANDROID_NDK_TARBALL_LOCAL_MD5}" != "${!ANDROID_NDK_TARBALL_SHA1}" ]; then
#rm -fR "${ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH}/${ANDROID_NDK_TARBALL_BASENAME}"
#fi
#else
#echo "[Sniper - |-check ] *** [MISSING] ${ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH}/${ANDROID_NDK_TARBALL_BASENAME} file missing !!!!"
#fi
echo
echo "[Sniper - Sub-Task ] *** Download tarball ***"
echo "[Sniper - |-Execute ] $ ${CMD_UTILITY_WGET} -nc -q --no-check-certificate -P ${ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH} ${!ANDROID_NDK_TARBALL_PREFIX_VAR}"
echo "[Sniper - |- Output ] *** destination download file *** : ${ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH}/${ANDROID_NDK_TARBALL_BASENAME}"
# wget opts:
# -q (quiet)
# -nc (no duplicate)
${CMD_UTILITY_WGET} --no-check-certificate -P ${ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH} ${!ANDROID_NDK_TARBALL_PREFIX_VAR}
echo
echo "[Sniper - Sub-Task ] *** Extract tarball ***"
echo "[Sniper - |-Execute ] $ ${CMD_UTILITY_ZIP} ${ANDROID_NDK_TARBALL_DESTINATION_PREFIX_PATH}/${ANDROID_NDK_TARBALL_BASENAME} -d ${ANDROID_NDK_TARGET_DESTINATION_FOLDER}"
echo "[Sniper - |- Output ] *** destination extract file"
${CMD_UTILITY_ZIP} ${ANDROID_NDK_TARGET_DESTINATION_FOLDER}
echo
echo "[Sniper - Sub-Task ] *** Load env vars into user's profile ***"
echo "[Sniper - |-Execute ] $ export ANDROID_NDK_${ANDROID_NDK_VERSION}=\"$ANDROID_NDKS_PREFIX_PATH/android-ndk-${ANDROID_NDK_VERSION}\""
echo "[Sniper - |- Output ] *** load new environment variables for: Android NDK ${ANDROID_NDK_VERSION}"
echo
echo "export ANDROID_NDK_${ANDROID_NDK_VERSION}=\"$ANDROID_NDKS_PREFIX_PATH/android-ndk-${ANDROID_NDK_VERSION}\"" >> ~/.bash_profile
}
echo
echo "[Sniper - Execute] *** $ download_android_ndk_tarball TRUE TRUE"
download_android_ndk_tarball
echo
echo "[Sniper - Finished] "
echo
#download_android_ndk_tarball ${ANDROID_NDK_VERSION} ${ANDROID_NDK_PLATFORM} ${ANDROID_NDK_PLATFORM_ARCH} ${ANDROID_NDK_DESTINATION_PREFIX_PATH} ${ANDROID_NDK_DESTINATION_FOLDER}
# alias dl_latest_ndk=download_tarball latest
# all available direct links exported to env vars
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment