#!/bin/bash
#
# Copyright (C) 2011 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

lib=-XXlib:libart.so
invoke_with=

while true; do
  if [ "$1" = "--invoke-with" ]; then
    shift
    invoke_with="$1"
    shift
  elif [ "$1" = "-d" ]; then
    lib="-XXlib:libartd.so"
    shift
  elif expr "$1" : "--" >/dev/null 2>&1; then
    echo "unknown option: $1" 1>&2
    exit 1
  else
    break
  fi
done

function follow_links() {
  file="$1"
  while [ -h "$file" ]; do
    # On Mac OS, readlink -f doesn't work.
    file="$(readlink "$file")"
  done
  echo "$file"
}

PROG_NAME="$(follow_links "$BASH_SOURCE")"
PROG_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
ANDROID_BUILD_TOP="$(cd "${PROG_DIR}/../../../../" ; pwd -P)/"
ANDROID_HOST_OUT=$PROG_DIR/..
ANDROID_DATA=$PWD/android-data$$
DALVIKVM_EXECUTABLE=$ANDROID_HOST_OUT/bin/dalvikvm

function find_libdir() {
  if [ "$(readlink "$DALVIKVM_EXECUTABLE")" = "dalvikvm64" ]; then
    echo "lib64"
  else
    echo "lib"
  fi
}

LD_LIBRARY_PATH=$ANDROID_HOST_OUT/"$(find_libdir)"

mkdir -p $ANDROID_DATA/dalvik-cache/{x86,x86_64}
ANDROID_DATA=$ANDROID_DATA \
  ANDROID_ROOT=$ANDROID_HOST_OUT \
  LD_LIBRARY_PATH=$LD_LIBRARY_PATH \
  $invoke_with $DALVIKVM_EXECUTABLE $lib \
    -Ximage:$ANDROID_HOST_OUT/framework/core.art \
     "$@"
EXIT_STATUS=$?
rm -rf $ANDROID_DATA
exit $EXIT_STATUS
