1cmake_minimum_required(VERSION 3.4.1) 2 3project(rknn_api_demo) 4 5set(CMAKE_CXX_STANDARD 11) 6set(CMAKE_CXX_STANDARD_REQUIRED ON) 7 8# skip 3rd-party lib dependencies 9set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-shlib-undefined") 10 11# rknn api 12if(TARGET_SOC STREQUAL "rk356x" OR TARGET_SOC STREQUAL "rk3562") 13 set(RKNN_API_PATH ${CMAKE_SOURCE_DIR}/../../runtime/RK356X/${CMAKE_SYSTEM_NAME}/librknn_api) 14elseif(TARGET_SOC STREQUAL "rk3588") 15 set(RKNN_API_PATH ${CMAKE_SOURCE_DIR}/../../runtime/RK3588/${CMAKE_SYSTEM_NAME}/librknn_api) 16else() 17 message(FATAL_ERROR "TARGET_SOC is not set, ref value: rk356x or rk3588") 18endif() 19 20if(CMAKE_SYSTEM_NAME STREQUAL "Android") 21 set(RKNN_RT_LIB ${RKNN_API_PATH}/${CMAKE_ANDROID_ARCH_ABI}/librknnrt.so) 22else() 23 if(CMAKE_C_COMPILER MATCHES "aarch64") 24 set(LIB_ARCH aarch64) 25 else() 26 set(LIB_ARCH armhf) 27 endif() 28 29 set(RKNN_RT_LIB ${RKNN_API_PATH}/${LIB_ARCH}/librknnrt.so) 30endif() 31 32include_directories(${RKNN_API_PATH}/include) 33 34# stb 35include_directories(${CMAKE_SOURCE_DIR}/../3rdparty/) 36 37# rga 38if(TARGET_SOC STREQUAL "rk356x" OR TARGET_SOC STREQUAL "rk3562") 39 set(RGA_PATH ${CMAKE_SOURCE_DIR}/../3rdparty/rga/RK356X) 40elseif(TARGET_SOC STREQUAL "rk3588") 41 set(RGA_PATH ${CMAKE_SOURCE_DIR}/../3rdparty/rga/RK3588) 42else() 43 message(FATAL_ERROR "TARGET_SOC is not set, ref value: rk356x or rk3588") 44endif() 45 46if(CMAKE_SYSTEM_NAME STREQUAL "Android") 47 set(RGA_LIB ${RGA_PATH}/lib/Android/${CMAKE_ANDROID_ARCH_ABI}/librga.so) 48else() 49 if(CMAKE_C_COMPILER MATCHES "aarch64") 50 set(LIB_ARCH aarch64) 51 else() 52 set(LIB_ARCH armhf) 53 endif() 54 55 set(RGA_LIB ${RGA_PATH}/lib/Linux//${LIB_ARCH}/librga.so) 56endif() 57 58include_directories(${RGA_PATH}/include) 59 60# mmz 61set(MPI_MMZ_PATH ${CMAKE_SOURCE_DIR}/../3rdparty/rk_mpi_mmz) 62 63if(CMAKE_SYSTEM_NAME STREQUAL "Android") 64 set(MPI_MMZ_LIB ${MPI_MMZ_PATH}/lib/Android/${CMAKE_ANDROID_ARCH_ABI}/libmpimmz.so) 65else() 66 if(CMAKE_C_COMPILER MATCHES "aarch64") 67 set(LIB_ARCH aarch64) 68 else() 69 set(LIB_ARCH armhf) 70 endif() 71 72 set(MPI_MMZ_LIB ${MPI_MMZ_PATH}/lib/Linux//${LIB_ARCH}/libmpimmz.so) 73endif() 74 75include_directories(${MPI_MMZ_PATH}/include) 76 77set(CMAKE_INSTALL_RPATH "lib") 78 79# rknn_create_mem_demo 80add_executable(rknn_create_mem_demo 81 src/rknn_create_mem_demo.cpp 82) 83 84target_link_libraries(rknn_create_mem_demo 85 ${RKNN_RT_LIB} 86) 87 88# install target and libraries 89set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_api_demo_${CMAKE_SYSTEM_NAME}) 90install(TARGETS rknn_create_mem_demo DESTINATION ./) 91 92# rknn_create_mem_with_rga_demo 93add_executable(rknn_create_mem_with_rga_demo 94 src/rknn_create_mem_with_rga_demo.cpp 95) 96 97target_link_libraries(rknn_create_mem_with_rga_demo 98 ${RKNN_RT_LIB} 99 ${RGA_LIB} 100) 101 102# install target and libraries 103set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_api_demo_${CMAKE_SYSTEM_NAME}) 104install(TARGETS rknn_create_mem_with_rga_demo DESTINATION ./) 105 106# At present, mmz demo is only available under Android, but not for Linux temporarily, 107# mainly because libmpimmz.so has no Linux implementation now. The API of the NPU itself supports Linux. 108if(CMAKE_SYSTEM_NAME STREQUAL "Android") 109 # rknn_with_mmz_demo 110 add_executable(rknn_with_mmz_demo 111 src/rknn_with_mmz_demo.cpp 112 ) 113 114 target_link_libraries(rknn_with_mmz_demo 115 ${RKNN_RT_LIB} 116 ${MPI_MMZ_LIB} 117 ) 118 119 # install target and libraries 120 set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_api_demo_${CMAKE_SYSTEM_NAME}) 121 install(TARGETS rknn_with_mmz_demo DESTINATION ./) 122 123 # rknn_set_internal_mem_from_fd_demo 124 add_executable(rknn_set_internal_mem_from_fd_demo 125 src/rknn_set_internal_mem_from_fd_demo.cpp 126 ) 127 128 target_link_libraries(rknn_set_internal_mem_from_fd_demo 129 ${RKNN_RT_LIB} 130 ${MPI_MMZ_LIB} 131 ) 132 133 # install target and libraries 134 set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_api_demo_${CMAKE_SYSTEM_NAME}) 135 install(TARGETS rknn_set_internal_mem_from_fd_demo DESTINATION ./) 136endif() 137 138install(DIRECTORY model DESTINATION ./) 139install(PROGRAMS ${RKNN_RT_LIB} DESTINATION lib) 140install(PROGRAMS ${RGA_LIB} DESTINATION lib) 141