187e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com#!/bin/bash 287e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# 387e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# Copyright (C) 2007 The Android Open Source Project 487e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# 587e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# Licensed under the Apache License, Version 2.0 (the "License"); 687e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# you may not use this file except in compliance with the License. 787e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# You may obtain a copy of the License at 887e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# 987e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# http://www.apache.org/licenses/LICENSE-2.0 1087e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# 1187e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# Unless required by applicable law or agreed to in writing, software 1287e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# distributed under the License is distributed on an "AS IS" BASIS, 1387e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1487e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# See the License for the specific language governing permissions and 1587e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# limitations under the License. 1687e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com 1787e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# Set up prog to be the path of this script, including following symlinks, 1887e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com# and set up progdir to be the fully-qualified pathname of its directory. 1987e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comprog="$0" 2087e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comwhile [ -h "${prog}" ]; do 2187e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com newProg=`/bin/ls -ld "${prog}"` 2287e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com newProg=`expr "${newProg}" : ".* -> \(.*\)$"` 2387e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com if expr "x${newProg}" : 'x/' >/dev/null; then 2487e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com prog="${newProg}" 2587e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com else 2687e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com progdir=`dirname "${prog}"` 2787e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com prog="${progdir}/${newProg}" 2887e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com fi 2987e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comdone 3087e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comoldwd=`pwd` 3187e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comprogdir=`dirname "${prog}"` 3287e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comcd "${progdir}" 3387e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comprogdir=`pwd` 3487e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comprog="${progdir}"/`basename "${prog}"` 3587e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comcd "${oldwd}" 3687e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com 3787e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com 38f3d921d1f8eb52f20440a0e43f604a7aae972e94Ben Gruverjarfile=smalilib.jar 3987e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comlibdir="$progdir" 409b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 419b6ec9471cebdbd68639492825956b96f807e382Ben Gruverif [ ! -r "$libdir/$jarfile" ]; then 429b6ec9471cebdbd68639492825956b96f807e382Ben Gruver # set dx.jar location for the Android tree case 439b6ec9471cebdbd68639492825956b96f807e382Ben Gruver libdir=`dirname "$progdir"`/framework 449b6ec9471cebdbd68639492825956b96f807e382Ben Gruverfi 459b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 469b6ec9471cebdbd68639492825956b96f807e382Ben Gruverif [ ! -r "$libdir/$jarfile" ]; then 4787e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com echo `basename "$prog"`": can't find $jarfile" 4887e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com exit 1 4987e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comfi 5087e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com 5187e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com 529b6ec9471cebdbd68639492825956b96f807e382Ben Gruver# By default, give smali a max heap size of 256 mb. This can be overridden 539b6ec9471cebdbd68639492825956b96f807e382Ben Gruver# by using a "-J" option (see below). 549b6ec9471cebdbd68639492825956b96f807e382Ben GruverdefaultMx="-Xmx256M" 559b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 569b6ec9471cebdbd68639492825956b96f807e382Ben Gruver# The following will extract any initial parameters of the form 579b6ec9471cebdbd68639492825956b96f807e382Ben Gruver# "-J<stuff>" from the command line and pass them to the Java 589b6ec9471cebdbd68639492825956b96f807e382Ben Gruver# invocation (instead of to dx). This makes it possible for you to add 599b6ec9471cebdbd68639492825956b96f807e382Ben Gruver# a command-line parameter such as "-JXmx256M" in your scripts, for 609b6ec9471cebdbd68639492825956b96f807e382Ben Gruver# example. "java" (with no args) and "java -X" give a summary of 619b6ec9471cebdbd68639492825956b96f807e382Ben Gruver# available options. 629b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 639b6ec9471cebdbd68639492825956b96f807e382Ben GruverjavaOpts="" 6487e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com 6587e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comwhile expr "x$1" : 'x-J' >/dev/null; do 669b6ec9471cebdbd68639492825956b96f807e382Ben Gruver opt=`expr "x$1" : 'x-J\(.*\)'` 6787e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com javaOpts="${javaOpts} -${opt}" 689b6ec9471cebdbd68639492825956b96f807e382Ben Gruver if expr "x${opt}" : "xXmx[0-9]" >/dev/null; then 699b6ec9471cebdbd68639492825956b96f807e382Ben Gruver defaultMx="no" 709b6ec9471cebdbd68639492825956b96f807e382Ben Gruver fi 7187e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com shift 7287e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comdone 7387e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com 749b6ec9471cebdbd68639492825956b96f807e382Ben Gruverif [ "${defaultMx}" != "no" ]; then 759b6ec9471cebdbd68639492825956b96f807e382Ben Gruver javaOpts="${javaOpts} ${defaultMx}" 769b6ec9471cebdbd68639492825956b96f807e382Ben Gruverfi 779b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 789b6ec9471cebdbd68639492825956b96f807e382Ben Gruverif [ "$OSTYPE" = "cygwin" ]; then 799b6ec9471cebdbd68639492825956b96f807e382Ben Gruver # For Cygwin, convert the jarfile path into native Windows style. 809b6ec9471cebdbd68639492825956b96f807e382Ben Gruver jarpath=`cygpath -w "$libdir/$jarfile"` 8187e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comelse 829b6ec9471cebdbd68639492825956b96f807e382Ben Gruver jarpath="$libdir/$jarfile" 8387e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comfi 8487e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.com 8587e8649095ee594a7bd9a80728c809c9e54154d9JesusFreke@JesusFreke.comexec java $javaOpts -jar "$jarpath" "$@" 86