xref: /aosp_15_r20/external/executorch/build/test_ios.sh (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
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