Blame scripts/android-build-common.sh

Packit 1fb8d4
#!/bin/bash
Packit 1fb8d4
Packit 1fb8d4
SCRIPT_PATH=$(dirname "${BASH_SOURCE[0]}")
Packit 1fb8d4
SCRIPT_PATH=$(realpath "$SCRIPT_PATH")
Packit 1fb8d4
Packit 1fb8d4
if [ -z $BUILD_ARCH ]; then
Packit Service 5a9772
	BUILD_ARCH="armeabi-v7a x86 x86_64 arm64-v8a"
Packit 1fb8d4
fi
Packit 1fb8d4
Packit 1fb8d4
if [ -z $NDK_TARGET ]; then
Packit 1fb8d4
	NDK_TARGET=21
Packit 1fb8d4
fi
Packit 1fb8d4
Packit Service 5a9772
if [ -z $CMAKE_PROGRAM ]; then
Packit Service 5a9772
  	CMAKE_PROGRAM=$(find $ANDROID_SDK/cmake -name cmake -type f -executable -print -quit)
Packit Service 5a9772
fi
Packit Service 5a9772
Packit 1fb8d4
if [ -z $CCACHE ]; then
Packit 1fb8d4
	CCACHE=$(which ccache)
Packit 1fb8d4
fi
Packit 1fb8d4
Packit 1fb8d4
if [ -z $ANDROID_NDK ]; then
Packit 1fb8d4
	ANDROID_NDK="missing"
Packit 1fb8d4
fi
Packit 1fb8d4
Packit Service 5a9772
if [ -z $ANDROID_SDK ]; then
Packit Service 5a9772
	ANDROID_SDK="missing"
Packit Service 5a9772
fi
Packit Service 5a9772
Packit 1fb8d4
if [ -z $BUILD_DST ]; then
Packit 1fb8d4
	BUILD_DST=$(pwd)/libs
Packit 1fb8d4
fi
Packit 1fb8d4
Packit 1fb8d4
if [ -z $BUILD_SRC ]; then
Packit 1fb8d4
	BUILD_SRC=$(pwd)/src
Packit 1fb8d4
fi
Packit 1fb8d4
Packit 1fb8d4
if [ -z $SCM_URL ]; then
Packit 1fb8d4
	SCM_URL="missing"
Packit 1fb8d4
fi
Packit 1fb8d4
Packit 1fb8d4
if [ -z $SCM_TAG ]; then
Packit 1fb8d4
	SCM_TAG=master
Packit 1fb8d4
fi
Packit 1fb8d4
Packit 1fb8d4
CLEAN_BUILD_DIR=0
Packit 1fb8d4
Packit 1fb8d4
function common_help {
Packit 1fb8d4
	echo "$(BASHSOURCE[0]) supports the following arguments:"
Packit 1fb8d4
	echo "	--ndk	The base directory of your android NDK defa"
Packit 1fb8d4
	echo "			ANDROID_NDK=$ANDROID_NDK"
Packit Service 5a9772
	echo "	--sdk	The base directory of your android SDK defa"
Packit Service 5a9772
	echo "			ANDROID_SDK=$ANDROID_SDK"
Packit 1fb8d4
	echo "	--arch	A list of architectures to build"
Packit 1fb8d4
	echo "			BUILD_ARCH=$BUILD_ARCH"
Packit 1fb8d4
	echo "	--dst	The destination directory for include and library files"
Packit 1fb8d4
	echo "			BUILD_DST=$BUILD_DST"
Packit 1fb8d4
	echo "	--src	The source directory for SCM checkout"
Packit 1fb8d4
	echo "			BUILD_SRC=$BUILD_SRC"
Packit 1fb8d4
	echo "	--url	The SCM source url"
Packit 1fb8d4
	echo "			SCM_URL=$SCM_URL"
Packit 1fb8d4
	echo "	--tag	The SCM branch or tag to check out"
Packit 1fb8d4
	echo "			SCM_TAG=$SCM_TAG"
Packit 1fb8d4
	echo "	--clean	Clean the destination before build"
Packit 1fb8d4
	echo "	--help	Display this help"
Packit 1fb8d4
	exit 0
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
function common_run {
Packit 1fb8d4
	echo "[RUN] $@"
Packit 1fb8d4
	"$@"
Packit 1fb8d4
	RES=$?
Packit 1fb8d4
	if [[ $RES -ne 0 ]];
Packit 1fb8d4
	then
Packit 1fb8d4
		echo "[ERROR] $@ retured $RES"
Packit 1fb8d4
		exit 1
Packit 1fb8d4
	fi
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
function common_parse_arguments {
Packit 1fb8d4
	while [[ $# > 0 ]]
Packit 1fb8d4
	do
Packit 1fb8d4
		key="$1"
Packit 1fb8d4
		case $key in
Packit 1fb8d4
		    --conf)
Packit 1fb8d4
            source "$2"
Packit 1fb8d4
            shift
Packit 1fb8d4
            ;;
Packit 1fb8d4
Packit 1fb8d4
			--target)
Packit 1fb8d4
			NDK_TARGET="$2"
Packit 1fb8d4
			shift
Packit 1fb8d4
			;;
Packit 1fb8d4
Packit 1fb8d4
			--ndk)
Packit 1fb8d4
			ANDROID_NDK="$2"
Packit 1fb8d4
			shift
Packit 1fb8d4
			;;
Packit 1fb8d4
Packit Service 5a9772
			--sdk)
Packit Service 5a9772
			ANDROID_SDK="$2"
Packit Service 5a9772
  	        CMAKE_PROGRAM=$(find $ANDROID_SDK/cmake -name cmake -type f -executable -print -quit)
Packit Service 5a9772
			shift
Packit Service 5a9772
			;;
Packit Service 5a9772
Packit 1fb8d4
			--arch)
Packit 1fb8d4
			BUILD_ARCH="$2"
Packit 1fb8d4
			shift
Packit 1fb8d4
			;;
Packit 1fb8d4
Packit 1fb8d4
			--dst)
Packit 1fb8d4
			BUILD_DST="$2"
Packit 1fb8d4
			shift
Packit 1fb8d4
			;;
Packit 1fb8d4
Packit 1fb8d4
			--src)
Packit 1fb8d4
			BUILD_SRC="$2"
Packit 1fb8d4
			shift
Packit 1fb8d4
			;;
Packit 1fb8d4
Packit 1fb8d4
			--url)
Packit 1fb8d4
			SCM_URL="$2"
Packit 1fb8d4
			shift
Packit 1fb8d4
			;;
Packit 1fb8d4
Packit 1fb8d4
			--tag)
Packit 1fb8d4
			SCM_TAG="$2"
Packit 1fb8d4
			shift
Packit 1fb8d4
			;;
Packit 1fb8d4
Packit 1fb8d4
			--clean)
Packit 1fb8d4
			CLEAN_BUILD_DIR=1
Packit 1fb8d4
			shift
Packit 1fb8d4
			;;
Packit 1fb8d4
Packit 1fb8d4
			--help)
Packit 1fb8d4
			common_help
Packit 1fb8d4
			shift
Packit 1fb8d4
			;;
Packit 1fb8d4
Packit 1fb8d4
			*) # Unknown
Packit 1fb8d4
			;;
Packit 1fb8d4
		esac
Packit 1fb8d4
		shift
Packit 1fb8d4
	done
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
function common_check_requirements {
Packit 1fb8d4
	if [[ ! -d $ANDROID_NDK ]];
Packit 1fb8d4
	then
Packit 1fb8d4
		echo "export ANDROID_NDK to point to your NDK location."
Packit 1fb8d4
		exit 1
Packit 1fb8d4
	fi
Packit 1fb8d4
Packit Service 5a9772
	if [[ ! -d $ANDROID_SDK ]];
Packit Service 5a9772
	then
Packit Service 5a9772
		echo "export ANDROID_SDK to point to your SDK location."
Packit Service 5a9772
		exit 1
Packit Service 5a9772
	fi
Packit 1fb8d4
	if [[ -z $BUILD_DST ]];
Packit 1fb8d4
	then
Packit 1fb8d4
		echo "Destination directory not valid"
Packit 1fb8d4
		exit 1
Packit 1fb8d4
	fi
Packit 1fb8d4
Packit 1fb8d4
	if [[ -z $BUILD_SRC ]];
Packit 1fb8d4
	then
Packit 1fb8d4
		echo "Source directory not valid"
Packit 1fb8d4
		exit 1
Packit 1fb8d4
	fi
Packit 1fb8d4
Packit 1fb8d4
	if [[ -z $SCM_URL ]];
Packit 1fb8d4
	then
Packit 1fb8d4
		echo "Source URL not defined! Define SCM_URL"
Packit 1fb8d4
		exit 1
Packit 1fb8d4
	fi
Packit 1fb8d4
Packit 1fb8d4
	if [[ -z $SCM_TAG ]];
Packit 1fb8d4
	then
Packit 1fb8d4
		echo "SCM TAG / BRANCH not defined! Define SCM_TAG"
Packit 1fb8d4
		exit 1
Packit 1fb8d4
	fi
Packit 1fb8d4
Packit 1fb8d4
	if [[ -z $NDK_TARGET ]];
Packit 1fb8d4
	then
Packit 1fb8d4
		echo "Android platform NDK_TARGET not defined"
Packit 1fb8d4
		exit 1
Packit 1fb8d4
	fi
Packit 1fb8d4
Packit 1fb8d4
	if [ -x $ANDROID_NDK/ndk-build ]; then
Packit 1fb8d4
		NDK_BUILD=$ANDROID_NDK/ndk-build
Packit 1fb8d4
	else
Packit 1fb8d4
		echo "ndk-build not found in NDK directory $ANDROID_NDK"
Packit 1fb8d4
		echo "assuming ndk-build is in path..."
Packit 1fb8d4
		NDK_BUILD=ndk-build
Packit 1fb8d4
	fi
Packit 1fb8d4
Packit Service 5a9772
    if [ -z $CMAKE_PROGRAM ]; then
Packit Service 5a9772
    	CMAKE_PROGRAM=$(find $ANDROID_SDK/cmake -name cmake -type f -executable -print -quit)
Packit Service 5a9772
    fi
Packit 1fb8d4
Packit Service 5a9772
	for CMD in make git $CMAKE_PROGRAM $NDK_BUILD
Packit 1fb8d4
	do
Packit 1fb8d4
		if ! type $CMD >/dev/null; then
Packit 1fb8d4
			echo "Command $CMD not found. Install and add it to the PATH."
Packit 1fb8d4
			exit 1
Packit 1fb8d4
		fi
Packit 1fb8d4
	done
Packit 1fb8d4
Packit 1fb8d4
	if [ "${BUILD_SRC:0:1}" != "/" ];
Packit 1fb8d4
	then
Packit 1fb8d4
		BUILD_SRC=$(pwd)/$BUILD_SRC
Packit 1fb8d4
	fi
Packit 1fb8d4
	if [ "${BUILD_DST:0:1}" != "/" ];
Packit 1fb8d4
	then
Packit 1fb8d4
		BUILD_DST=$(pwd)/$BUILD_DST
Packit 1fb8d4
	fi
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
function common_update {
Packit 1fb8d4
	if [ $# -ne 3 ];
Packit 1fb8d4
	then
Packit 1fb8d4
		echo "Invalid arguments to update function $@"
Packit 1fb8d4
		exit 1
Packit 1fb8d4
	fi
Packit Service 5a9772
	SCM_URL=$1
Packit Service 5a9772
	SCM_TAG=$2
Packit Service 5a9772
	BUILD_SRC=$3
Packit 1fb8d4
Packit 1fb8d4
	echo "Preparing checkout..."
Packit 1fb8d4
	BASE=$(pwd)
Packit Service 5a9772
	CACHE=$SCRIPT_PATH/../cache
Packit Service 5a9772
	common_run mkdir -p $CACHE
Packit Service 5a9772
	TARFILE="$CACHE/$SCM_TAG.tar.gz"
Packit Service 5a9772
	
Packit Service 5a9772
	
Packit Service 5a9772
	if [[ ! -f "$TARFILE" ]];
Packit 1fb8d4
	then
Packit Service 5a9772
		common_run wget -O "$TARFILE" "$SCM_URL/archive/$SCM_TAG.tar.gz"
Packit 1fb8d4
	fi
Packit 1fb8d4
Packit Service 5a9772
	if [[ -d $BUILD_SRC ]];
Packit Service 5a9772
	then
Packit Service 5a9772
		common_run rm -rf $BUILD_SRC
Packit Service 5a9772
	fi
Packit Service 5a9772
	common_run mkdir -p $BUILD_SRC
Packit Service 5a9772
	common_run cd $BUILD_SRC
Packit Service 5a9772
	common_run tar zxf "$TARFILE" --strip 1
Packit 1fb8d4
	common_run cd $BASE
Packit Service 5a9772
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
function common_clean {
Packit 1fb8d4
	if [ $CLEAN_BUILD_DIR -ne 1 ];
Packit 1fb8d4
	then
Packit 1fb8d4
		return
Packit 1fb8d4
	fi
Packit 1fb8d4
Packit 1fb8d4
	if [ $# -ne 1 ];
Packit 1fb8d4
	then
Packit 1fb8d4
		echo "Invalid arguments to clean function $@"
Packit 1fb8d4
		exit 1
Packit 1fb8d4
	fi
Packit 1fb8d4
Packit 1fb8d4
	echo "Cleaning up $1..."
Packit 1fb8d4
	common_run rm -rf $1
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
function common_copy {
Packit 1fb8d4
	if [ $# -ne 2 ];
Packit 1fb8d4
	then
Packit 1fb8d4
		echo "Invalid arguments to copy function $@"
Packit 1fb8d4
		exit 1
Packit 1fb8d4
	fi
Packit 1fb8d4
	if [ ! -d $1 ] || [ ! -d $1/include ] || [ ! -d $1/libs ];
Packit 1fb8d4
	then
Packit 1fb8d4
		echo "Invalid source $1"
Packit 1fb8d4
		exit 1
Packit 1fb8d4
	fi
Packit 1fb8d4
	if [ -z $2 ];
Packit 1fb8d4
	then
Packit 1fb8d4
		echo "Invalid destination $2"
Packit 1fb8d4
		exit 1
Packit 1fb8d4
	fi
Packit 1fb8d4
Packit 1fb8d4
	if [ ! -d $2 ];
Packit 1fb8d4
	then
Packit 1fb8d4
		common_run mkdir -p $2
Packit 1fb8d4
	fi
Packit 1fb8d4
	common_run cp -L -r $1/include $2
Packit 1fb8d4
	common_run cp -L -r $1/libs/* $2
Packit 1fb8d4
}