1*523fa7a6SAndroid Build Coastguard Worker#!/usr/bin/env bash 2*523fa7a6SAndroid Build Coastguard Worker# Copyright (c) Meta Platforms, Inc. and affiliates. 3*523fa7a6SAndroid Build Coastguard Worker# All rights reserved. 4*523fa7a6SAndroid Build Coastguard Worker# 5*523fa7a6SAndroid Build Coastguard Worker# Copyright 2023-2024 Arm Limited and/or its affiliates. 6*523fa7a6SAndroid Build Coastguard Worker# 7*523fa7a6SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the 8*523fa7a6SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree. 9*523fa7a6SAndroid Build Coastguard Worker 10*523fa7a6SAndroid Build Coastguard Workerset -eu 11*523fa7a6SAndroid Build Coastguard Worker 12*523fa7a6SAndroid Build Coastguard Workerif [[ "${1:-'.'}" == "-h" || "${#}" -gt 2 ]]; then 13*523fa7a6SAndroid Build Coastguard Worker echo "Usage: $(basename $0) <--i-agree-to-the-contained-eula> [path-to-a-scratch-dir]" 14*523fa7a6SAndroid Build Coastguard Worker echo "Supplied args: $*" 15*523fa7a6SAndroid Build Coastguard Worker exit 1 16*523fa7a6SAndroid Build Coastguard Workerfi 17*523fa7a6SAndroid Build Coastguard Worker 18*523fa7a6SAndroid Build Coastguard Worker 19*523fa7a6SAndroid Build Coastguard Worker######## 20*523fa7a6SAndroid Build Coastguard Worker### Helper functions 21*523fa7a6SAndroid Build Coastguard Worker######## 22*523fa7a6SAndroid Build Coastguard WorkerARCH="$(uname -m)" 23*523fa7a6SAndroid Build Coastguard WorkerOS="$(uname -s)" 24*523fa7a6SAndroid Build Coastguard Worker 25*523fa7a6SAndroid Build Coastguard Workerfunction verify_md5() { 26*523fa7a6SAndroid Build Coastguard Worker [[ $# -ne 2 ]] \ 27*523fa7a6SAndroid Build Coastguard Worker && { echo "[${FUNCNAME[0]}] Invalid number of args, expecting 2, but got $#"; exit 1; } 28*523fa7a6SAndroid Build Coastguard Worker local ref_checksum="${1}" 29*523fa7a6SAndroid Build Coastguard Worker local file="${2}" 30*523fa7a6SAndroid Build Coastguard Worker 31*523fa7a6SAndroid Build Coastguard Worker if [[ "${OS}" == "Darwin" ]]; then 32*523fa7a6SAndroid Build Coastguard Worker local file_checksum="$(md5 -q $file)" 33*523fa7a6SAndroid Build Coastguard Worker else 34*523fa7a6SAndroid Build Coastguard Worker local file_checksum="$(md5sum $file | awk '{print $1}')" 35*523fa7a6SAndroid Build Coastguard Worker fi 36*523fa7a6SAndroid Build Coastguard Worker if [[ ${ref_checksum} != ${file_checksum} ]]; then 37*523fa7a6SAndroid Build Coastguard Worker echo "Mismatched MD5 checksum for file: ${file}. Expecting ${ref_checksum} but got ${file_checksum}. Exiting." 38*523fa7a6SAndroid Build Coastguard Worker exit 1 39*523fa7a6SAndroid Build Coastguard Worker fi 40*523fa7a6SAndroid Build Coastguard Worker} 41*523fa7a6SAndroid Build Coastguard Worker 42*523fa7a6SAndroid Build Coastguard Worker######## 43*523fa7a6SAndroid Build Coastguard Worker### Hardcoded constants 44*523fa7a6SAndroid Build Coastguard Worker######## 45*523fa7a6SAndroid Build Coastguard Workerscript_dir=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd) 46*523fa7a6SAndroid Build Coastguard Worker 47*523fa7a6SAndroid Build Coastguard Workerif [[ "${ARCH}" == "x86_64" ]]; then 48*523fa7a6SAndroid Build Coastguard Worker # FVPs 49*523fa7a6SAndroid Build Coastguard Worker corstone300_url="https://developer.arm.com/-/media/Arm%20Developer%20Community/Downloads/OSS/FVP/Corstone-300/FVP_Corstone_SSE-300_11.22_20_Linux64.tgz?rev=018659bd574f4e7b95fa647e7836ccf4&hash=22A79103C6FA5FFA7AFF3BE0447F3FF9" 50*523fa7a6SAndroid Build Coastguard Worker corstone300_model_dir="Linux64_GCC-9.3" 51*523fa7a6SAndroid Build Coastguard Worker corstone300_md5_checksum="98e93b949d0fbac977292d8668d34523" 52*523fa7a6SAndroid Build Coastguard Worker 53*523fa7a6SAndroid Build Coastguard Worker corstone320_url="https://developer.arm.com/-/media/Arm%20Developer%20Community/Downloads/OSS/FVP/Corstone-320/FVP_Corstone_SSE-320_11.27_25_Linux64.tgz?rev=a507bffc219a4d5792f1192ab7002d89&hash=D9A824AA8227D2E679C9B9787FF4E8B6FBE3D7C6" 54*523fa7a6SAndroid Build Coastguard Worker corstone320_model_dir="Linux64_GCC-9.3" 55*523fa7a6SAndroid Build Coastguard Worker corstone320_md5_checksum="3deb3c68f9b2d145833f15374203514d" 56*523fa7a6SAndroid Build Coastguard Worker 57*523fa7a6SAndroid Build Coastguard Worker # toochain 58*523fa7a6SAndroid Build Coastguard Worker toolchain_url="https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/12.3.rel1/binrel/arm-gnu-toolchain-12.3.rel1-x86_64-arm-none-eabi.tar.xz" 59*523fa7a6SAndroid Build Coastguard Worker toolchain_dir="arm-gnu-toolchain-12.3.rel1-x86_64-arm-none-eabi" 60*523fa7a6SAndroid Build Coastguard Worker toolchain_md5_checksum="00ebb1b70b1f88906c61206457eacb61" 61*523fa7a6SAndroid Build Coastguard Workerelif [[ "${ARCH}" == "aarch64" ]] || [[ "${ARCH}" == "arm64" ]]; then 62*523fa7a6SAndroid Build Coastguard Worker # FVPs 63*523fa7a6SAndroid Build Coastguard Worker corstone300_url="https://developer.arm.com/-/media/Arm%20Developer%20Community/Downloads/OSS/FVP/Corstone-300/FVP_Corstone_SSE-300_11.22_20_Linux64_armv8l.tgz?rev=9cc6e9a32bb947ca9b21fa162144cb01&hash=7657A4CF27D42E892E3F08D452AAB073" 64*523fa7a6SAndroid Build Coastguard Worker corstone300_model_dir="Linux64_armv8l_GCC-9.3" 65*523fa7a6SAndroid Build Coastguard Worker corstone300_md5_checksum="cbbabbe39b07939cff7a3738e1492ef1" 66*523fa7a6SAndroid Build Coastguard Worker 67*523fa7a6SAndroid Build Coastguard Worker corstone320_url="https://developer.arm.com/-/media/Arm%20Developer%20Community/Downloads/OSS/FVP/Corstone-320/FVP_Corstone_SSE-320_11.27_25_Linux64_armv8l.tgz?rev=b6ebe0923cb84f739e017385fd3c333c&hash=8965C4B98E2FF7F792A099B08831FE3CB6120493" 68*523fa7a6SAndroid Build Coastguard Worker corstone320_model_dir="Linux64_armv8l_GCC-9.3" 69*523fa7a6SAndroid Build Coastguard Worker corstone320_md5_checksum="3889f1d80a6d9861ea4aa6f1c88dd0ae" 70*523fa7a6SAndroid Build Coastguard Worker 71*523fa7a6SAndroid Build Coastguard Worker # toochain 72*523fa7a6SAndroid Build Coastguard Worker if [[ "${OS}" == "Darwin" ]]; then 73*523fa7a6SAndroid Build Coastguard Worker toolchain_url="https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/12.3.rel1/binrel/arm-gnu-toolchain-12.3.rel1-darwin-arm64-arm-none-eabi.tar.xz" 74*523fa7a6SAndroid Build Coastguard Worker toolchain_dir="arm-gnu-toolchain-12.3.rel1-darwin-arm64-arm-none-eabi" 75*523fa7a6SAndroid Build Coastguard Worker toolchain_md5_checksum="53d034e9423e7f470acc5ed2a066758e" 76*523fa7a6SAndroid Build Coastguard Worker elif [[ "${OS}" == "Linux" ]]; then 77*523fa7a6SAndroid Build Coastguard Worker toolchain_url="https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/12.3.rel1/binrel/arm-gnu-toolchain-12.3.rel1-aarch64-arm-none-eabi.tar.xz" 78*523fa7a6SAndroid Build Coastguard Worker toolchain_dir="arm-gnu-toolchain-12.3.rel1-aarch64-arm-none-eabi" 79*523fa7a6SAndroid Build Coastguard Worker toolchain_md5_checksum="02c9b0d3bb1110575877d8eee1f223f2" 80*523fa7a6SAndroid Build Coastguard Worker fi 81*523fa7a6SAndroid Build Coastguard Workerelse 82*523fa7a6SAndroid Build Coastguard Worker echo "[main] Error: only x86-64 & aarch64/arm64 architecture is supported for now!"; exit 1; 83*523fa7a6SAndroid Build Coastguard Workerfi 84*523fa7a6SAndroid Build Coastguard Worker 85*523fa7a6SAndroid Build Coastguard Worker# ethos-u 86*523fa7a6SAndroid Build Coastguard Workerethos_u_repo_url="https://review.mlplatform.org/ml/ethos-u/ethos-u" 87*523fa7a6SAndroid Build Coastguard Workerethos_u_base_rev="24.08" 88*523fa7a6SAndroid Build Coastguard Worker 89*523fa7a6SAndroid Build Coastguard Worker# tosa reference model 90*523fa7a6SAndroid Build Coastguard Workertosa_reference_model_url="https://review.mlplatform.org/tosa/reference_model" 91*523fa7a6SAndroid Build Coastguard Workertosa_reference_model_rev="f9ea4ab7da19318fe36b1c34d68a3e40fd6e56c5" 92*523fa7a6SAndroid Build Coastguard Worker 93*523fa7a6SAndroid Build Coastguard Worker######## 94*523fa7a6SAndroid Build Coastguard Worker### Mandatory user args 95*523fa7a6SAndroid Build Coastguard Worker######## 96*523fa7a6SAndroid Build Coastguard Workereula_acceptance="${1:-'.'}" 97*523fa7a6SAndroid Build Coastguard Workerif [[ "${eula_acceptance}" != "--i-agree-to-the-contained-eula" ]]; then 98*523fa7a6SAndroid Build Coastguard Worker if [[ ${ARM_FVP_INSTALL_I_AGREE_TO_THE_CONTAINED_EULA} != "True" ]]; then 99*523fa7a6SAndroid Build Coastguard Worker echo "Must pass first positional argument '--i-agree-to-the-contained-eula' to agree to EULA associated with downloading the FVP. Exiting!" 100*523fa7a6SAndroid Build Coastguard Worker exit 1 101*523fa7a6SAndroid Build Coastguard Worker else 102*523fa7a6SAndroid Build Coastguard Worker echo "Arm EULA for FVP agreed to with ARM_FVP_INSTALL_I_AGREE_TO_THE_CONTAINED_EULA=True environment variable" 103*523fa7a6SAndroid Build Coastguard Worker fi 104*523fa7a6SAndroid Build Coastguard Workerelse 105*523fa7a6SAndroid Build Coastguard Worker shift; # drop this arg 106*523fa7a6SAndroid Build Coastguard Workerfi 107*523fa7a6SAndroid Build Coastguard Worker 108*523fa7a6SAndroid Build Coastguard Worker######## 109*523fa7a6SAndroid Build Coastguard Worker### Optional user args 110*523fa7a6SAndroid Build Coastguard Worker######## 111*523fa7a6SAndroid Build Coastguard Workerroot_dir=${1:-"${script_dir}/ethos-u-scratch"} 112*523fa7a6SAndroid Build Coastguard Workermkdir -p ${root_dir} 113*523fa7a6SAndroid Build Coastguard Workerroot_dir=$(realpath ${root_dir}) 114*523fa7a6SAndroid Build Coastguard Worker 115*523fa7a6SAndroid Build Coastguard Worker######## 116*523fa7a6SAndroid Build Coastguard Worker### Functions 117*523fa7a6SAndroid Build Coastguard Worker######## 118*523fa7a6SAndroid Build Coastguard Worker 119*523fa7a6SAndroid Build Coastguard Workerfunction setup_fvp() { 120*523fa7a6SAndroid Build Coastguard Worker if [[ "${OS}" != "Linux" ]]; then 121*523fa7a6SAndroid Build Coastguard Worker echo "[${FUNCNAME[0]}] Warning: FVP only supported with Linux OS, skipping FVP setup..." 122*523fa7a6SAndroid Build Coastguard Worker echo "[${FUNCNAME[0]}] Warning: For MacOS, using https://github.com/Arm-Examples/FVPs-on-Mac is recommended." 123*523fa7a6SAndroid Build Coastguard Worker echo "[${FUNCNAME[0]}] Warning: Follow the instructions and make sure the path is set correctly." 124*523fa7a6SAndroid Build Coastguard Worker return 1 125*523fa7a6SAndroid Build Coastguard Worker fi 126*523fa7a6SAndroid Build Coastguard Worker 127*523fa7a6SAndroid Build Coastguard Worker # Download and install the Corstone 300 FVP simulator platform 128*523fa7a6SAndroid Build Coastguard Worker fvps=("corstone300" "corstone320") 129*523fa7a6SAndroid Build Coastguard Worker 130*523fa7a6SAndroid Build Coastguard Worker for fvp in "${fvps[@]}"; do 131*523fa7a6SAndroid Build Coastguard Worker cd "${root_dir}" 132*523fa7a6SAndroid Build Coastguard Worker if [[ ! -e "FVP_${fvp}.tgz" ]]; then 133*523fa7a6SAndroid Build Coastguard Worker echo "[${FUNCNAME[0]}] Downloading FVP ${fvp}..." 134*523fa7a6SAndroid Build Coastguard Worker url_variable=${fvp}_url 135*523fa7a6SAndroid Build Coastguard Worker fvp_url=${!url_variable} 136*523fa7a6SAndroid Build Coastguard Worker curl --output "FVP_${fvp}.tgz" "${fvp_url}" 137*523fa7a6SAndroid Build Coastguard Worker md5_variable=${fvp}_md5_checksum 138*523fa7a6SAndroid Build Coastguard Worker fvp_md5_checksum=${!md5_variable} 139*523fa7a6SAndroid Build Coastguard Worker verify_md5 ${fvp_md5_checksum} FVP_${fvp}.tgz 140*523fa7a6SAndroid Build Coastguard Worker fi 141*523fa7a6SAndroid Build Coastguard Worker 142*523fa7a6SAndroid Build Coastguard Worker echo "[${FUNCNAME[0]}] Installing FVP ${fvp}..." 143*523fa7a6SAndroid Build Coastguard Worker rm -rf FVP-${fvp} 144*523fa7a6SAndroid Build Coastguard Worker mkdir -p FVP-${fvp} 145*523fa7a6SAndroid Build Coastguard Worker cd FVP-${fvp} 146*523fa7a6SAndroid Build Coastguard Worker tar xf ../FVP_${fvp}.tgz 147*523fa7a6SAndroid Build Coastguard Worker 148*523fa7a6SAndroid Build Coastguard Worker # Install the FVP 149*523fa7a6SAndroid Build Coastguard Worker case ${fvp} in 150*523fa7a6SAndroid Build Coastguard Worker corstone300) 151*523fa7a6SAndroid Build Coastguard Worker ./FVP_Corstone_SSE-300.sh --i-agree-to-the-contained-eula --force --destination ./ --quiet --no-interactive 152*523fa7a6SAndroid Build Coastguard Worker ;; 153*523fa7a6SAndroid Build Coastguard Worker corstone320) 154*523fa7a6SAndroid Build Coastguard Worker ./FVP_Corstone_SSE-320.sh --i-agree-to-the-contained-eula --force --destination ./ --quiet --no-interactive 155*523fa7a6SAndroid Build Coastguard Worker ;; 156*523fa7a6SAndroid Build Coastguard Worker *) 157*523fa7a6SAndroid Build Coastguard Worker echo "[${FUNCNAME[0]}] Error: Unknown FVP model ${fvp}. Exiting." 158*523fa7a6SAndroid Build Coastguard Worker exit 1 159*523fa7a6SAndroid Build Coastguard Worker ;; 160*523fa7a6SAndroid Build Coastguard Worker esac 161*523fa7a6SAndroid Build Coastguard Worker 162*523fa7a6SAndroid Build Coastguard Worker model_dir_variable=${fvp}_model_dir 163*523fa7a6SAndroid Build Coastguard Worker fvp_model_dir=${!model_dir_variable} 164*523fa7a6SAndroid Build Coastguard Worker fvp_bin_path="$(cd models/${fvp_model_dir} && pwd)" 165*523fa7a6SAndroid Build Coastguard Worker export PATH=${PATH}:${fvp_bin_path} 166*523fa7a6SAndroid Build Coastguard Worker 167*523fa7a6SAndroid Build Coastguard Worker echo "export PATH=\${PATH}:${fvp_bin_path}" >> ${setup_path_script} 168*523fa7a6SAndroid Build Coastguard Worker done 169*523fa7a6SAndroid Build Coastguard Worker 170*523fa7a6SAndroid Build Coastguard Worker # Fixup for Corstone-320 python dependency 171*523fa7a6SAndroid Build Coastguard Worker echo "export LD_LIBRARY_PATH=${root_dir}/FVP-corstone320/python/lib/" >> ${setup_path_script} 172*523fa7a6SAndroid Build Coastguard Worker} 173*523fa7a6SAndroid Build Coastguard Worker 174*523fa7a6SAndroid Build Coastguard Workerfunction setup_toolchain() { 175*523fa7a6SAndroid Build Coastguard Worker # Download and install the arm-none-eabi toolchain 176*523fa7a6SAndroid Build Coastguard Worker cd "${root_dir}" 177*523fa7a6SAndroid Build Coastguard Worker if [[ ! -e gcc.tar.xz ]]; then 178*523fa7a6SAndroid Build Coastguard Worker echo "[${FUNCNAME[0]}] Downloading toolchain ..." 179*523fa7a6SAndroid Build Coastguard Worker curl --output gcc.tar.xz "${toolchain_url}" 180*523fa7a6SAndroid Build Coastguard Worker verify_md5 ${toolchain_md5_checksum} gcc.tar.xz 181*523fa7a6SAndroid Build Coastguard Worker fi 182*523fa7a6SAndroid Build Coastguard Worker 183*523fa7a6SAndroid Build Coastguard Worker echo "[${FUNCNAME[0]}] Installing toolchain ..." 184*523fa7a6SAndroid Build Coastguard Worker rm -rf "${toolchain_dir}" 185*523fa7a6SAndroid Build Coastguard Worker tar xf gcc.tar.xz 186*523fa7a6SAndroid Build Coastguard Worker toolchain_bin_path="$(cd ${toolchain_dir}/bin && pwd)" 187*523fa7a6SAndroid Build Coastguard Worker export PATH=${PATH}:${toolchain_bin_path} 188*523fa7a6SAndroid Build Coastguard Worker hash arm-none-eabi-gcc 189*523fa7a6SAndroid Build Coastguard Worker echo "export PATH=\${PATH}:${toolchain_bin_path}" >> ${setup_path_script} 190*523fa7a6SAndroid Build Coastguard Worker} 191*523fa7a6SAndroid Build Coastguard Worker 192*523fa7a6SAndroid Build Coastguard Workerfunction setup_ethos_u() { 193*523fa7a6SAndroid Build Coastguard Worker # This is the main dir which will pull more repos to do baremetal software dev for cs300 194*523fa7a6SAndroid Build Coastguard Worker echo "[${FUNCNAME[0]}] Setting up the repo" 195*523fa7a6SAndroid Build Coastguard Worker cd "${root_dir}" 196*523fa7a6SAndroid Build Coastguard Worker [[ ! -d ethos-u ]] && \ 197*523fa7a6SAndroid Build Coastguard Worker git clone ${ethos_u_repo_url} 198*523fa7a6SAndroid Build Coastguard Worker cd ethos-u 199*523fa7a6SAndroid Build Coastguard Worker git reset --hard ${ethos_u_base_rev} 200*523fa7a6SAndroid Build Coastguard Worker python3 ./fetch_externals.py -c ${ethos_u_base_rev}.json fetch 201*523fa7a6SAndroid Build Coastguard Worker pip install pyelftools 202*523fa7a6SAndroid Build Coastguard Worker echo "[${FUNCNAME[0]}] Done @ $(git describe --all --long 3> /dev/null) in ${root_dir}/ethos-u dir." 203*523fa7a6SAndroid Build Coastguard Worker} 204*523fa7a6SAndroid Build Coastguard Worker 205*523fa7a6SAndroid Build Coastguard Workerfunction patch_repo() { 206*523fa7a6SAndroid Build Coastguard Worker # This is a temporary hack until it finds a better home in one for the ARM Ml repos 207*523fa7a6SAndroid Build Coastguard Worker name="$(basename $repo_dir)" 208*523fa7a6SAndroid Build Coastguard Worker echo -e "[${FUNCNAME[0]}] Preparing ${name}..." 209*523fa7a6SAndroid Build Coastguard Worker cd $repo_dir 210*523fa7a6SAndroid Build Coastguard Worker git fetch 211*523fa7a6SAndroid Build Coastguard Worker git reset --hard ${base_rev} 212*523fa7a6SAndroid Build Coastguard Worker 213*523fa7a6SAndroid Build Coastguard Worker patch_dir=${script_dir}/ethos-u-setup/${name}/patches/ 214*523fa7a6SAndroid Build Coastguard Worker [[ -e ${patch_dir} && $(ls -A ${patch_dir}) ]] && \ 215*523fa7a6SAndroid Build Coastguard Worker git am -3 ${patch_dir}/*.patch 216*523fa7a6SAndroid Build Coastguard Worker 217*523fa7a6SAndroid Build Coastguard Worker echo -e "[${FUNCNAME[0]}] Patched ${name} @ $(git describe --all --long 2> /dev/null) in ${repo_dir} dir.\n" 218*523fa7a6SAndroid Build Coastguard Worker} 219*523fa7a6SAndroid Build Coastguard Worker 220*523fa7a6SAndroid Build Coastguard Workerfunction setup_tosa_reference_model() { 221*523fa7a6SAndroid Build Coastguard Worker # The debug flow on the host includes running on a reference implementation of TOSA 222*523fa7a6SAndroid Build Coastguard Worker # This is useful primarily for debug of quantization accuracy, but also for internal 223*523fa7a6SAndroid Build Coastguard Worker # errors for the early codebase 224*523fa7a6SAndroid Build Coastguard Worker cd "${root_dir}" 225*523fa7a6SAndroid Build Coastguard Worker if [[ ! -e reference_model ]]; then 226*523fa7a6SAndroid Build Coastguard Worker git clone ${tosa_reference_model_url} 227*523fa7a6SAndroid Build Coastguard Worker cd reference_model 228*523fa7a6SAndroid Build Coastguard Worker git checkout ${tosa_reference_model_rev} 229*523fa7a6SAndroid Build Coastguard Worker git submodule update --init --recursive 230*523fa7a6SAndroid Build Coastguard Worker cd .. 231*523fa7a6SAndroid Build Coastguard Worker fi 232*523fa7a6SAndroid Build Coastguard Worker cd reference_model 233*523fa7a6SAndroid Build Coastguard Worker mkdir -p build 234*523fa7a6SAndroid Build Coastguard Worker cd build 235*523fa7a6SAndroid Build Coastguard Worker cmake .. 236*523fa7a6SAndroid Build Coastguard Worker 237*523fa7a6SAndroid Build Coastguard Worker # make use of half the cores for building 238*523fa7a6SAndroid Build Coastguard Worker if [[ "${OS}" == "Linux" ]]; then 239*523fa7a6SAndroid Build Coastguard Worker n=$(( $(nproc) / 2 )) 240*523fa7a6SAndroid Build Coastguard Worker elif [[ "${OS}" == "Darwin" ]]; then 241*523fa7a6SAndroid Build Coastguard Worker n=$(( $(sysctl -n hw.logicalcpu) / 2 )) 242*523fa7a6SAndroid Build Coastguard Worker else 243*523fa7a6SAndroid Build Coastguard Worker n=1 244*523fa7a6SAndroid Build Coastguard Worker fi 245*523fa7a6SAndroid Build Coastguard Worker 246*523fa7a6SAndroid Build Coastguard Worker if [[ "$n" -lt 1 ]]; then 247*523fa7a6SAndroid Build Coastguard Worker n=1 248*523fa7a6SAndroid Build Coastguard Worker fi 249*523fa7a6SAndroid Build Coastguard Worker 250*523fa7a6SAndroid Build Coastguard Worker make -j"${n}" 251*523fa7a6SAndroid Build Coastguard Worker cd reference_model 252*523fa7a6SAndroid Build Coastguard Worker tosa_bin_path=`pwd` 253*523fa7a6SAndroid Build Coastguard Worker echo "export PATH=\${PATH}:${tosa_bin_path}" >> "${setup_path_script}" 254*523fa7a6SAndroid Build Coastguard Worker} 255*523fa7a6SAndroid Build Coastguard Worker 256*523fa7a6SAndroid Build Coastguard Workerfunction setup_vela() { 257*523fa7a6SAndroid Build Coastguard Worker # 258*523fa7a6SAndroid Build Coastguard Worker # Prepare the Vela compiler for AoT to Ethos-U compilation 259*523fa7a6SAndroid Build Coastguard Worker # 260*523fa7a6SAndroid Build Coastguard Worker cd "${root_dir}" 261*523fa7a6SAndroid Build Coastguard Worker if [[ ! -e ethos-u-vela ]]; then 262*523fa7a6SAndroid Build Coastguard Worker git clone https://review.mlplatform.org/ml/ethos-u/ethos-u-vela 263*523fa7a6SAndroid Build Coastguard Worker repo_dir="${root_dir}/ethos-u-vela" 264*523fa7a6SAndroid Build Coastguard Worker base_rev=57ce18c89ccc6f6309333dccb24ed30dc68b571f 265*523fa7a6SAndroid Build Coastguard Worker patch_repo 266*523fa7a6SAndroid Build Coastguard Worker fi 267*523fa7a6SAndroid Build Coastguard Worker cd "${root_dir}/ethos-u-vela" 268*523fa7a6SAndroid Build Coastguard Worker 269*523fa7a6SAndroid Build Coastguard Worker # different command for conda vs venv 270*523fa7a6SAndroid Build Coastguard Worker VNV=$(python3 -c "import sys; print('venv') if (sys.prefix != sys.base_prefix) else print('not_venv')") 271*523fa7a6SAndroid Build Coastguard Worker if [ ${VNV} == "venv" ]; then 272*523fa7a6SAndroid Build Coastguard Worker pip install . 273*523fa7a6SAndroid Build Coastguard Worker else 274*523fa7a6SAndroid Build Coastguard Worker # if not venv, we need the site-path where the vela 275*523fa7a6SAndroid Build Coastguard Worker vela_path=$(python -c "import site; print(site.USER_BASE+'/bin')") 276*523fa7a6SAndroid Build Coastguard Worker echo "export PATH=\${PATH}:${vela_path}" >> ${setup_path_script} 277*523fa7a6SAndroid Build Coastguard Worker pip install . --user 278*523fa7a6SAndroid Build Coastguard Worker fi 279*523fa7a6SAndroid Build Coastguard Worker} 280*523fa7a6SAndroid Build Coastguard Worker 281*523fa7a6SAndroid Build Coastguard Worker######## 282*523fa7a6SAndroid Build Coastguard Worker### main 283*523fa7a6SAndroid Build Coastguard Worker######## 284*523fa7a6SAndroid Build Coastguard Worker# do basic checks 285*523fa7a6SAndroid Build Coastguard Worker# Make sure we are on a supported platform 286*523fa7a6SAndroid Build Coastguard Workerif [[ "${ARCH}" != "x86_64" ]] && [[ "${ARCH}" != "aarch64" ]] \ 287*523fa7a6SAndroid Build Coastguard Worker && [[ "${ARCH}" != "arm64" ]]; then 288*523fa7a6SAndroid Build Coastguard Worker echo "[main] Error: only x86-64 & aarch64 architecture is supported for now!" 289*523fa7a6SAndroid Build Coastguard Worker exit 1 290*523fa7a6SAndroid Build Coastguard Workerfi 291*523fa7a6SAndroid Build Coastguard Worker 292*523fa7a6SAndroid Build Coastguard Workercd "${script_dir}" 293*523fa7a6SAndroid Build Coastguard Worker 294*523fa7a6SAndroid Build Coastguard Worker# Setup the root dir 295*523fa7a6SAndroid Build Coastguard Workercd "${root_dir}" 296*523fa7a6SAndroid Build Coastguard Workerecho "[main] Using root dir ${root_dir}" 297*523fa7a6SAndroid Build Coastguard Worker 298*523fa7a6SAndroid Build Coastguard Workersetup_path_script="${root_dir}/setup_path.sh" 299*523fa7a6SAndroid Build Coastguard Workerecho "" > "${setup_path_script}" 300*523fa7a6SAndroid Build Coastguard Worker 301*523fa7a6SAndroid Build Coastguard Worker# Setup toolchain 302*523fa7a6SAndroid Build Coastguard Workersetup_toolchain 303*523fa7a6SAndroid Build Coastguard Worker 304*523fa7a6SAndroid Build Coastguard Worker# Setup the ethos-u dev environment 305*523fa7a6SAndroid Build Coastguard Workersetup_ethos_u 306*523fa7a6SAndroid Build Coastguard Worker 307*523fa7a6SAndroid Build Coastguard Worker# Patch the ethos-u dev environment to include executorch application 308*523fa7a6SAndroid Build Coastguard Workerrepo_dir="${root_dir}/ethos-u/core_platform" 309*523fa7a6SAndroid Build Coastguard Workerbase_rev=b728c774158248ba2cad8e78a515809e1eb9b77f 310*523fa7a6SAndroid Build Coastguard Workerpatch_repo 311*523fa7a6SAndroid Build Coastguard Worker 312*523fa7a6SAndroid Build Coastguard Worker# Setup the tosa_reference_model 313*523fa7a6SAndroid Build Coastguard Workersetup_tosa_reference_model 314*523fa7a6SAndroid Build Coastguard Worker 315*523fa7a6SAndroid Build Coastguard Worker# Setup vela and patch in codegen fixes 316*523fa7a6SAndroid Build Coastguard Workersetup_vela 317*523fa7a6SAndroid Build Coastguard Worker 318*523fa7a6SAndroid Build Coastguard Worker# Setup FVP 319*523fa7a6SAndroid Build Coastguard Workersetup_fvp 320*523fa7a6SAndroid Build Coastguard Worker 321*523fa7a6SAndroid Build Coastguard Workerecho "[main] update path by doing 'source ${setup_path_script}'" 322*523fa7a6SAndroid Build Coastguard Worker 323*523fa7a6SAndroid Build Coastguard Workerecho "[main] success!" 324*523fa7a6SAndroid Build Coastguard Workerexit 0 325