1#!/bin/bash 2# Copyright (c) Meta Platforms, Inc. and affiliates. 3# All rights reserved. 4# 5# This source code is licensed under the BSD-style license found in the 6# LICENSE file in the root directory of this source tree. 7 8# Usage: 9# ./test_ios.sh [output] 10# Arguments: 11# output - The directory where the repository will be cloned and built. 12# Default is 'executorch'. 13 14set -e 15 16OUTPUT="${1:-executorch}" 17EXIT_STATUS=0 18APP_PATH="examples/demo-apps/apple_ios/ExecuTorchDemo/ExecuTorchDemo" 19MODEL_NAME="mv3" 20SIMULATOR_NAME="executorch" 21 22finish() { 23 EXIT_STATUS=$? 24 if xcrun simctl list | grep -q "$SIMULATOR_NAME"; then 25 say "Deleting Simulator" 26 xcrun simctl delete "$SIMULATOR_NAME" 27 fi 28 if [ -d "$OUTPUT" ]; then 29 popd > /dev/null 30 say "Deleting Output Directory" 31 rm -rf "$OUTPUT" 32 fi 33 if [ $EXIT_STATUS -eq 0 ]; then 34 say "SUCCEEDED" 35 else 36 say "FAILED" 37 fi 38 exit $EXIT_STATUS 39} 40 41trap finish EXIT 42 43say() { 44 echo -e "\033[1m\n\t** $1 **\n\033[0m" 45} 46 47say "Cloning the Code" 48 49pushd . > /dev/null 50git clone https://github.com/pytorch/executorch.git "$OUTPUT" 51cd "$OUTPUT" 52 53say "Updating the Submodules" 54 55git submodule update --init 56 57say "Activating a Virtual Environment" 58 59python3 -m venv .venv 60source .venv/bin/activate 61 62say "Installing Requirements" 63 64pip install --upgrade cmake pip setuptools wheel zstd 65 66./install_requirements.sh --pybind coreml mps xnnpack 67export PATH="$(realpath third-party/flatbuffers/cmake-out):$PATH" 68./build/install_flatc.sh 69 70say "Installing CoreML Backend Requirements" 71 72./backends/apple/coreml/scripts/install_requirements.sh 73 74say "Installing MPS Backend Requirements" 75 76./backends/apple/mps/install_requirements.sh 77 78say "Exporting Models" 79 80python3 -m examples.portable.scripts.export --model_name="$MODEL_NAME" 81python3 -m examples.apple.coreml.scripts.export --model_name="$MODEL_NAME" 82python3 -m examples.apple.mps.scripts.mps_example --model_name="$MODEL_NAME" 83python3 -m examples.xnnpack.aot_compiler --model_name="$MODEL_NAME" --delegate 84 85mkdir -p "$APP_PATH/Resources/Models/MobileNet/" 86mv $MODEL_NAME*.pte "$APP_PATH/Resources/Models/MobileNet/" 87 88say "Downloading Labels" 89 90curl https://raw.githubusercontent.com/pytorch/hub/master/imagenet_classes.txt \ 91 -o "$APP_PATH/Resources/Models/MobileNet/imagenet_classes.txt" 92 93say "Building Frameworks" 94 95./build/build_apple_frameworks.sh --coreml --custom --mps --optimized --portable --quantized --xnnpack 96mv cmake-out "$APP_PATH/Frameworks" 97 98say "Creating Simulator" 99 100xcrun simctl create "$SIMULATOR_NAME" "iPhone 15" 101 102say "Running Tests" 103 104xcodebuild test \ 105 -project "$APP_PATH.xcodeproj" \ 106 -scheme MobileNetClassifierTest \ 107 -destination name="$SIMULATOR_NAME" 108