1*89c4ff92SAndroid Build Coastguard Worker#!/bin/bash 2*89c4ff92SAndroid Build Coastguard Worker# 3*89c4ff92SAndroid Build Coastguard Worker# Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved. 4*89c4ff92SAndroid Build Coastguard Worker# 5*89c4ff92SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT 6*89c4ff92SAndroid Build Coastguard Worker# 7*89c4ff92SAndroid Build Coastguard Worker 8*89c4ff92SAndroid Build Coastguard WorkerCMD=$( basename "$0" ) 9*89c4ff92SAndroid Build Coastguard Worker 10*89c4ff92SAndroid Build Coastguard Worker# Revision or tag that Arm NN has been tested with: 11*89c4ff92SAndroid Build Coastguard WorkerDEFAULT_TENSORFLOW_REVISION=6f692f73cb2043b4a0b0446539cd8c15b3dd9220 # r2.12 + PR #60015 to fix Cmake build. 12*89c4ff92SAndroid Build Coastguard Worker 13*89c4ff92SAndroid Build Coastguard WorkerUsage() { 14*89c4ff92SAndroid Build Coastguard Worker echo "Gets the revision or tag of TensorFlow that this version of Arm NN has been" 15*89c4ff92SAndroid Build Coastguard Worker echo "tested with." 16*89c4ff92SAndroid Build Coastguard Worker echo 17*89c4ff92SAndroid Build Coastguard Worker echo "Usage: $CMD Gets the default TensorFlow revision/tag ($DEFAULT_TENSORFLOW_REVISION)" 18*89c4ff92SAndroid Build Coastguard Worker echo "Usage: $CMD -s <TENSORFLOW_SHA>" 19*89c4ff92SAndroid Build Coastguard Worker echo "Usage: $CMD -p (Print current default revision/tag)" 20*89c4ff92SAndroid Build Coastguard Worker exit 0 21*89c4ff92SAndroid Build Coastguard Worker} 22*89c4ff92SAndroid Build Coastguard Worker 23*89c4ff92SAndroid Build Coastguard WorkerPrintDefaultTensorFlowSha() { 24*89c4ff92SAndroid Build Coastguard Worker echo $DEFAULT_TENSORFLOW_REVISION 25*89c4ff92SAndroid Build Coastguard Worker exit 0; 26*89c4ff92SAndroid Build Coastguard Worker} 27*89c4ff92SAndroid Build Coastguard Worker 28*89c4ff92SAndroid Build Coastguard Workerfunction AssertZeroExitCode { 29*89c4ff92SAndroid Build Coastguard Worker EXITCODE=$? 30*89c4ff92SAndroid Build Coastguard Worker if [ $EXITCODE -ne 0 ]; then 31*89c4ff92SAndroid Build Coastguard Worker echo "$1" 32*89c4ff92SAndroid Build Coastguard Worker echo "+++ Command exited with code $EXITCODE. Please fix the above errors and re-run" 33*89c4ff92SAndroid Build Coastguard Worker exit 1 34*89c4ff92SAndroid Build Coastguard Worker fi 35*89c4ff92SAndroid Build Coastguard Worker} 36*89c4ff92SAndroid Build Coastguard Worker 37*89c4ff92SAndroid Build Coastguard Worker# Revision or tag to check out 38*89c4ff92SAndroid Build Coastguard WorkerTENSORFLOW_REVISION=$DEFAULT_TENSORFLOW_REVISION 39*89c4ff92SAndroid Build Coastguard Worker 40*89c4ff92SAndroid Build Coastguard Worker# process the options given 41*89c4ff92SAndroid Build Coastguard Workerwhile getopts "s:ph" opt; do 42*89c4ff92SAndroid Build Coastguard Worker case "$opt" in 43*89c4ff92SAndroid Build Coastguard Worker s) TENSORFLOW_REVISION="$OPTARG";; 44*89c4ff92SAndroid Build Coastguard Worker p) PrintDefaultTensorFlowSha;; 45*89c4ff92SAndroid Build Coastguard Worker h) Usage;; 46*89c4ff92SAndroid Build Coastguard Worker esac 47*89c4ff92SAndroid Build Coastguard Workerdone 48*89c4ff92SAndroid Build Coastguard Workershift $((OPTIND - 1)) 49*89c4ff92SAndroid Build Coastguard Worker 50*89c4ff92SAndroid Build Coastguard Worker# 51*89c4ff92SAndroid Build Coastguard Worker# This script is designed to be called from anywhere 52*89c4ff92SAndroid Build Coastguard Worker# so it will resolve where to checkout out TensorFlow 53*89c4ff92SAndroid Build Coastguard Worker# relative to its own location in armnn/scripts 54*89c4ff92SAndroid Build Coastguard Worker# 55*89c4ff92SAndroid Build Coastguard WorkerSRC="${BASH_SOURCE[0]}" 56*89c4ff92SAndroid Build Coastguard Worker# resolve $SRC until it is no longer a symlink 57*89c4ff92SAndroid Build Coastguard Workerwhile [ -h "$SRC" ]; do 58*89c4ff92SAndroid Build Coastguard Worker DIR="$( cd -P "$( dirname "$SRC" )" >/dev/null && pwd )" 59*89c4ff92SAndroid Build Coastguard Worker SRC="$(readlink "$SRC")" 60*89c4ff92SAndroid Build Coastguard Worker # if $SRC was a relative symlink, we need to resolve it 61*89c4ff92SAndroid Build Coastguard Worker # relative to the path where the symlink file originally was 62*89c4ff92SAndroid Build Coastguard Worker [[ $SRC != /* ]] && SRC="$DIR/$SRC" 63*89c4ff92SAndroid Build Coastguard Workerdone 64*89c4ff92SAndroid Build Coastguard WorkerDIR="$( cd -P "$( dirname "$SRC" )" >/dev/null && pwd )" 65*89c4ff92SAndroid Build Coastguard Workerpushd "${DIR}" > /dev/null 66*89c4ff92SAndroid Build Coastguard Workercd ../.. || exit 67*89c4ff92SAndroid Build Coastguard Worker 68*89c4ff92SAndroid Build Coastguard Worker# Clone TensorFlow if we don't already have a directory 69*89c4ff92SAndroid Build Coastguard Workerif [ ! -d tensorflow ]; then 70*89c4ff92SAndroid Build Coastguard Worker echo "Cloning TensorFlow" 71*89c4ff92SAndroid Build Coastguard Worker git clone https://github.com/tensorflow/tensorflow.git 72*89c4ff92SAndroid Build Coastguard Worker AssertZeroExitCode "Cloning TensorFlow failed" 73*89c4ff92SAndroid Build Coastguard Workerfi 74*89c4ff92SAndroid Build Coastguard Workerpushd tensorflow > /dev/null 75*89c4ff92SAndroid Build Coastguard Worker 76*89c4ff92SAndroid Build Coastguard Worker# Checkout the TensorFlow revision 77*89c4ff92SAndroid Build Coastguard Workerecho "Checking out ${TENSORFLOW_REVISION}" 78*89c4ff92SAndroid Build Coastguard Workergit fetch && git checkout "${TENSORFLOW_REVISION}" 79*89c4ff92SAndroid Build Coastguard WorkerAssertZeroExitCode "Fetching and checking out ${TENSORFLOW_REVISION} failed" 80*89c4ff92SAndroid Build Coastguard Worker# If the target tensorflow revision includes a branch we also need to do a pull. 81*89c4ff92SAndroid Build Coastguard Worker# This generally occurs with a release branch. 82*89c4ff92SAndroid Build Coastguard Workerif [[ "${TENSORFLOW_REVISION}" == *"branches"* ]]; then 83*89c4ff92SAndroid Build Coastguard Worker git pull 84*89c4ff92SAndroid Build Coastguard Worker AssertZeroExitCode "TensorFlow reference includes a branch but git pull failed." 85*89c4ff92SAndroid Build Coastguard Workerfi 86*89c4ff92SAndroid Build Coastguard Worker 87*89c4ff92SAndroid Build Coastguard Workerpopd > /dev/null # out of tensorflow 88*89c4ff92SAndroid Build Coastguard Workerpopd > /dev/null # back to wherever we were when called 89*89c4ff92SAndroid Build Coastguard Worker# Make sure the SHA of the revision that was checked out is the last line 90*89c4ff92SAndroid Build Coastguard Worker# of output from the script... just in case we ever need it. 91*89c4ff92SAndroid Build Coastguard Workerecho "$TENSORFLOW_REVISION" 92*89c4ff92SAndroid Build Coastguard Workerexit 0 93