#!/bin/sh
#
# Ceres Solver - A fast non-linear least squares minimizer
# Copyright 2012 Google Inc. All rights reserved.
# http://code.google.com/p/ceres-solver/
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
#   this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
#   this list of conditions and the following disclaimer in the documentation
#   and/or other materials provided with the distribution.
# * Neither the name of Google Inc. nor the names of its contributors may be
#   used to endorse or promote products derived from this software without
#   specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# Author: keir@google.com
#         settinger@google.com
#
# Ceres build script for Android. To build the ceres.so libraray for Android,
# cd into an empty directory and run the script. Usage:
#
#   build_android.sh \
#   <path to Android NDK> \
#   <path to Eigen> \
#   <path to Ceres source>
#
#   make
#
# This script exists only to make it easier to get Ceres building on Android;
# as one can see from the code below, it is only a matter of extracting a
# standalone NDK toolchain from the NDK, and getting the right arguments to
# CMake to get it to work.
#
# Android NDK version r5 or higher is required. Jellybean does not work out of
# the box, since the android-cmake toolchain is not yet updated to for it.
#
# Note: You may wish to run 'ccmake .', the CMake curses GUI, in order to tweak
# the build parameters that are set by default. There are a few settings to
# consider changing:
#
# SCHUR_SPECIALIZATIONS:
#
# Consider if enabling the schur specializations is a big enough win for the
# problem you are solving, since compiling the schur specializations
# considerably increases the binary size. Disable them by running 'ccmake .',
# finding the SCHUR_SPECIALIZATIONS variable, hitting enter (toggling to "off"),
# pressing 'c' to generate, then 'g' to generate and exit, followed by 'make'.
#
# EXECUTABLE_OUTPUT_PATH
# LIBRARY_OUTPUT_PATH
# LIBRARY_OUTPUT_PATH_ROOT:
#
# In normal CMake builds, where you do an out of source build, the source
# directory is untouched when building. However, by default the Android CMake
# toolchain selects locations under your *source* tree for the final library
# and binary destinations. For example, if your Ceres git tree is under
# ceres-solver.git/ and the build directory you are using is
# ceres-android-bin/, the resulting binaries will live in ceres-solver.git/
# (but not the intermediate .o files!) By changing the variables
# EXECUTABLE_OUTPUT_PATH, LIBRARY_OUTPUT_PATH, and LIBRARY_OUTPUT_PATH_ROOT to
# something under e.g. ceres-android-bin/ then true out-of-ource builds work.

if [ $# -ne 3 ] ; then
  echo "usage: build_android.sh \\"
  echo "       <path to Android NDK> \\"
  echo "       <path to Eigen> \\"
  echo "       <path to Ceres source>"
  exit 1
fi

if [ -f "CMakeLists.txt" ] ; then
  echo "ERROR: Can't run from inside the source tree."
  echo "       Make a new directory that's not under"
  echo "       the main Ceres source tree."
  exit 1
fi

# For some reason, using the NDK in-place doesn't work even though the
# android-cmake toolchain appears to support it.
#
# TODO(keir): Figure out the issue with the stand-alone NDK and don't create
# the extra stand-alone toolchain. Also test with other NDK versions and add
# explicit checks to ensure a compatible version is used.
ANDROID_NDK=$1
MAKE_ANDROID_TOOLCHAIN=$ANDROID_NDK/build/tools/make-standalone-toolchain.sh
if [ ! -f $MAKE_ANDROID_TOOLCHAIN ] ; then
  echo "ERROR: First argument doesn't appear to be the NDK root; missing:"
  echo "       $MAKE_ANDROID_TOOLCHAIN"
  exit 1
fi

EIGEN_DIR=$2
if [ ! -f $EIGEN_DIR/eigen3.pc.in ] ; then
  echo "ERROR: Second argument doesn't appear to be Eigen3; missing:"
  echo "       $EIGEN_DIR/eigen3.pc.in"
  exit 1
fi

CERES_SOURCE_ROOT=$3
if [ ! -f "$CERES_SOURCE_ROOT/internal/ceres/CMakeLists.txt" ] ; then
  echo "ERROR: Third argument doesn't appear to be the Ceres source directory."
  exit 1
fi
echo "Using Ceres source directory: $CERES_SOURCE_ROOT"

# Make a standalone Android NDK toolchain if needed.
export ANDROID_STANDALONE_TOOLCHAIN="`pwd`/toolchain"
if [ ! -d "$ANDROID_STANDALONE_TOOLCHAIN" ] ; then
  echo "Extracting the Android GCC standalone toolchain to:"
  echo "    $ANDROID_STANDALONE_TOOLCHAIN..."
  $ANDROID_NDK/build/tools/make-standalone-toolchain.sh \
  --platform=android-8 \
  --install-dir=$ANDROID_STANDALONE_TOOLCHAIN
else
  echo "Found NDK standalone toolchain; skipping creation."
fi

# Get the Android CMake NDK toolchain file if needed.
if [ ! -d "android-cmake" ] ; then
  hg clone https://code.google.com/p/android-cmake/
else
  echo "Found Android-CMake toolchain; skipping download."
fi

ANDROID_CMAKE_TOOLCHAIN=android-cmake/toolchain/android.toolchain.cmake
if [ ! -f $ANDROID_CMAKE_TOOLCHAIN ] ; then
  echo "ERROR: It seems the toolchain file is missing:"
  echo "       $ANDROID_CMAKE_TOOLCHAIN"
  exit 1
fi

cmake $CERES_SOURCE_ROOT \
      -DCMAKE_TOOLCHAIN_FILE=$ANDROID_CMAKE_TOOLCHAIN \
      -DCMAKE_BUILD_TYPE=Release \
      -DEIGEN_INCLUDE=$EIGEN_DIR \
      -DBUILD_ANDROID=ON \
      -DSUITESPARSE=OFF \
      -DGFLAGS=OFF \
      -DCXSPARSE=OFF \
      -DPROTOBUF=OFF
