Skip to content

Commit

Permalink
cmake changes for SNPE EP (#11821)
Browse files Browse the repository at this point in the history
* move code used to find the SNPE libs to a separate cmake file

* Roll back the change for libc++_shared, it's the one from SNPE SDK, otherwise it will cause uncaught exception of type std::bad_cast because of conflict
  • Loading branch information
HectorSVC authored Jun 13, 2022
1 parent 0869f4f commit 7582644
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 38 deletions.
24 changes: 2 additions & 22 deletions cmake/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1007,28 +1007,8 @@ if (onnxruntime_USE_CUDA)
endif()

if(onnxruntime_USE_SNPE)
if (NOT SNPE_ARCH_ABI)
if(MSVC)
string(TOLOWER ${CMAKE_GENERATOR_PLATFORM} GEN_PLATFORM)
message(STATUS "Building MSVC for architecture ${CMAKE_SYSTEM_PROCESSOR} with CMAKE_GENERATOR_PLATFORM as ${GEN_PLATFORM}")
if (${GEN_PLATFORM} STREQUAL "arm64")
set(SNPE_ARCH_ABI aarch64-windows-vc19)
else()
set(SNPE_ARCH_ABI x86_64-windows-vc19)
endif()
else()
if (CMAKE_SYSTEM_NAME STREQUAL "Android")
set(SNPE_ARCH_ABI aarch64-android-clang6.0)
elseif (LINUX)
if (${GEN_PLATFORM} STREQUAL "x64")
set(SNPE_ARCH_ABI x86_64-linux-clang)
else()
set(SNPE_ARCH_ABI aarch64-linux-gcc4.9)
endif()
endif()
endif()
list(APPEND onnxruntime_LINK_DIRS ${SNPE_ROOT}/lib/${SNPE_ARCH_ABI})
endif()
include(find_snpe.cmake)
list(APPEND onnxruntime_EXTERNAL_LIBRARIES ${SNPE_NN_LIBS})
endif()

FILE(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} ORT_BINARY_DIR)
Expand Down
46 changes: 46 additions & 0 deletions cmake/find_snpe.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
if (NOT SNPE_ARCH_ABI)
if(MSVC)
string(TOLOWER ${CMAKE_GENERATOR_PLATFORM} GEN_PLATFORM)
message(STATUS "Building MSVC for architecture ${CMAKE_SYSTEM_PROCESSOR} with CMAKE_GENERATOR_PLATFORM as ${GEN_PLATFORM}")
if (${GEN_PLATFORM} STREQUAL "arm64")
set(SNPE_ARCH_ABI aarch64-windows-vc19)
else()
set(SNPE_ARCH_ABI x86_64-windows-vc19)
endif()
else()
if (CMAKE_SYSTEM_NAME STREQUAL "Android")
set(SNPE_ARCH_ABI aarch64-android-clang6.0)
elseif (LINUX)
if (${GEN_PLATFORM} STREQUAL "x64")
set(SNPE_ARCH_ABI x86_64-linux-clang)
else()
set(SNPE_ARCH_ABI aarch64-linux-gcc4.9)
endif()
endif()
endif()
list(APPEND onnxruntime_LINK_DIRS ${SNPE_ROOT}/lib/${SNPE_ARCH_ABI})
endif()
file(TO_CMAKE_PATH ${SNPE_ROOT} SNPE_ROOT)
get_filename_component(SNPE_CMAKE_DIR ${SNPE_ROOT} ABSOLUTE)
file(TO_CMAKE_PATH "${SNPE_CMAKE_DIR}/lib/${SNPE_ARCH_ABI}" SNPE_LIB_DIR)
file(TO_NATIVE_PATH ${SNPE_LIB_DIR} SNPE_NATIVE_DIR)
message(STATUS "Looking for SNPE library in ${SNPE_NATIVE_DIR}")
find_library(SNPE NAMES snpe SNPE libSNPE.so PATHS "${SNPE_NATIVE_DIR}" "${SNPE_ROOT}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH REQUIRED)

file(GLOB SNPE_SO_FILES LIST_DIRECTORIES false "${SNPE_CMAKE_DIR}/lib/${SNPE_ARCH_ABI}/*.so" "${SNPE_CMAKE_DIR}/lib/${SNPE_ARCH_ABI}/*.dll")
# add dsp skel files to distribution
file(GLOB SNPE_DSP_FILES LIST_DIRECTORIES false "${SNPE_CMAKE_DIR}/lib/dsp/*.so")
list(APPEND SNPE_SO_FILES ${QCDK_FILES} ${SNPE_DSP_FILES})

if(NOT SNPE OR NOT SNPE_SO_FILES)
message(ERROR "Snpe not found in ${SNPE_CMAKE_DIR}/lib/${SNPE_ARCH_ABI} for platform ${CMAKE_GENERATOR_PLATFORM}")
endif()

set(SNPE_NN_LIBS ${SNPE})
if(ANDROID)
# Use libc++_shared.so from SNPE SDK
list(APPEND SNPE_NN_LIBS libc++_shared.so)
endif()

message(STATUS "SNPE library at ${SNPE}")
message(STATUS "SNPE so/dlls in ${SNPE_SO_FILES}")
16 changes: 0 additions & 16 deletions cmake/onnxruntime_snpe_provider.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,6 @@ file(GLOB_RECURSE
"${ONNXRUNTIME_ROOT}/core/providers/snpe/*.cc"
)

if(ANDROID)
# Specify the link libraries
set(SNPE_NN_LIBS ${SNPE} libc++_shared.so)
else()
set(SNPE_NN_LIBS ${SNPE})
endif()

file(TO_CMAKE_PATH ${SNPE_ROOT} SNPE_ROOT)
get_filename_component(SNPE_CMAKE_DIR ${SNPE_ROOT} ABSOLUTE)
file(TO_CMAKE_PATH "${SNPE_CMAKE_DIR}/lib/${SNPE_ARCH_ABI}" SNPE_LIB_DIR)
file(TO_NATIVE_PATH ${SNPE_LIB_DIR} SNPE_NATIVE_DIR)
message(STATUS "Looking for SNPE library in ${SNPE_NATIVE_DIR}")
find_library(SNPE NAMES snpe SNPE libSNPE.so PATHS "${SNPE_NATIVE_DIR}" "${SNPE_ROOT}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH REQUIRED)
file(GLOB SNPE_SO_FILES LIST_DIRECTORIES false "${SNPE_CMAKE_DIR}/lib/${SNPE_ARCH_ABI}/*.so" "${SNPE_CMAKE_DIR}/lib/${SNPE_ARCH_ABI}/*.dll")
# add dsp skel files to distribution
file(GLOB SNPE_DSP_FILES LIST_DIRECTORIES false "${SNPE_CMAKE_DIR}/lib/dsp/*.so")
Expand All @@ -31,14 +18,11 @@ list(APPEND SNPE_SO_FILES ${QCDK_FILES} ${SNPE_DSP_FILES})
if(NOT SNPE OR NOT SNPE_SO_FILES)
message(ERROR "Snpe not found in ${SNPE_CMAKE_DIR}/lib/${SNPE_ARCH_ABI} for platform ${CMAKE_GENERATOR_PLATFORM}")
endif()
message(STATUS "SNPE library at ${SNPE}")
message(STATUS "SNPE so/dlls in ${SNPE_SO_FILES}")

source_group(TREE ${ONNXRUNTIME_ROOT}/core FILES ${onnxruntime_providers_snpe_cc_srcs})
onnxruntime_add_static_library(onnxruntime_providers_snpe ${onnxruntime_providers_snpe_cc_srcs})
onnxruntime_add_include_to_target(onnxruntime_providers_snpe onnxruntime_common onnxruntime_framework onnx onnx_proto protobuf::libprotobuf-lite flatbuffers)
link_directories(${SNPE_CMAKE_DIR}/lib/${SNPE_ARCH_ABI} ${SNPE_CMAKE_DIR}/lib/dsp)
target_link_libraries(onnxruntime_providers_snpe PRIVATE SNPE ${SNPE_NN_LIBS})
add_dependencies(onnxruntime_providers_snpe onnx ${onnxruntime_EXTERNAL_DEPENDENCIES})
set_target_properties(onnxruntime_providers_snpe PROPERTIES CXX_STANDARD_REQUIRED ON)
set_target_properties(onnxruntime_providers_snpe PROPERTIES FOLDER "ONNXRuntime")
Expand Down

0 comments on commit 7582644

Please sign in to comment.