1*523fa7a6SAndroid Build Coastguard Worker#!/bin/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# This source code is licensed under the BSD-style license found in the 6*523fa7a6SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree. 7*523fa7a6SAndroid Build Coastguard Worker 8*523fa7a6SAndroid Build Coastguard Workerset -exu 9*523fa7a6SAndroid Build Coastguard Worker# shellcheck source=/dev/null 10*523fa7a6SAndroid Build Coastguard Workersource "$(dirname "${BASH_SOURCE[0]}")/utils.sh" 11*523fa7a6SAndroid Build Coastguard Worker 12*523fa7a6SAndroid Build Coastguard Workerwhile [[ $# -gt 0 ]]; do 13*523fa7a6SAndroid Build Coastguard Worker case "$1" in 14*523fa7a6SAndroid Build Coastguard Worker -model) 15*523fa7a6SAndroid Build Coastguard Worker MODEL_NAME="$2" # stories110M 16*523fa7a6SAndroid Build Coastguard Worker shift 2 17*523fa7a6SAndroid Build Coastguard Worker ;; 18*523fa7a6SAndroid Build Coastguard Worker -build_tool) 19*523fa7a6SAndroid Build Coastguard Worker BUILD_TOOL="$2" # buck2 or cmake 20*523fa7a6SAndroid Build Coastguard Worker shift 2 21*523fa7a6SAndroid Build Coastguard Worker ;; 22*523fa7a6SAndroid Build Coastguard Worker -dtype) 23*523fa7a6SAndroid Build Coastguard Worker DTYPE="$2" # fp16, bf16, or fp32 24*523fa7a6SAndroid Build Coastguard Worker shift 2 25*523fa7a6SAndroid Build Coastguard Worker ;; 26*523fa7a6SAndroid Build Coastguard Worker -mode) 27*523fa7a6SAndroid Build Coastguard Worker MODE="$2" # portable or xnnpack+custom or xnnpack+custom+qe 28*523fa7a6SAndroid Build Coastguard Worker shift 2 29*523fa7a6SAndroid Build Coastguard Worker ;; 30*523fa7a6SAndroid Build Coastguard Worker -upload) 31*523fa7a6SAndroid Build Coastguard Worker UPLOAD_DIR="$2" 32*523fa7a6SAndroid Build Coastguard Worker shift 2 33*523fa7a6SAndroid Build Coastguard Worker ;; 34*523fa7a6SAndroid Build Coastguard Worker *) 35*523fa7a6SAndroid Build Coastguard Worker echo "Unknown option: $1" 36*523fa7a6SAndroid Build Coastguard Worker usage 37*523fa7a6SAndroid Build Coastguard Worker ;; 38*523fa7a6SAndroid Build Coastguard Worker esac 39*523fa7a6SAndroid Build Coastguard Workerdone 40*523fa7a6SAndroid Build Coastguard Worker 41*523fa7a6SAndroid Build Coastguard Worker# Default mode to xnnpack+custom if not set 42*523fa7a6SAndroid Build Coastguard WorkerMODE=${MODE:-"xnnpack+custom"} 43*523fa7a6SAndroid Build Coastguard Worker 44*523fa7a6SAndroid Build Coastguard Worker# Default UPLOAD_DIR to empty string if not set 45*523fa7a6SAndroid Build Coastguard WorkerUPLOAD_DIR="${UPLOAD_DIR:-}" 46*523fa7a6SAndroid Build Coastguard Worker 47*523fa7a6SAndroid Build Coastguard Workerif [[ $# -lt 4 ]]; then # Assuming 4 mandatory args 48*523fa7a6SAndroid Build Coastguard Worker echo "Expecting atleast 4 positional arguments" 49*523fa7a6SAndroid Build Coastguard Worker echo "Usage: [...]" 50*523fa7a6SAndroid Build Coastguard Workerfi 51*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${MODEL_NAME:-}" ]]; then 52*523fa7a6SAndroid Build Coastguard Worker echo "Missing model name, exiting..." 53*523fa7a6SAndroid Build Coastguard Worker exit 1 54*523fa7a6SAndroid Build Coastguard Workerfi 55*523fa7a6SAndroid Build Coastguard Worker 56*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${BUILD_TOOL:-}" ]]; then 57*523fa7a6SAndroid Build Coastguard Worker echo "Missing build tool (require buck2 or cmake), exiting..." 58*523fa7a6SAndroid Build Coastguard Worker exit 59*523fa7a6SAndroid Build Coastguard Workerfi 60*523fa7a6SAndroid Build Coastguard Worker 61*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${DTYPE:-}" ]]; then 62*523fa7a6SAndroid Build Coastguard Worker echo "Missing dtype, choose fp16, bf16, or fp32, exiting..." 63*523fa7a6SAndroid Build Coastguard Worker exit 1 64*523fa7a6SAndroid Build Coastguard Workerfi 65*523fa7a6SAndroid Build Coastguard Worker 66*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${MODE:-}" ]]; then 67*523fa7a6SAndroid Build Coastguard Worker echo "Missing mode, choose portable or xnnpack, exiting..." 68*523fa7a6SAndroid Build Coastguard Worker exit 1 69*523fa7a6SAndroid Build Coastguard Workerfi 70*523fa7a6SAndroid Build Coastguard Worker 71*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODE}" =~ .*xnnpack.* ]]; then 72*523fa7a6SAndroid Build Coastguard Worker XNNPACK=ON 73*523fa7a6SAndroid Build Coastguard Workerelse 74*523fa7a6SAndroid Build Coastguard Worker XNNPACK=OFF 75*523fa7a6SAndroid Build Coastguard Workerfi 76*523fa7a6SAndroid Build Coastguard Worker 77*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODE}" =~ .*custom.* ]]; then 78*523fa7a6SAndroid Build Coastguard Worker CUSTOM=ON 79*523fa7a6SAndroid Build Coastguard Workerelse 80*523fa7a6SAndroid Build Coastguard Worker CUSTOM=OFF 81*523fa7a6SAndroid Build Coastguard Workerfi 82*523fa7a6SAndroid Build Coastguard Worker 83*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODE}" =~ .*qe.* ]]; then 84*523fa7a6SAndroid Build Coastguard Worker QE=ON 85*523fa7a6SAndroid Build Coastguard Workerelse 86*523fa7a6SAndroid Build Coastguard Worker QE=OFF 87*523fa7a6SAndroid Build Coastguard Workerfi 88*523fa7a6SAndroid Build Coastguard Worker 89*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODE}" =~ .*mps.* ]]; then 90*523fa7a6SAndroid Build Coastguard Worker MPS=ON 91*523fa7a6SAndroid Build Coastguard Workerelse 92*523fa7a6SAndroid Build Coastguard Worker MPS=OFF 93*523fa7a6SAndroid Build Coastguard Workerfi 94*523fa7a6SAndroid Build Coastguard Worker 95*523fa7a6SAndroid Build Coastguard Workerecho "MPS option ${MPS}" 96*523fa7a6SAndroid Build Coastguard Worker 97*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODE}" =~ .*coreml.* ]]; then 98*523fa7a6SAndroid Build Coastguard Worker COREML=ON 99*523fa7a6SAndroid Build Coastguard Workerelse 100*523fa7a6SAndroid Build Coastguard Worker COREML=OFF 101*523fa7a6SAndroid Build Coastguard Workerfi 102*523fa7a6SAndroid Build Coastguard Worker 103*523fa7a6SAndroid Build Coastguard Workerecho "COREML option ${COREML}" 104*523fa7a6SAndroid Build Coastguard Worker 105*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODE}" =~ .*qnn.* ]]; then 106*523fa7a6SAndroid Build Coastguard Worker QNN=ON 107*523fa7a6SAndroid Build Coastguard Worker export EXECUTORCH_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" 108*523fa7a6SAndroid Build Coastguard Worker export QNN_SDK_ROOT=/tmp/qnn/2.25.0.240728 109*523fa7a6SAndroid Build Coastguard Worker export LD_LIBRARY_PATH="${QNN_SDK_ROOT}/lib/x86_64-linux-clang" 110*523fa7a6SAndroid Build Coastguard Worker export PYTHONPATH=".." 111*523fa7a6SAndroid Build Coastguard Worker cp schema/program.fbs exir/_serialize/program.fbs 112*523fa7a6SAndroid Build Coastguard Worker cp schema/scalar_type.fbs exir/_serialize/scalar_type.fbs 113*523fa7a6SAndroid Build Coastguard Worker cp -f build-x86/backends/qualcomm/PyQnnManagerAdaptor.cpython-310-x86_64-linux-gnu.so backends/qualcomm/python 114*523fa7a6SAndroid Build Coastguard Worker cp -f build-x86/backends/qualcomm/PyQnnWrapperAdaptor.cpython-310-x86_64-linux-gnu.so backends/qualcomm/python 115*523fa7a6SAndroid Build Coastguard Worker 116*523fa7a6SAndroid Build Coastguard Workerelse 117*523fa7a6SAndroid Build Coastguard Worker QNN=OFF 118*523fa7a6SAndroid Build Coastguard Worker QNN_SDK_ROOT="" 119*523fa7a6SAndroid Build Coastguard Workerfi 120*523fa7a6SAndroid Build Coastguard Worker 121*523fa7a6SAndroid Build Coastguard Workerecho "QNN option ${QNN}" 122*523fa7a6SAndroid Build Coastguard Workerecho "QNN_SDK_ROOT: ${QNN_SDK_ROOT}" 123*523fa7a6SAndroid Build Coastguard Worker 124*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${BUCK:-}" ]]; then 125*523fa7a6SAndroid Build Coastguard Worker BUCK=buck2 126*523fa7a6SAndroid Build Coastguard Workerfi 127*523fa7a6SAndroid Build Coastguard Worker 128*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${PYTHON_EXECUTABLE:-}" ]]; then 129*523fa7a6SAndroid Build Coastguard Worker PYTHON_EXECUTABLE=python3 130*523fa7a6SAndroid Build Coastguard Workerfi 131*523fa7a6SAndroid Build Coastguard Worker 132*523fa7a6SAndroid Build Coastguard Workerwhich "${PYTHON_EXECUTABLE}" 133*523fa7a6SAndroid Build Coastguard Worker 134*523fa7a6SAndroid Build Coastguard Workercmake_install_executorch_libraries() { 135*523fa7a6SAndroid Build Coastguard Worker echo "Installing libexecutorch.a, libextension_module.so, libportable_ops_lib.a" 136*523fa7a6SAndroid Build Coastguard Worker rm -rf cmake-out 137*523fa7a6SAndroid Build Coastguard Worker retry cmake \ 138*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_INSTALL_PREFIX=cmake-out \ 139*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_BUILD_TYPE=Debug \ 140*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \ 141*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \ 142*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \ 143*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_KERNELS_CUSTOM="$CUSTOM" \ 144*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \ 145*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \ 146*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_XNNPACK="$XNNPACK" \ 147*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_MPS="$MPS" \ 148*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_COREML="$COREML" \ 149*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_QNN="$QNN" \ 150*523fa7a6SAndroid Build Coastguard Worker -DQNN_SDK_ROOT="$QNN_SDK_ROOT" \ 151*523fa7a6SAndroid Build Coastguard Worker -DPYTHON_EXECUTABLE="$PYTHON_EXECUTABLE" \ 152*523fa7a6SAndroid Build Coastguard Worker -Bcmake-out . 153*523fa7a6SAndroid Build Coastguard Worker cmake --build cmake-out -j9 --target install --config Debug 154*523fa7a6SAndroid Build Coastguard Worker} 155*523fa7a6SAndroid Build Coastguard Worker 156*523fa7a6SAndroid Build Coastguard Workercmake_build_llama_runner() { 157*523fa7a6SAndroid Build Coastguard Worker echo "Building llama runner" 158*523fa7a6SAndroid Build Coastguard Worker dir="examples/models/llama" 159*523fa7a6SAndroid Build Coastguard Worker retry cmake \ 160*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_INSTALL_PREFIX=cmake-out \ 161*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_BUILD_TYPE=Debug \ 162*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_KERNELS_CUSTOM="$CUSTOM" \ 163*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \ 164*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_XNNPACK="$XNNPACK" \ 165*523fa7a6SAndroid Build Coastguard Worker -DPYTHON_EXECUTABLE="$PYTHON_EXECUTABLE" \ 166*523fa7a6SAndroid Build Coastguard Worker -Bcmake-out/${dir} \ 167*523fa7a6SAndroid Build Coastguard Worker ${dir} 168*523fa7a6SAndroid Build Coastguard Worker cmake --build cmake-out/${dir} -j9 --config Debug 169*523fa7a6SAndroid Build Coastguard Worker 170*523fa7a6SAndroid Build Coastguard Worker} 171*523fa7a6SAndroid Build Coastguard Worker 172*523fa7a6SAndroid Build Coastguard Workercleanup_files() { 173*523fa7a6SAndroid Build Coastguard Worker echo "Deleting downloaded and generated files" 174*523fa7a6SAndroid Build Coastguard Worker rm "${CHECKPOINT_FILE_NAME}" 175*523fa7a6SAndroid Build Coastguard Worker rm tokenizer.model 176*523fa7a6SAndroid Build Coastguard Worker rm tokenizer.bin 177*523fa7a6SAndroid Build Coastguard Worker rm "${EXPORTED_MODEL_NAME}" 178*523fa7a6SAndroid Build Coastguard Worker rm result.txt 179*523fa7a6SAndroid Build Coastguard Worker rm params.json 180*523fa7a6SAndroid Build Coastguard Worker} 181*523fa7a6SAndroid Build Coastguard Worker 182*523fa7a6SAndroid Build Coastguard Workerprepare_artifacts_upload() { 183*523fa7a6SAndroid Build Coastguard Worker if [ -n "${UPLOAD_DIR}" ]; then 184*523fa7a6SAndroid Build Coastguard Worker echo "Preparing for uploading generated artifacs" 185*523fa7a6SAndroid Build Coastguard Worker zip -j model.zip "${EXPORTED_MODEL_NAME}" tokenizer.bin 186*523fa7a6SAndroid Build Coastguard Worker mkdir -p "${UPLOAD_DIR}" 187*523fa7a6SAndroid Build Coastguard Worker mv model.zip "${UPLOAD_DIR}" 188*523fa7a6SAndroid Build Coastguard Worker fi 189*523fa7a6SAndroid Build Coastguard Worker} 190*523fa7a6SAndroid Build Coastguard Worker 191*523fa7a6SAndroid Build Coastguard Worker# Download and create artifacts. 192*523fa7a6SAndroid Build Coastguard WorkerPARAMS="params.json" 193*523fa7a6SAndroid Build Coastguard WorkerCHECKPOINT_FILE_NAME="" 194*523fa7a6SAndroid Build Coastguard Workertouch "${PARAMS}" 195*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODEL_NAME}" == "stories110M" ]]; then 196*523fa7a6SAndroid Build Coastguard Worker CHECKPOINT_FILE_NAME="stories110M.pt" 197*523fa7a6SAndroid Build Coastguard Worker download_stories_model_artifacts 198*523fa7a6SAndroid Build Coastguard Workerelse 199*523fa7a6SAndroid Build Coastguard Worker echo "Unsupported model name ${MODEL_NAME}" 200*523fa7a6SAndroid Build Coastguard Worker exit 1 201*523fa7a6SAndroid Build Coastguard Workerfi 202*523fa7a6SAndroid Build Coastguard Worker 203*523fa7a6SAndroid Build Coastguard Worker# Check dtype. 204*523fa7a6SAndroid Build Coastguard WorkerEXPORTED_MODEL_NAME="tinyllama_${MODE}_${DTYPE}" 205*523fa7a6SAndroid Build Coastguard Workerif [[ "${DTYPE}" == "fp16" ]]; then 206*523fa7a6SAndroid Build Coastguard Worker EXPORTED_MODEL_NAME="${EXPORTED_MODEL_NAME}_h" 207*523fa7a6SAndroid Build Coastguard Workerelif [[ "${DTYPE}" == "bf16" ]]; then 208*523fa7a6SAndroid Build Coastguard Worker EXPORTED_MODEL_NAME="${EXPORTED_MODEL_NAME}_bf" 209*523fa7a6SAndroid Build Coastguard Workerelif [[ "${DTYPE}" == "fp32" ]]; then 210*523fa7a6SAndroid Build Coastguard Worker : 211*523fa7a6SAndroid Build Coastguard Workerelse 212*523fa7a6SAndroid Build Coastguard Worker echo "Unsupported dtype ${DTYPE}" 213*523fa7a6SAndroid Build Coastguard Worker exit 1 214*523fa7a6SAndroid Build Coastguard Workerfi 215*523fa7a6SAndroid Build Coastguard Worker 216*523fa7a6SAndroid Build Coastguard Worker# Export model. 217*523fa7a6SAndroid Build Coastguard WorkerEXPORTED_MODEL_NAME="${EXPORTED_MODEL_NAME}.pte" 218*523fa7a6SAndroid Build Coastguard Workerecho "Exporting ${EXPORTED_MODEL_NAME}" 219*523fa7a6SAndroid Build Coastguard WorkerEXPORT_ARGS="-c ${CHECKPOINT_FILE_NAME} -p ${PARAMS} -d ${DTYPE} -n ${EXPORTED_MODEL_NAME} -kv" 220*523fa7a6SAndroid Build Coastguard Workerif [[ "${XNNPACK}" == "ON" ]]; then 221*523fa7a6SAndroid Build Coastguard Worker EXPORT_ARGS="${EXPORT_ARGS} -X --xnnpack-extended-ops -qmode 8da4w -G 128" 222*523fa7a6SAndroid Build Coastguard Workerfi 223*523fa7a6SAndroid Build Coastguard Workerif [[ "${CUSTOM}" == "ON" ]]; then 224*523fa7a6SAndroid Build Coastguard Worker EXPORT_ARGS="${EXPORT_ARGS} --use_sdpa_with_kv_cache" 225*523fa7a6SAndroid Build Coastguard Workerfi 226*523fa7a6SAndroid Build Coastguard Workerif [[ "${QE}" == "ON" ]]; then 227*523fa7a6SAndroid Build Coastguard Worker EXPORT_ARGS="${EXPORT_ARGS} --embedding-quantize 8,1024" 228*523fa7a6SAndroid Build Coastguard Workerfi 229*523fa7a6SAndroid Build Coastguard Workerif [[ "${MPS}" == "ON" ]]; then 230*523fa7a6SAndroid Build Coastguard Worker EXPORT_ARGS="${EXPORT_ARGS} -kv -v --mps --disable_dynamic_shape" 231*523fa7a6SAndroid Build Coastguard Workerfi 232*523fa7a6SAndroid Build Coastguard Workerif [[ "${COREML}" == "ON" ]]; then 233*523fa7a6SAndroid Build Coastguard Worker EXPORT_ARGS="${EXPORT_ARGS} -kv -v --coreml --disable_dynamic_shape" 234*523fa7a6SAndroid Build Coastguard Workerfi 235*523fa7a6SAndroid Build Coastguard Workerif [[ "${QNN}" == "ON" ]]; then 236*523fa7a6SAndroid Build Coastguard Worker EXPORT_ARGS="${EXPORT_ARGS} -kv -v --qnn --disable_dynamic_shape" 237*523fa7a6SAndroid Build Coastguard Workerfi 238*523fa7a6SAndroid Build Coastguard Worker# Add dynamically linked library location 239*523fa7a6SAndroid Build Coastguard Worker$PYTHON_EXECUTABLE -m examples.models.llama.export_llama ${EXPORT_ARGS} 240*523fa7a6SAndroid Build Coastguard Worker 241*523fa7a6SAndroid Build Coastguard Worker# Create tokenizer.bin. 242*523fa7a6SAndroid Build Coastguard Workerecho "Creating tokenizer.bin" 243*523fa7a6SAndroid Build Coastguard Worker$PYTHON_EXECUTABLE -m extension.llm.tokenizer.tokenizer -t tokenizer.model -o tokenizer.bin 244*523fa7a6SAndroid Build Coastguard Worker 245*523fa7a6SAndroid Build Coastguard Worker 246*523fa7a6SAndroid Build Coastguard WorkerRUNTIME_ARGS="--model_path=${EXPORTED_MODEL_NAME} --tokenizer_path=tokenizer.bin --prompt=Once --temperature=0 --seq_len=10 --warmup=1" 247*523fa7a6SAndroid Build Coastguard Worker# Check build tool. 248*523fa7a6SAndroid Build Coastguard Workerecho "Running ${EXPORTED_MODEL_NAME} in portable mode" 249*523fa7a6SAndroid Build Coastguard Workerif [[ "${BUILD_TOOL}" == "buck2" ]]; then 250*523fa7a6SAndroid Build Coastguard Worker # Run model. 251*523fa7a6SAndroid Build Coastguard Worker # shellcheck source=/dev/null 252*523fa7a6SAndroid Build Coastguard Worker $BUCK run examples/models/llama:main -- ${RUNTIME_ARGS} > result.txt 253*523fa7a6SAndroid Build Coastguard Workerelif [[ "${BUILD_TOOL}" == "cmake" ]]; then 254*523fa7a6SAndroid Build Coastguard Worker cmake_install_executorch_libraries 255*523fa7a6SAndroid Build Coastguard Worker cmake_build_llama_runner 256*523fa7a6SAndroid Build Coastguard Worker # Run llama runner 257*523fa7a6SAndroid Build Coastguard Worker NOW=$(date +"%H:%M:%S") 258*523fa7a6SAndroid Build Coastguard Worker echo "Starting to run llama runner at ${NOW}" 259*523fa7a6SAndroid Build Coastguard Worker # shellcheck source=/dev/null 260*523fa7a6SAndroid Build Coastguard Worker cmake-out/examples/models/llama/llama_main ${RUNTIME_ARGS} > result.txt 261*523fa7a6SAndroid Build Coastguard Worker NOW=$(date +"%H:%M:%S") 262*523fa7a6SAndroid Build Coastguard Worker echo "Finished at ${NOW}" 263*523fa7a6SAndroid Build Coastguard Workerelse 264*523fa7a6SAndroid Build Coastguard Worker echo "Invalid build tool ${BUILD_TOOL}. Only buck2 is supported atm" 265*523fa7a6SAndroid Build Coastguard Worker exit 1 266*523fa7a6SAndroid Build Coastguard Workerfi 267*523fa7a6SAndroid Build Coastguard WorkerRESULT=$(cat result.txt) 268*523fa7a6SAndroid Build Coastguard Worker# Check results. 269*523fa7a6SAndroid Build Coastguard WorkerEXPECTED_PREFIX="Once upon a time," 270*523fa7a6SAndroid Build Coastguard Worker# Expected result - may take too long to generate: 271*523fa7a6SAndroid Build Coastguard Worker# "Once upon a time, there was a little girl named Lily. She loved to play outside" ... 272*523fa7a6SAndroid Build Coastguard Workerif [[ "${RESULT}" == "${EXPECTED_PREFIX}"* ]]; then 273*523fa7a6SAndroid Build Coastguard Worker echo "Expected result prefix: ${EXPECTED_PREFIX}" 274*523fa7a6SAndroid Build Coastguard Worker echo "Actual result: ${RESULT}" 275*523fa7a6SAndroid Build Coastguard Worker echo "Success" 276*523fa7a6SAndroid Build Coastguard Worker 277*523fa7a6SAndroid Build Coastguard Worker prepare_artifacts_upload 278*523fa7a6SAndroid Build Coastguard Worker cleanup_files 279*523fa7a6SAndroid Build Coastguard Workerelse 280*523fa7a6SAndroid Build Coastguard Worker echo "Expected result prefix: ${EXPECTED_PREFIX}" 281*523fa7a6SAndroid Build Coastguard Worker echo "Actual result: ${RESULT}" 282*523fa7a6SAndroid Build Coastguard Worker echo "Failure; results not the same" 283*523fa7a6SAndroid Build Coastguard Worker 284*523fa7a6SAndroid Build Coastguard Worker cleanup_files 285*523fa7a6SAndroid Build Coastguard Worker exit 1 286*523fa7a6SAndroid Build Coastguard Workerfi 287