xref: /aosp_15_r20/external/armnn/scripts/get_compute_library.sh (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker#!/bin/bash
2*89c4ff92SAndroid Build Coastguard Worker#
3*89c4ff92SAndroid Build Coastguard Worker# Copyright © 2018-2023 Arm Ltd. All rights reserved.
4*89c4ff92SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT
5*89c4ff92SAndroid Build Coastguard Worker#
6*89c4ff92SAndroid Build Coastguard Worker
7*89c4ff92SAndroid Build Coastguard WorkerCMD=$( basename "$0" )
8*89c4ff92SAndroid Build Coastguard Worker
9*89c4ff92SAndroid Build Coastguard Worker# For pinning to a ref use this:
10*89c4ff92SAndroid Build Coastguard Worker#DEFAULT_CLFRAMEWORKREVISION="branches/arm_compute_23_02" # Release 23.02
11*89c4ff92SAndroid Build Coastguard Worker#
12*89c4ff92SAndroid Build Coastguard Worker# For pinning to a revision use this:
13*89c4ff92SAndroid Build Coastguard WorkerDEFAULT_CLFRAMEWORKREVISION="467daef993fe29cc4319058200b7ad797398e4b0" #9454: Implement CL kernel for a native batched matmul Quantized - LHS transposed, RHS transposed
14*89c4ff92SAndroid Build Coastguard Worker
15*89c4ff92SAndroid Build Coastguard Workerusage() {
16*89c4ff92SAndroid Build Coastguard Worker  echo -e "get_compute_library.sh: Clones the Arm Compute Library (ACL) repo from the ML Platform server and checks out
17*89c4ff92SAndroid Build Coastguard Worker  the pinned version of ACL based on the SHA string defined at the top of this script (DEFAULT_CLFRAMEWORKREVISION).
18*89c4ff92SAndroid Build Coastguard Worker  If the ACL repo already exists, this script will skip cloning and only checkout the relevant SHA.
19*89c4ff92SAndroid Build Coastguard Worker  The pinned ACL version is a known version that works correctly with the version of Arm NN being used. This pin is
20*89c4ff92SAndroid Build Coastguard Worker  regularly updated by the Arm NN team on the Arm NN 'main' branch.
21*89c4ff92SAndroid Build Coastguard Worker  During release periods, the ACL pin will point to an ACL release branch which exists on the ML Platform server.
22*89c4ff92SAndroid Build Coastguard Worker  The repo directory will be named 'clframework' unless defined by the '-n' argument to this script.\n"
23*89c4ff92SAndroid Build Coastguard Worker  echo "Usage: $CMD (Use the default clframework SHA)"
24*89c4ff92SAndroid Build Coastguard Worker  echo "Usage: $CMD -s <CLFRAMEWORK_SHA>"
25*89c4ff92SAndroid Build Coastguard Worker  echo "Usage: $CMD -p (Print current default clframework SHA)"
26*89c4ff92SAndroid Build Coastguard Worker  echo "Usage: $CMD -n Name of the directory into which the ACL repo will be cloned, default is 'clframework'"
27*89c4ff92SAndroid Build Coastguard Worker  exit 0
28*89c4ff92SAndroid Build Coastguard Worker}
29*89c4ff92SAndroid Build Coastguard Worker
30*89c4ff92SAndroid Build Coastguard WorkerPrintDefaultClframeworkSha() {
31*89c4ff92SAndroid Build Coastguard Worker  echo $DEFAULT_CLFRAMEWORKREVISION
32*89c4ff92SAndroid Build Coastguard Worker  exit 0;
33*89c4ff92SAndroid Build Coastguard Worker}
34*89c4ff92SAndroid Build Coastguard Worker
35*89c4ff92SAndroid Build Coastguard Workerfunction AssertZeroExitCode {
36*89c4ff92SAndroid Build Coastguard Worker  EXITCODE=$?
37*89c4ff92SAndroid Build Coastguard Worker  if [ $EXITCODE -ne 0 ]; then
38*89c4ff92SAndroid Build Coastguard Worker    echo "$1"
39*89c4ff92SAndroid Build Coastguard Worker    echo "+++ Command exited with code $EXITCODE. Please fix the above errors and re-run"
40*89c4ff92SAndroid Build Coastguard Worker    exit 1
41*89c4ff92SAndroid Build Coastguard Worker  fi
42*89c4ff92SAndroid Build Coastguard Worker}
43*89c4ff92SAndroid Build Coastguard Worker
44*89c4ff92SAndroid Build Coastguard Worker# process the options given
45*89c4ff92SAndroid Build Coastguard Workerwhile getopts "s:n:ph" opt; do
46*89c4ff92SAndroid Build Coastguard Worker  case "$opt" in
47*89c4ff92SAndroid Build Coastguard Worker    s) CLFRAMEWORK_SHA="$OPTARG";;
48*89c4ff92SAndroid Build Coastguard Worker    p) PrintDefaultClframeworkSha;;
49*89c4ff92SAndroid Build Coastguard Worker    n) ACL_REPO_NAME_OPTION="$OPTARG";;
50*89c4ff92SAndroid Build Coastguard Worker    h|\?) usage;;
51*89c4ff92SAndroid Build Coastguard Worker  esac
52*89c4ff92SAndroid Build Coastguard Workerdone
53*89c4ff92SAndroid Build Coastguard Workershift $((OPTIND - 1))
54*89c4ff92SAndroid Build Coastguard Worker
55*89c4ff92SAndroid Build Coastguard Worker#
56*89c4ff92SAndroid Build Coastguard Worker# This script is designed to be called from anywhere
57*89c4ff92SAndroid Build Coastguard Worker# so it will resolve where to checkout out the clframework
58*89c4ff92SAndroid Build Coastguard Worker# relative to its own location in armnn/scripts
59*89c4ff92SAndroid Build Coastguard Worker#
60*89c4ff92SAndroid Build Coastguard WorkerSRC="${BASH_SOURCE[0]}"
61*89c4ff92SAndroid Build Coastguard Worker# resolve $SRC until it is no longer a symlink
62*89c4ff92SAndroid Build Coastguard Workerwhile [ -h "$SRC" ]; do
63*89c4ff92SAndroid Build Coastguard Worker  DIR="$( cd -P "$( dirname "$SRC" )" >/dev/null && pwd )"
64*89c4ff92SAndroid Build Coastguard Worker  SRC="$(readlink "$SRC")"
65*89c4ff92SAndroid Build Coastguard Worker  # if $SRC was a relative symlink, we need to resolve it
66*89c4ff92SAndroid Build Coastguard Worker  # relative to the path where the symlink file originally was
67*89c4ff92SAndroid Build Coastguard Worker  [[ $SRC != /* ]] && SRC="$DIR/$SRC"
68*89c4ff92SAndroid Build Coastguard Workerdone
69*89c4ff92SAndroid Build Coastguard WorkerDIR="$( cd -P "$( dirname "$SRC" )" >/dev/null && pwd )"
70*89c4ff92SAndroid Build Coastguard Workerpushd "${DIR}" > /dev/null
71*89c4ff92SAndroid Build Coastguard Worker# shellcheck disable=SC2164
72*89c4ff92SAndroid Build Coastguard Workercd ../..
73*89c4ff92SAndroid Build Coastguard Worker
74*89c4ff92SAndroid Build Coastguard Worker# Default ACL repo directory name is 'clframework'
75*89c4ff92SAndroid Build Coastguard Worker# This can be overwritten by command line option '-n'
76*89c4ff92SAndroid Build Coastguard WorkerACL_REPO_NAME="clframework"
77*89c4ff92SAndroid Build Coastguard Workerif [ ! -z "$ACL_REPO_NAME_OPTION" ]; then
78*89c4ff92SAndroid Build Coastguard Worker  ACL_REPO_NAME="$ACL_REPO_NAME_OPTION"
79*89c4ff92SAndroid Build Coastguard Workerfi
80*89c4ff92SAndroid Build Coastguard Worker
81*89c4ff92SAndroid Build Coastguard Workerif [ ! -d "$ACL_REPO_NAME" ]; then
82*89c4ff92SAndroid Build Coastguard Worker  echo "Cloning CL Framework"
83*89c4ff92SAndroid Build Coastguard Worker  git clone https://review.mlplatform.org/ml/ComputeLibrary "$ACL_REPO_NAME"
84*89c4ff92SAndroid Build Coastguard Worker  AssertZeroExitCode "Cloning CL Framework failed"
85*89c4ff92SAndroid Build Coastguard Workerfi
86*89c4ff92SAndroid Build Coastguard Workerpushd "$ACL_REPO_NAME" > /dev/null
87*89c4ff92SAndroid Build Coastguard Worker
88*89c4ff92SAndroid Build Coastguard WorkerCLFRAMEWORKREVISION=$DEFAULT_CLFRAMEWORKREVISION
89*89c4ff92SAndroid Build Coastguard Workerif [ ! -z "$CLFRAMEWORK_SHA" ]; then
90*89c4ff92SAndroid Build Coastguard Worker  CLFRAMEWORKREVISION=$CLFRAMEWORK_SHA
91*89c4ff92SAndroid Build Coastguard Workerfi
92*89c4ff92SAndroid Build Coastguard Worker
93*89c4ff92SAndroid Build Coastguard Workerecho "git fetch && git fetch https://review.mlplatform.org/ml/ComputeLibrary && git checkout $CLFRAMEWORKREVISION"
94*89c4ff92SAndroid Build Coastguard Workergit fetch && git fetch https://review.mlplatform.org/ml/ComputeLibrary && git checkout "${CLFRAMEWORKREVISION}"
95*89c4ff92SAndroid Build Coastguard WorkerAssertZeroExitCode "Fetching and checking out ${CLFRAMEWORKREVISION} failed"
96*89c4ff92SAndroid Build Coastguard Worker# If the target ACL revision includes a branch we also need to do a pull.
97*89c4ff92SAndroid Build Coastguard Worker# This generally occurs with a release branch.
98*89c4ff92SAndroid Build Coastguard Workerif [[ "${CLFRAMEWORKREVISION}" == *"branches"* ]]; then
99*89c4ff92SAndroid Build Coastguard Worker  git pull
100*89c4ff92SAndroid Build Coastguard Worker  AssertZeroExitCode "ACL reference includes a branch but git pull failed."
101*89c4ff92SAndroid Build Coastguard Workerfi
102*89c4ff92SAndroid Build Coastguard Worker
103*89c4ff92SAndroid Build Coastguard Worker# Set commit hook so we can submit reviews to gerrit
104*89c4ff92SAndroid Build Coastguard Worker# shellcheck disable=SC2006
105*89c4ff92SAndroid Build Coastguard Worker(curl -Lo "$(git rev-parse --git-dir)"/hooks/commit-msg https://review.mlplatform.org/tools/hooks/commit-msg; chmod +x "$(git rev-parse --git-dir)"/hooks/commit-msg)
106*89c4ff92SAndroid Build Coastguard WorkerAssertZeroExitCode "Setting commit hooks failed"
107*89c4ff92SAndroid Build Coastguard Worker
108*89c4ff92SAndroid Build Coastguard Workerpopd > /dev/null # out of clframework / "$ACL_REPO_NAME"
109*89c4ff92SAndroid Build Coastguard Workerpopd > /dev/null # back to wherever we were when called
110*89c4ff92SAndroid Build Coastguard Worker# Make sure the SHA of the revision that was checked out is the last line
111*89c4ff92SAndroid Build Coastguard Worker# of output from the script... just in case we ever need it.
112*89c4ff92SAndroid Build Coastguard Workerecho "$CLFRAMEWORKREVISION"
113*89c4ff92SAndroid Build Coastguard Workerexit 0
114