# 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. # This script is used on host and device. It uses a common subset # shell dialect that should work on the host (e.g. bash), and # Android (e.g. mksh). function follow_links() { if [ z"$BASH_SOURCE" != z ]; then file="$BASH_SOURCE" else file="$0" fi while [ -h "$file" ]; do # On Mac OS, readlink -f doesn't work. file="$(readlink "$file")" done echo "$file" } function find_libdir() { # Use realpath instead of readlink because Android does not have a readlink. if [ "$(realpath "$ANDROID_ROOT/bin/$DALVIKVM")" = "$(realpath "$ANDROID_ROOT/bin/dalvikvm64")" ]; then echo "lib64" else echo "lib" fi } invoke_with= DALVIKVM=dalvikvm LIBART=libart.so while true; do if [ "$1" = "--invoke-with" ]; then shift invoke_with="$invoke_with $1" shift elif [ "$1" = "-d" ]; then LIBART="libartd.so" shift elif [ "$1" = "--32" ]; then DALVIKVM=dalvikvm32 shift elif [ "$1" = "--64" ]; then DALVIKVM=dalvikvm64 shift elif [ "$1" = "--perf" ]; then PERF="record" shift elif [ "$1" = "--perf-report" ]; then PERF="report" shift elif expr "$1" : "--" >/dev/null 2>&1; then echo "unknown option: $1" 1>&2 exit 1 else break fi done PROG_NAME="$(follow_links)" PROG_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)" ANDROID_ROOT=$PROG_DIR/.. LIBDIR=$(find_libdir) LD_LIBRARY_PATH=$ANDROID_ROOT/$LIBDIR DELETE_ANDROID_DATA=false # If ANDROID_DATA is the system ANDROID_DATA or is not set, use our own, # and ensure we delete it at the end. if [ "$ANDROID_DATA" = "/data" ] || [ "$ANDROID_DATA" = "" ]; then ANDROID_DATA=$PWD/android-data$$ mkdir -p $ANDROID_DATA/dalvik-cache/{arm,arm64,x86,x86_64} DELETE_ANDROID_DATA=true fi if [ z"$PERF" != z ]; then invoke_with="perf record -o $ANDROID_DATA/perf.data -e cycles:u $invoke_with" fi ANDROID_DATA=$ANDROID_DATA \ ANDROID_ROOT=$ANDROID_ROOT \ LD_LIBRARY_PATH=$LD_LIBRARY_PATH \ PATH=$ANDROID_ROOT/bin:$PATH \ $invoke_with $ANDROID_ROOT/bin/$DALVIKVM $lib \ -XXlib:$LIBART \ -Xnorelocate \ -Ximage:$ANDROID_ROOT/framework/core.art \ -Xcompiler-option --generate-debug-info \ "$@" EXIT_STATUS=$? if [ z"$PERF" != z ]; then if [ z"$PERF" = zreport ]; then perf report -i $ANDROID_DATA/perf.data fi echo "Perf data saved in: $ANDROID_DATA/perf.data" else if [ "$DELETE_ANDROID_DATA" = "true" ]; then rm -rf $ANDROID_DATA fi fi exit $EXIT_STATUS