#!/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"