#!/bin/bash --posix # Copyright 2017 The Bazel Authors. All rights reserved. # # 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 was generated from android_device_stub_template.txt. Please # don't edit it directly. # determine our runfiles directory. # largely cribbed from java_stub_template.txt # Call this program X. X was generated by an android_device rule # X may be invoked in many ways: # 1a) directly by a user, with $0 in the output tree # 1b) via 'bazel run' (similar to case 1a) # 2) directly by a user, with $0 in X's runfiles tree # 3) by another program Y which has a data dependency on X, with $0 in Y's # runfiles tree # 4) via 'bazel test --test_strategy=local' # 5) by a genrule cmd, with $0 in the output tree # 6) case 3 in the context of a genrule # 7) as the first argument to --run_under for a run or test action, with $0 in # the output tree - the --blaze_unittest flag identifies this case # # For case 1, $0 will be a regular file, and the runfiles tree will be # at $0.runfiles. # For case 2 or 3, $0 will be a symlink to the file seen in case 1. # For case 4, $TEST_SRCDIR should already be set. # Case 5 is handled like case 1. # Case 6 is handled like case 3. # First normalize $0 to an absolute path and store it in $self case "$0" in /*) self="$0" ;; *) self="$PWD/$0" ;; esac if [[ -z "$DEVICE_RUNFILES" ]]; then while true; do if [[ -e "$self.runfiles" ]]; then # case 1 and 2 DEVICE_RUNFILES="$self.runfiles" break fi if [[ $self == *.runfiles/* ]]; then DEVICE_RUNFILES="${self%.runfiles/*}.runfiles" # don't break; this value is only a last resort for case 6b fi if [[ ! -L "$self" ]]; then break fi # $self is a symbo link... readlink="$(readlink "$self")" if [[ "$readlink" = /* ]]; then # and its absolute, point change self to point to where the # symbolink was pointing. self="$readlink" else # and its relative, since self is absolute, use its location # to determine the absolute location of the symbolic link ref # and repoint self to this new location. self="${self%/*}/$readlink" fi done if [[ -n "$DEVICE_RUNFILES" ]]; then export TEST_SRCDIR=${TEST_SRCDIR:-$DEVICE_RUNFILES} fi if [[ -z "$TEST_SRCDIR" ]]; then echo "$0: Cannot locate runfiles directory." 1>&2 echo ' (Set $DEVICE_RUNFILES to inhibit searching.)' 1>&2 exit 1 fi fi # In case 7 a --blaze_unittest flag indicates that all subsequent argv are test # to be copied into the emulator and run. Otherwise all argv belong to # $unified_launcher. extra_launcher_flags=() test_argv=() is_blaze_unittest=0 for arg; do if ((is_blaze_unittest)); then test_argv+=("${arg}") elif [[ "${arg}" == "--blaze_unittest" ]]; then is_blaze_unittest=1 else extra_launcher_flags+=("${arg}") fi done WORKSPACE_DIR=${TEST_SRCDIR}/%workspace% unified_launcher="${WORKSPACE_DIR}/%unified_launcher%" adb="${WORKSPACE_DIR}/%adb%" emulator_x86="${WORKSPACE_DIR}/%emulator_x86%" emulator_arm="${WORKSPACE_DIR}/%emulator_arm%" adb_static="${WORKSPACE_DIR}/%adb_static%" source_properties_file="${WORKSPACE_DIR}/%source_properties_file%" mksdcard="${WORKSPACE_DIR}/%mksdcard%" empty_snapshot_fs="${WORKSPACE_DIR}/%empty_snapshot_fs%" emulator_system_images="%system_images%" image_input_file="${WORKSPACE_DIR}/%image_input_file%" emulator_metadata_path="${WORKSPACE_DIR}/%emulator_metadata_path%" emulator_bios_files="%bios_files%" android_sdk_path="${WORKSPACE_DIR}/%sdk_path%" system_images='' for image in $emulator_system_images do system_images="${WORKSPACE_DIR}/${image} ${system_images}" done bios_files='' for bios_file in $emulator_bios_files do bios_files="${WORKSPACE_DIR}/${bios_file},${bios_files}" done if [[ -n "${test_argv[0]}" ]]; then # We are trying to run a unittest that's not an APK, e.g. a cc_test. source "%testing_shbase%" || exit 1 adb_port="$(pick_random_unused_tcp_port)" emulator_port="$(pick_random_unused_tcp_port)" extra_launcher_flags=( --adb_port="${adb_port}" --emulator_port="${emulator_port}" "${extra_launcher_flags[@]}" ) fi "${unified_launcher}" \ --action=start \ --flag_configured_android_tools \ --adb="${adb}" \ --emulator_x86="${emulator_x86}" \ --emulator_arm="${emulator_arm}" \ --adb_static="${adb_static}" \ --mksdcard="${mksdcard}" \ --empty_snapshot_fs="${empty_snapshot_fs}" \ --system_images="${system_images}" \ --image_input_file="${image_input_file}" \ --emulator_metadata_path="${emulator_metadata_path}" \ --source_properties_file="${source_properties_file}" \ --bios_files="${bios_files}" \ --android_sdk_path="${android_sdk_path}" \ "${extra_launcher_flags[@]}" || exit 1 if [[ -n "${test_argv[0]}" ]]; then source "%android_runtest%" runtest "localhost:${adb_port}" "${test_argv[@]}" fi