From 08d208b969fec6e7f6505f4f468eea0d6a9031c2 Mon Sep 17 00:00:00 2001 From: George Wu Date: Mon, 15 Apr 2024 22:33:12 -0700 Subject: [PATCH] =?UTF-8?q?[QNN=20EP]=20refactor=20QNN=20deps/copy=20logic?= =?UTF-8?q?.=20start=20copying=20deps=20to=20target=20python=20loc?= =?UTF-8?q?=E2=80=A6=20(#20317)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit copy QNN deps when building python bindings as well. tweak the wildcard to only copy QNN related files. latest sdk from Qualcomm (>= 2.21) also include SNPE dll's which we don't want to include. --- cmake/CMakeLists.txt | 32 ++++++++++++++++++++++++++ cmake/onnxruntime_python.cmake | 9 ++++++++ cmake/onnxruntime_unittests.cmake | 38 ++++--------------------------- 3 files changed, 45 insertions(+), 34 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 7258507623..74edaad762 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -791,6 +791,38 @@ if (onnxruntime_USE_QNN) list(APPEND ORT_PROVIDER_FLAGS -DUSE_QNN=1) list(APPEND ORT_PROVIDER_CMAKE_FLAGS -Donnxruntime_USE_QNN=1) list(APPEND ONNXRUNTIME_PROVIDER_NAMES qnn) + if (NOT QNN_ARCH_ABI) + string(TOLOWER ${onnxruntime_target_platform} GEN_PLATFORM) + if(MSVC) + message(STATUS "Building MSVC for architecture ${CMAKE_SYSTEM_PROCESSOR} with CMAKE_GENERATOR_PLATFORM as ${GEN_PLATFORM}") + if (${GEN_PLATFORM} STREQUAL "arm64") + set(QNN_ARCH_ABI aarch64-windows-msvc) + else() + set(QNN_ARCH_ABI x86_64-windows-msvc) + endif() + else() + if (${CMAKE_SYSTEM_NAME} STREQUAL "Android") + set(QNN_ARCH_ABI aarch64-android-clang6.0) + elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + if (${GEN_PLATFORM} STREQUAL "x86_64") + set(QNN_ARCH_ABI x86_64-linux-clang) + else() + set(QNN_ARCH_ABI aarch64-android) + endif() + endif() + endif() + endif() + + if (MSVC OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + file(GLOB QNN_LIB_FILES LIST_DIRECTORIES false "${onnxruntime_QNN_HOME}/lib/${QNN_ARCH_ABI}/libQnn*.so" "${onnxruntime_QNN_HOME}/lib/${QNN_ARCH_ABI}/Qnn*.dll") + if (${QNN_ARCH_ABI} STREQUAL "aarch64-windows-msvc") + file(GLOB EXTRA_HTP_LIB LIST_DIRECTORIES false "${onnxruntime_QNN_HOME}/lib/hexagon-v68/unsigned/libQnnHtpV68Skel.so" + "${onnxruntime_QNN_HOME}/lib/hexagon-v73/unsigned/libQnnHtpV73Skel.so" + "${onnxruntime_QNN_HOME}/lib/hexagon-v73/unsigned/libqnnhtpv73.cat") + list(APPEND QNN_LIB_FILES ${EXTRA_HTP_LIB}) + endif() + message(STATUS "QNN lib files: " ${QNN_LIB_FILES}) + endif() endif() if (onnxruntime_USE_SNPE) list(APPEND ORT_PROVIDER_FLAGS -DUSE_SNPE=1) diff --git a/cmake/onnxruntime_python.cmake b/cmake/onnxruntime_python.cmake index 23c6e5e430..545bcf6a38 100644 --- a/cmake/onnxruntime_python.cmake +++ b/cmake/onnxruntime_python.cmake @@ -1001,6 +1001,15 @@ if (onnxruntime_USE_COREML) ) endif() +if (onnxruntime_USE_QNN) + add_custom_command( + TARGET onnxruntime_pybind11_state POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${QNN_LIB_FILES} + $/onnxruntime/capi/ + ) +endif() + endif() if (onnxruntime_ENABLE_LANGUAGE_INTEROP_OPS) include(onnxruntime_language_interop_ops.cmake) diff --git a/cmake/onnxruntime_unittests.cmake b/cmake/onnxruntime_unittests.cmake index 4a351dcf90..945a04d774 100644 --- a/cmake/onnxruntime_unittests.cmake +++ b/cmake/onnxruntime_unittests.cmake @@ -982,41 +982,11 @@ if (NOT onnxruntime_ENABLE_TRAINING_TORCH_INTEROP) endif() if (onnxruntime_USE_QNN) - if (NOT QNN_ARCH_ABI) - string(TOLOWER ${onnxruntime_target_platform} GEN_PLATFORM) - if(MSVC) - message(STATUS "Building MSVC for architecture ${CMAKE_SYSTEM_PROCESSOR} with CMAKE_GENERATOR_PLATFORM as ${GEN_PLATFORM}") - if (${GEN_PLATFORM} STREQUAL "arm64") - set(QNN_ARCH_ABI aarch64-windows-msvc) - else() - set(QNN_ARCH_ABI x86_64-windows-msvc) - endif() - else() - if (${CMAKE_SYSTEM_NAME} STREQUAL "Android") - set(QNN_ARCH_ABI aarch64-android-clang6.0) - elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") - if (${GEN_PLATFORM} STREQUAL "x86_64") - set(QNN_ARCH_ABI x86_64-linux-clang) - else() - set(QNN_ARCH_ABI aarch64-android) - endif() - endif() - endif() - endif() - if (MSVC OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux") - file(GLOB QNN_LIB_FILES LIST_DIRECTORIES false "${onnxruntime_QNN_HOME}/lib/${QNN_ARCH_ABI}/*.so" "${onnxruntime_QNN_HOME}/lib/${QNN_ARCH_ABI}/*.dll") - if (${QNN_ARCH_ABI} STREQUAL "aarch64-windows-msvc") - file(GLOB EXTRA_HTP_LIB LIST_DIRECTORIES false "${onnxruntime_QNN_HOME}/lib/hexagon-v68/unsigned/libQnnHtpV68Skel.so" - "${onnxruntime_QNN_HOME}/lib/hexagon-v73/unsigned/libQnnHtpV73Skel.so" - "${onnxruntime_QNN_HOME}/lib/hexagon-v73/unsigned/libqnnhtpv73.cat") - list(APPEND QNN_LIB_FILES ${EXTRA_HTP_LIB}) - endif() - message(STATUS "QNN lib files: " ${QNN_LIB_FILES}) - add_custom_command( - TARGET ${test_data_target} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${QNN_LIB_FILES} $ - ) + add_custom_command( + TARGET ${test_data_target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${QNN_LIB_FILES} $ + ) endif() endif()