xref: /aosp_15_r20/external/armnn/scripts/get_tensorflow.sh (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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