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 Worker# Usage: 9*523fa7a6SAndroid Build Coastguard Worker# ./test_ios.sh [output] 10*523fa7a6SAndroid Build Coastguard Worker# Arguments: 11*523fa7a6SAndroid Build Coastguard Worker# output - The directory where the repository will be cloned and built. 12*523fa7a6SAndroid Build Coastguard Worker# Default is 'executorch'. 13*523fa7a6SAndroid Build Coastguard Worker 14*523fa7a6SAndroid Build Coastguard Workerset -e 15*523fa7a6SAndroid Build Coastguard Worker 16*523fa7a6SAndroid Build Coastguard WorkerOUTPUT="${1:-executorch}" 17*523fa7a6SAndroid Build Coastguard WorkerEXIT_STATUS=0 18*523fa7a6SAndroid Build Coastguard WorkerAPP_PATH="examples/demo-apps/apple_ios/ExecuTorchDemo/ExecuTorchDemo" 19*523fa7a6SAndroid Build Coastguard WorkerMODEL_NAME="mv3" 20*523fa7a6SAndroid Build Coastguard WorkerSIMULATOR_NAME="executorch" 21*523fa7a6SAndroid Build Coastguard Worker 22*523fa7a6SAndroid Build Coastguard Workerfinish() { 23*523fa7a6SAndroid Build Coastguard Worker EXIT_STATUS=$? 24*523fa7a6SAndroid Build Coastguard Worker if xcrun simctl list | grep -q "$SIMULATOR_NAME"; then 25*523fa7a6SAndroid Build Coastguard Worker say "Deleting Simulator" 26*523fa7a6SAndroid Build Coastguard Worker xcrun simctl delete "$SIMULATOR_NAME" 27*523fa7a6SAndroid Build Coastguard Worker fi 28*523fa7a6SAndroid Build Coastguard Worker if [ -d "$OUTPUT" ]; then 29*523fa7a6SAndroid Build Coastguard Worker popd > /dev/null 30*523fa7a6SAndroid Build Coastguard Worker say "Deleting Output Directory" 31*523fa7a6SAndroid Build Coastguard Worker rm -rf "$OUTPUT" 32*523fa7a6SAndroid Build Coastguard Worker fi 33*523fa7a6SAndroid Build Coastguard Worker if [ $EXIT_STATUS -eq 0 ]; then 34*523fa7a6SAndroid Build Coastguard Worker say "SUCCEEDED" 35*523fa7a6SAndroid Build Coastguard Worker else 36*523fa7a6SAndroid Build Coastguard Worker say "FAILED" 37*523fa7a6SAndroid Build Coastguard Worker fi 38*523fa7a6SAndroid Build Coastguard Worker exit $EXIT_STATUS 39*523fa7a6SAndroid Build Coastguard Worker} 40*523fa7a6SAndroid Build Coastguard Worker 41*523fa7a6SAndroid Build Coastguard Workertrap finish EXIT 42*523fa7a6SAndroid Build Coastguard Worker 43*523fa7a6SAndroid Build Coastguard Workersay() { 44*523fa7a6SAndroid Build Coastguard Worker echo -e "\033[1m\n\t** $1 **\n\033[0m" 45*523fa7a6SAndroid Build Coastguard Worker} 46*523fa7a6SAndroid Build Coastguard Worker 47*523fa7a6SAndroid Build Coastguard Workersay "Cloning the Code" 48*523fa7a6SAndroid Build Coastguard Worker 49*523fa7a6SAndroid Build Coastguard Workerpushd . > /dev/null 50*523fa7a6SAndroid Build Coastguard Workergit clone https://github.com/pytorch/executorch.git "$OUTPUT" 51*523fa7a6SAndroid Build Coastguard Workercd "$OUTPUT" 52*523fa7a6SAndroid Build Coastguard Worker 53*523fa7a6SAndroid Build Coastguard Workersay "Updating the Submodules" 54*523fa7a6SAndroid Build Coastguard Worker 55*523fa7a6SAndroid Build Coastguard Workergit submodule update --init 56*523fa7a6SAndroid Build Coastguard Worker 57*523fa7a6SAndroid Build Coastguard Workersay "Activating a Virtual Environment" 58*523fa7a6SAndroid Build Coastguard Worker 59*523fa7a6SAndroid Build Coastguard Workerpython3 -m venv .venv 60*523fa7a6SAndroid Build Coastguard Workersource .venv/bin/activate 61*523fa7a6SAndroid Build Coastguard Worker 62*523fa7a6SAndroid Build Coastguard Workersay "Installing Requirements" 63*523fa7a6SAndroid Build Coastguard Worker 64*523fa7a6SAndroid Build Coastguard Workerpip install --upgrade cmake pip setuptools wheel zstd 65*523fa7a6SAndroid Build Coastguard Worker 66*523fa7a6SAndroid Build Coastguard Worker./install_requirements.sh --pybind coreml mps xnnpack 67*523fa7a6SAndroid Build Coastguard Workerexport PATH="$(realpath third-party/flatbuffers/cmake-out):$PATH" 68*523fa7a6SAndroid Build Coastguard Worker./build/install_flatc.sh 69*523fa7a6SAndroid Build Coastguard Worker 70*523fa7a6SAndroid Build Coastguard Workersay "Installing CoreML Backend Requirements" 71*523fa7a6SAndroid Build Coastguard Worker 72*523fa7a6SAndroid Build Coastguard Worker./backends/apple/coreml/scripts/install_requirements.sh 73*523fa7a6SAndroid Build Coastguard Worker 74*523fa7a6SAndroid Build Coastguard Workersay "Installing MPS Backend Requirements" 75*523fa7a6SAndroid Build Coastguard Worker 76*523fa7a6SAndroid Build Coastguard Worker./backends/apple/mps/install_requirements.sh 77*523fa7a6SAndroid Build Coastguard Worker 78*523fa7a6SAndroid Build Coastguard Workersay "Exporting Models" 79*523fa7a6SAndroid Build Coastguard Worker 80*523fa7a6SAndroid Build Coastguard Workerpython3 -m examples.portable.scripts.export --model_name="$MODEL_NAME" 81*523fa7a6SAndroid Build Coastguard Workerpython3 -m examples.apple.coreml.scripts.export --model_name="$MODEL_NAME" 82*523fa7a6SAndroid Build Coastguard Workerpython3 -m examples.apple.mps.scripts.mps_example --model_name="$MODEL_NAME" 83*523fa7a6SAndroid Build Coastguard Workerpython3 -m examples.xnnpack.aot_compiler --model_name="$MODEL_NAME" --delegate 84*523fa7a6SAndroid Build Coastguard Worker 85*523fa7a6SAndroid Build Coastguard Workermkdir -p "$APP_PATH/Resources/Models/MobileNet/" 86*523fa7a6SAndroid Build Coastguard Workermv $MODEL_NAME*.pte "$APP_PATH/Resources/Models/MobileNet/" 87*523fa7a6SAndroid Build Coastguard Worker 88*523fa7a6SAndroid Build Coastguard Workersay "Downloading Labels" 89*523fa7a6SAndroid Build Coastguard Worker 90*523fa7a6SAndroid Build Coastguard Workercurl https://raw.githubusercontent.com/pytorch/hub/master/imagenet_classes.txt \ 91*523fa7a6SAndroid Build Coastguard Worker -o "$APP_PATH/Resources/Models/MobileNet/imagenet_classes.txt" 92*523fa7a6SAndroid Build Coastguard Worker 93*523fa7a6SAndroid Build Coastguard Workersay "Building Frameworks" 94*523fa7a6SAndroid Build Coastguard Worker 95*523fa7a6SAndroid Build Coastguard Worker./build/build_apple_frameworks.sh --coreml --custom --mps --optimized --portable --quantized --xnnpack 96*523fa7a6SAndroid Build Coastguard Workermv cmake-out "$APP_PATH/Frameworks" 97*523fa7a6SAndroid Build Coastguard Worker 98*523fa7a6SAndroid Build Coastguard Workersay "Creating Simulator" 99*523fa7a6SAndroid Build Coastguard Worker 100*523fa7a6SAndroid Build Coastguard Workerxcrun simctl create "$SIMULATOR_NAME" "iPhone 15" 101*523fa7a6SAndroid Build Coastguard Worker 102*523fa7a6SAndroid Build Coastguard Workersay "Running Tests" 103*523fa7a6SAndroid Build Coastguard Worker 104*523fa7a6SAndroid Build Coastguard Workerxcodebuild test \ 105*523fa7a6SAndroid Build Coastguard Worker -project "$APP_PATH.xcodeproj" \ 106*523fa7a6SAndroid Build Coastguard Worker -scheme MobileNetClassifierTest \ 107*523fa7a6SAndroid Build Coastguard Worker -destination name="$SIMULATOR_NAME" 108