Skip to content

Commit f9b2415

Browse files
kirklandsignfacebook-github-bot
authored andcommitted
Integrate QNN backend to LlamaDemo (#3346)
Summary: repro: (specify `QNN_SDK_ROOT` first) ``` pushd examples/demo-apps/android/LlamaDemo ./gradlew :app:setupQnn ./gradlew :app:installDebug ``` Pull Request resolved: #3346 Reviewed By: cccclai Differential Revision: D56556854 Pulled By: kirklandsign fbshipit-source-id: 38ec067c29634e7b13ec3512c713b4dfe50ed739
1 parent 5a57d63 commit f9b2415

File tree

4 files changed

+79
-1
lines changed

4 files changed

+79
-1
lines changed

examples/demo-apps/android/LlamaDemo/app/build.gradle.kts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,12 @@ tasks.register("setup") {
7676
}
7777
}
7878
}
79+
80+
tasks.register("setupQnn") {
81+
doFirst {
82+
exec {
83+
commandLine("sh", "examples/demo-apps/android/LlamaDemo/setup-with-qnn.sh")
84+
workingDir("../../../../../")
85+
}
86+
}
87+
}

examples/demo-apps/android/LlamaDemo/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
android:extractNativeLibs="true"
2222
tools:targetApi="34">
2323

24-
<uses-native-library android:name="libexecutorch.so"
24+
<uses-native-library android:name="libcdsprpc.so"
2525
android:required="false"/>
2626

2727
<activity

examples/demo-apps/android/LlamaDemo/app/src/main/java/com/example/executorchllamademo/MainActivity.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import android.app.AlertDialog;
1414
import android.content.Context;
1515
import android.os.Bundle;
16+
import android.system.ErrnoException;
17+
import android.system.Os;
1618
import android.widget.Button;
1719
import android.widget.EditText;
1820
import android.widget.ImageButton;
@@ -161,6 +163,12 @@ protected void onCreate(Bundle savedInstanceState) {
161163
super.onCreate(savedInstanceState);
162164
setContentView(R.layout.activity_main);
163165

166+
try {
167+
Os.setenv("ADSP_LIBRARY_PATH", getApplicationInfo().nativeLibraryDir, true);
168+
} catch (ErrnoException e) {
169+
finish();
170+
}
171+
164172
mEditTextMessage = findViewById(R.id.editTextMessage);
165173
mSendButton = findViewById(R.id.sendButton);
166174
mSendButton.setEnabled(false);
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#!/usr/bin/env 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+
set -eu
9+
10+
CMAKE_OUT="${CMAKE_OUT:-cmake-out-android}"
11+
# Note: Set up ANDROID_NDK and ANDROID_ABI
12+
cmake . -DCMAKE_INSTALL_PREFIX="${CMAKE_OUT}" \
13+
-DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" \
14+
-DANDROID_ABI="${ANDROID_ABI}" \
15+
-DEXECUTORCH_BUILD_XNNPACK=ON \
16+
-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
17+
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
18+
-DEXECUTORCH_BUILD_OPTIMIZED=ON \
19+
-DEXECUTORCH_BUILD_QNN=ON \
20+
-DQNN_SDK_ROOT="${QNN_SDK_ROOT}" \
21+
-DCMAKE_BUILD_TYPE=Release \
22+
-B"${CMAKE_OUT}"
23+
24+
if [ "$(uname)" == "Darwin" ]; then
25+
CMAKE_JOBS=$(( $(sysctl -n hw.ncpu) - 1 ))
26+
else
27+
CMAKE_JOBS=$(( $(nproc) - 1 ))
28+
fi
29+
cmake --build "${CMAKE_OUT}" -j "${CMAKE_JOBS}" --target install --config Release
30+
31+
cmake examples/models/llama2 \
32+
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
33+
-DANDROID_ABI="$ANDROID_ABI" \
34+
-DCMAKE_INSTALL_PREFIX="${CMAKE_OUT}" \
35+
-DCMAKE_BUILD_TYPE=Release \
36+
-B"${CMAKE_OUT}"/examples/models/llama2
37+
38+
cmake --build "${CMAKE_OUT}"/examples/models/llama2 -j "${CMAKE_JOBS}" --config Release
39+
40+
cmake extension/android \
41+
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
42+
-DANDROID_ABI="${ANDROID_ABI}" \
43+
-DCMAKE_INSTALL_PREFIX="${CMAKE_OUT}" \
44+
-DEXECUTORCH_BUILD_LLAMA_JNI=ON \
45+
-DCMAKE_BUILD_TYPE=Release \
46+
-B"${CMAKE_OUT}"/extension/android
47+
48+
cmake --build "${CMAKE_OUT}"/extension/android -j "${CMAKE_JOBS}" --config Release
49+
50+
JNI_LIBS_PATH="examples/demo-apps/android/LlamaDemo/app/src/main/jniLibs"
51+
mkdir -p "${JNI_LIBS_PATH}/${ANDROID_ABI}"
52+
cp "${CMAKE_OUT}"/extension/android/libexecutorch_llama_jni.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
53+
cp "${CMAKE_OUT}"/lib/libqnn_executorch_backend.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
54+
cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnHtp.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
55+
cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnSystem.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
56+
cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnHtpV69Stub.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
57+
cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnHtpV73Stub.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
58+
cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnHtpV75Stub.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
59+
cp "${QNN_SDK_ROOT}"/lib/hexagon-v69/unsigned/libQnnHtpV69Skel.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
60+
cp "${QNN_SDK_ROOT}"/lib/hexagon-v73/unsigned/libQnnHtpV73Skel.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
61+
cp "${QNN_SDK_ROOT}"/lib/hexagon-v75/unsigned/libQnnHtpV75Skel.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"

0 commit comments

Comments
 (0)