|
3 | 3 |
|
4 | 4 | add_compile_definitions(USE_QNN=1)
|
5 | 5 |
|
6 |
| - # These are shared utils, |
7 |
| - # TODO, move to a separate lib when used by EPs other than QNN, NNAPI and CoreML |
8 |
| - file(GLOB onnxruntime_providers_shared_utils_cc_srcs CONFIGURE_DEPENDS |
9 |
| - "${ONNXRUNTIME_ROOT}/core/providers/shared/utils/utils.h" |
10 |
| - "${ONNXRUNTIME_ROOT}/core/providers/shared/utils/utils.cc" |
11 |
| - ) |
| 6 | + if(onnxruntime_BUILD_QNN_EP_STATIC_LIB) |
| 7 | + add_compile_definitions(BUILD_QNN_EP_STATIC_LIB=1) |
| 8 | + endif() |
12 | 9 |
|
13 | 10 | file(GLOB_RECURSE
|
14 |
| - onnxruntime_providers_qnn_ep_cc_srcs CONFIGURE_DEPENDS |
15 |
| - "${ONNXRUNTIME_ROOT}/core/providers/qnn/*.h" |
16 |
| - "${ONNXRUNTIME_ROOT}/core/providers/qnn/*.cc" |
| 11 | + onnxruntime_providers_qnn_ep_srcs CONFIGURE_DEPENDS |
| 12 | + "${ONNXRUNTIME_ROOT}/core/providers/qnn/*.h" |
| 13 | + "${ONNXRUNTIME_ROOT}/core/providers/qnn/*.cc" |
17 | 14 | )
|
18 | 15 |
|
19 |
| - file(GLOB_RECURSE |
20 |
| - onnxruntime_providers_qnn_builder_cc_srcs CONFIGURE_DEPENDS |
21 |
| - "${ONNXRUNTIME_ROOT}/core/providers/qnn/builder/*.h" |
22 |
| - "${ONNXRUNTIME_ROOT}/core/providers/qnn/builder/*.cc" |
23 |
| - ) |
| 16 | + if(onnxruntime_BUILD_QNN_EP_STATIC_LIB) |
| 17 | + # |
| 18 | + # Build QNN EP as a static library |
| 19 | + # |
| 20 | + set(onnxruntime_providers_qnn_srcs ${onnxruntime_providers_qnn_ep_srcs}) |
| 21 | + source_group(TREE ${ONNXRUNTIME_ROOT}/core FILES ${onnxruntime_providers_qnn_srcs}) |
| 22 | + onnxruntime_add_static_library(onnxruntime_providers_qnn ${onnxruntime_providers_qnn_srcs}) |
| 23 | + onnxruntime_add_include_to_target(onnxruntime_providers_qnn onnxruntime_common onnxruntime_framework onnx |
| 24 | + onnx_proto protobuf::libprotobuf-lite |
| 25 | + flatbuffers::flatbuffers Boost::mp11) |
| 26 | + add_dependencies(onnxruntime_providers_qnn onnx ${onnxruntime_EXTERNAL_DEPENDENCIES}) |
| 27 | + set_target_properties(onnxruntime_providers_qnn PROPERTIES CXX_STANDARD_REQUIRED ON) |
| 28 | + set_target_properties(onnxruntime_providers_qnn PROPERTIES FOLDER "ONNXRuntime") |
| 29 | + target_include_directories(onnxruntime_providers_qnn PRIVATE ${ONNXRUNTIME_ROOT} |
| 30 | + ${onnxruntime_QNN_HOME}/include/QNN |
| 31 | + ${onnxruntime_QNN_HOME}/include) |
| 32 | + set_target_properties(onnxruntime_providers_qnn PROPERTIES LINKER_LANGUAGE CXX) |
24 | 33 |
|
25 |
| - set(onnxruntime_providers_qnn_cc_srcs |
26 |
| - ${onnxruntime_providers_shared_utils_cc_srcs} |
27 |
| - ${onnxruntime_providers_qnn_ep_cc_srcs} |
28 |
| - ${onnxruntime_providers_qnn_builder_cc_srcs} |
29 |
| - ) |
| 34 | + # ignore the warning unknown-pragmas on "pragma region" |
| 35 | + if(NOT MSVC) |
| 36 | + target_compile_options(onnxruntime_providers_qnn PRIVATE "-Wno-unknown-pragmas") |
| 37 | + endif() |
| 38 | + else() |
| 39 | + # |
| 40 | + # Build QNN EP as a shared library |
| 41 | + # |
| 42 | + file(GLOB_RECURSE |
| 43 | + onnxruntime_providers_qnn_shared_lib_srcs CONFIGURE_DEPENDS |
| 44 | + "${ONNXRUNTIME_ROOT}/core/providers/shared_library/*.h" |
| 45 | + "${ONNXRUNTIME_ROOT}/core/providers/shared_library/*.cc" |
| 46 | + ) |
| 47 | + set(onnxruntime_providers_qnn_srcs ${onnxruntime_providers_qnn_ep_srcs} |
| 48 | + ${onnxruntime_providers_qnn_shared_lib_srcs}) |
| 49 | + |
| 50 | + source_group(TREE ${ONNXRUNTIME_ROOT}/core FILES ${onnxruntime_providers_qnn_srcs}) |
| 51 | + onnxruntime_add_shared_library_module(onnxruntime_providers_qnn ${onnxruntime_providers_qnn_srcs}) |
| 52 | + onnxruntime_add_include_to_target(onnxruntime_providers_qnn ${ONNXRUNTIME_PROVIDERS_SHARED} ${GSL_TARGET} onnx |
| 53 | + onnxruntime_common Boost::mp11 safeint_interface) |
| 54 | + target_link_libraries(onnxruntime_providers_qnn PRIVATE ${ONNXRUNTIME_PROVIDERS_SHARED} ${ABSEIL_LIBS} ${CMAKE_DL_LIBS}) |
| 55 | + add_dependencies(onnxruntime_providers_qnn onnxruntime_providers_shared ${onnxruntime_EXTERNAL_DEPENDENCIES}) |
| 56 | + target_include_directories(onnxruntime_providers_qnn PRIVATE ${ONNXRUNTIME_ROOT} |
| 57 | + ${CMAKE_CURRENT_BINARY_DIR} |
| 58 | + ${onnxruntime_QNN_HOME}/include/QNN |
| 59 | + ${onnxruntime_QNN_HOME}/include) |
| 60 | + |
| 61 | + # Set linker flags for function(s) exported by EP DLL |
| 62 | + if(UNIX) |
| 63 | + target_link_options(onnxruntime_providers_qnn PRIVATE |
| 64 | + "LINKER:--version-script=${ONNXRUNTIME_ROOT}/core/providers/qnn/version_script.lds" |
| 65 | + "LINKER:--gc-sections" |
| 66 | + "LINKER:-rpath=\$ORIGIN" |
| 67 | + ) |
| 68 | + elseif(WIN32) |
| 69 | + set_property(TARGET onnxruntime_providers_qnn APPEND_STRING PROPERTY LINK_FLAGS |
| 70 | + "-DEF:${ONNXRUNTIME_ROOT}/core/providers/qnn/symbols.def") |
| 71 | + else() |
| 72 | + message(FATAL_ERROR "onnxruntime_providers_qnn unknown platform, need to specify shared library exports for it") |
| 73 | + endif() |
| 74 | + |
| 75 | + # Set compile options |
| 76 | + if(MSVC) |
| 77 | + target_compile_options(onnxruntime_providers_qnn PUBLIC /wd4099 /wd4005) |
| 78 | + else() |
| 79 | + # ignore the warning unknown-pragmas on "pragma region" |
| 80 | + target_compile_options(onnxruntime_providers_qnn PRIVATE "-Wno-unknown-pragmas") |
| 81 | + endif() |
| 82 | + |
| 83 | + set_target_properties(onnxruntime_providers_qnn PROPERTIES LINKER_LANGUAGE CXX) |
| 84 | + set_target_properties(onnxruntime_providers_qnn PROPERTIES CXX_STANDARD_REQUIRED ON) |
| 85 | + set_target_properties(onnxruntime_providers_qnn PROPERTIES FOLDER "ONNXRuntime") |
30 | 86 |
|
31 |
| - source_group(TREE ${ONNXRUNTIME_ROOT}/core FILES ${onnxruntime_providers_qnn_cc_srcs}) |
32 |
| - onnxruntime_add_static_library(onnxruntime_providers_qnn ${onnxruntime_providers_qnn_cc_srcs}) |
33 |
| - onnxruntime_add_include_to_target(onnxruntime_providers_qnn onnxruntime_common onnxruntime_framework onnx onnx_proto protobuf::libprotobuf-lite flatbuffers::flatbuffers Boost::mp11) |
34 |
| - target_link_libraries(onnxruntime_providers_qnn) |
35 |
| - add_dependencies(onnxruntime_providers_qnn onnx ${onnxruntime_EXTERNAL_DEPENDENCIES}) |
36 |
| - set_target_properties(onnxruntime_providers_qnn PROPERTIES CXX_STANDARD_REQUIRED ON) |
37 |
| - set_target_properties(onnxruntime_providers_qnn PROPERTIES FOLDER "ONNXRuntime") |
38 |
| - target_include_directories(onnxruntime_providers_qnn PRIVATE ${ONNXRUNTIME_ROOT} ${onnxruntime_QNN_HOME}/include/QNN ${onnxruntime_QNN_HOME}/include) |
39 |
| - set_target_properties(onnxruntime_providers_qnn PROPERTIES LINKER_LANGUAGE CXX) |
40 |
| - # ignore the warning unknown-pragmas on "pragma region" |
41 |
| - if(NOT MSVC) |
42 |
| - target_compile_options(onnxruntime_providers_qnn PRIVATE "-Wno-unknown-pragmas") |
| 87 | + install(TARGETS onnxruntime_providers_qnn |
| 88 | + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 89 | + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 90 | + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) |
43 | 91 | endif()
|
0 commit comments