111 lines
2.6 KiB
Bash
111 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
|
#
|
|
# Copyright (C) 2012 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.
|
|
#
|
|
|
|
#
|
|
# DEPRECATED
|
|
#
|
|
|
|
# This script shows the path of the active toolchain components within
|
|
# the ndk. This was necessary for GCC and binutils, where each ABI had
|
|
# its own tools, but is not needed for LLVM-based tools which should be
|
|
# used in preference.
|
|
|
|
usage() {
|
|
echo "USAGE: ndk-which [--abi ABI] TOOL"
|
|
echo "ABI is 'armeabi-v7a', 'arm64-v8a', 'x86', or 'x86_64'"
|
|
echo "TOOL is 'gdb', 'objdump', 'readelf', etc."
|
|
echo
|
|
echo "Note that LLVM replacements for binutils tools work for all ABIs."
|
|
exit 1
|
|
}
|
|
|
|
error() {
|
|
echo "The tool: $1 doesn't exist"
|
|
echo "Possible choices are: "
|
|
count=0
|
|
for file in $2*
|
|
do
|
|
if [[ $file == *$1 ]]
|
|
then
|
|
echo $file
|
|
((count = count + 1))
|
|
fi
|
|
done
|
|
if [ $count -eq 0 ]
|
|
then
|
|
echo " None "
|
|
fi
|
|
exit 1
|
|
}
|
|
|
|
ABI=armeabi-v7a
|
|
|
|
while (( "$#" )); do
|
|
case "$1" in
|
|
--abi)
|
|
ABI=$2
|
|
shift 2
|
|
abis='^(armeabi-v7a|arm64-v8a|x86|x86_64)$'
|
|
if [[ ! "$ABI" =~ $abis ]]; then usage; fi
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
TOOL=$1
|
|
shift
|
|
|
|
if [ "$#" != 0 -o "$TOOL" == "" ]; then
|
|
usage
|
|
fi
|
|
|
|
# This tool is installed in prebuilt/linux-x86_64/bin/.
|
|
MYNDKDIR=`dirname $0`/../../..
|
|
|
|
# create a temporary skeleton project so that we can leverage build-local.mk
|
|
TMPDIR=/tmp/ndk-which-$$
|
|
mkdir -p $TMPDIR/jni
|
|
cat >$TMPDIR/jni/Android.mk << "END_OF_FILE"
|
|
include $(CLEAR_VARS)
|
|
END_OF_FILE
|
|
|
|
get_build_var_for_abi() {
|
|
if [ -z "$GNUMAKE" ] ; then
|
|
GNUMAKE=make
|
|
fi
|
|
NDK_PROJECT_PATH=$TMPDIR $GNUMAKE --no-print-dir -f $MYNDKDIR/build/core/build-local.mk DUMP_$1 APP_ABI=$2
|
|
}
|
|
LLVM_TOOLCHAIN_PREFIX=`get_build_var_for_abi LLVM_TOOLCHAIN_PREFIX $ABI`
|
|
TOOLCHAIN_PREFIX=`get_build_var_for_abi TOOLCHAIN_PREFIX $ABI`
|
|
rm -Rf $TMPDIR
|
|
|
|
# fully qualified file name
|
|
FQFN=${TOOLCHAIN_PREFIX}$TOOL
|
|
|
|
# use the host system's 'which' to decide/report if the file exists or not, and is executable
|
|
if [ ! -f $FQFN ]
|
|
then
|
|
FQFN=${LLVM_TOOLCHAIN_PREFIX}llvm-$TOOL
|
|
if [ ! -f $FQFN ]
|
|
then
|
|
error $TOOL $LLVM_TOOLCHAIN_PREFIX
|
|
fi
|
|
fi
|
|
which "$FQFN"
|