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