#!/bin/sh
#
# Build the Android libraries without needing a project
# (AndroidManifest.xml, jni/{Application,Android}.mk, etc.)
#
# Usage: androidbuildlibs.sh [arg for ndk-build ...]"
#
# Useful NDK arguments:
#
#  NDK_DEBUG=1          - build debug version
#  NDK_LIBS_OUT=<dest>  - specify alternate destination for installable
#                         modules.
#
# Note that SDLmain is not an installable module (.so) so libSDLmain.a
# can be found in $obj/local/<abi> along with the unstripped libSDL.so.
#


# Android.mk is in srcdir
srcdir=`dirname $0`/..
srcdir=`cd $srcdir && pwd`
cd $srcdir


#
# Create the build directories
#

build=build
buildandroid=$build/android
obj=
lib=
ndk_args=

# Allow an external caller to specify locations.
for arg in $*
do
  if [ "${arg:0:8}" == "NDK_OUT=" ]; then
	obj=${arg#NDK_OUT=}
  elif [ "${arg:0:13}" == "NDK_LIBS_OUT=" ]; then
	lib=${arg#NDK_LIBS_OUT=}
  else
    ndk_args="$ndk_args $arg"
  fi
done

if [ -z $obj ]; then
  obj=$buildandroid/obj
fi
if [ -z $lib ]; then
  lib=$buildandroid/lib
fi

for dir in $build $buildandroid $obj $lib; do
    if test -d $dir; then
        :
    else
        mkdir $dir || exit 1
    fi
done


# APP_* variables set in the environment here will not be seen by the
# ndk-build makefile segments that use them, e.g., default-application.mk.
# For consistency, pass all values on the command line.
ndk-build \
  NDK_PROJECT_PATH=null \
  NDK_OUT=$obj \
  NDK_LIBS_OUT=$lib \
  APP_BUILD_SCRIPT=Android.mk \
  APP_ABI="armeabi-v7a arm64-v8a x86 x86_64" \
  APP_PLATFORM=android-16 \
  APP_MODULES="SDL2 SDL2_main" \
  $ndk_args
