1# Copyright © 2020 Arm Ltd and Contributors. All rights reserved. 2# SPDX-License-Identifier: MIT 3 4cmake_minimum_required(VERSION 3.0.2) 5project (object_detection_example) 6 7set(CMAKE_C_STANDARD 99) 8set(CMAKE_CXX_STANDARD 14) 9#location of FindTfLite.cmake and FindTfLiteSrc.cmake 10set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/../../delegate/cmake/Modules/") 11 12# Make the standard a requirement => prevent fallback to previous 13# supported standard 14set(CMAKE_C_STANDARD_REQUIRED ON) 15set(CMAKE_CXX_STANDARD_REQUIRED ON) 16 17# We want to pass standard C/C++ flags, without gnu extensions 18set(CMAKE_C_EXTENSIONS OFF) 19set(CMAKE_CXX_EXTENSIONS OFF) 20 21set(CMAKE_C_FLAGS_DEBUG "-DDEBUG -O0 -g -fPIC") 22set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG -O3 -fPIC") 23 24set(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG -O0 -g -fPIC") 25set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O3 -fPIC") 26 27SET(USE_ARMNN_DELEGATE False CACHE BOOL "Use delegate file") 28message("USE_ARMNN_DELEGATE=${USE_ARMNN_DELEGATE}") 29 30include(ExternalProject) 31 32# Build in release mode by default 33if (NOT CMAKE_BUILD_TYPE STREQUAL Debug) 34 set(CMAKE_BUILD_TYPE Release CACHE INTERNAL "") 35endif() 36 37set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 38set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 39set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) 40 41if (NOT DEFINED DEPENDENCIES_DIR) 42 set(DEPENDENCIES_DIR ${CMAKE_BINARY_DIR}/dependencies) 43endif() 44 45include(../common/cmake/find_opencv.cmake) 46include(../common/cmake/find_armnn.cmake) 47if( USE_ARMNN_DELEGATE ) 48 ## Add TfLite dependency 49 find_package(TfLiteSrc REQUIRED MODULE) 50 find_package(TfLite REQUIRED MODULE) 51 ## Add Flatbuffers dependency 52 find_package(Flatbuffers REQUIRED MODULE) 53 54 add_definitions(-DUSE_TF_LITE_DELEGATE) 55endif() 56 57include_directories(include) 58## chose the correct instance of ArmnnNetworkExecutor.hpp 59if( USE_ARMNN_DELEGATE ) 60 include_directories(include/delegate) 61else() 62 include_directories(../common/include/ArmnnUtils) 63endif() 64include_directories(../common/include/Utils) 65include_directories(../common/include/CVUtils) 66 67file(GLOB SOURCES "src/*.cpp") 68file(GLOB CVUTILS_SOURCES "../common/src/CVUtils**/*.cpp") 69file(GLOB UTILS_SOURCES "../common/src/Utils**/*.cpp") 70list(REMOVE_ITEM SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Main.cpp) 71if( USE_ARMNN_DELEGATE ) 72 file(GLOB TEST_SOURCES "test/delegate/*.cpp" "test/*.cpp") 73 74 # Various tflite header files are not warning clean 75 # We can't change compilation flags on header files directly, so we need to add them to an interface library first 76 add_library(tflite_headers INTERFACE) 77 target_include_directories(tflite_headers INTERFACE $<BUILD_INTERFACE:${TfLite_INCLUDE_DIR}> 78 $<INSTALL_INTERFACE:include/tflite_headers>) 79 80 target_compile_options(tflite_headers INTERFACE -Wno-conversion 81 -Wno-sign-conversion 82 -Wno-unused-parameter 83 -Wno-unused-function) 84else() 85 file(GLOB TEST_SOURCES "test/*.cpp") 86endif() 87file(GLOB APP_MAIN "src/Main.cpp") 88 89if(BUILD_UNIT_TESTS) 90 include(cmake/unit_tests.cmake) 91endif() 92 93 94set(APP_TARGET_NAME "${CMAKE_PROJECT_NAME}") 95 96add_executable("${APP_TARGET_NAME}" ${SOURCES} ${CVUTILS_SOURCES} ${UTILS_SOURCES} ${APP_MAIN}) 97 98if( USE_ARMNN_DELEGATE ) 99 set(CMAKE_CXX_FLAGS " -ldl -lrt -Wl,--copy-dt-needed-entries") 100 target_link_libraries("${APP_TARGET_NAME}" PUBLIC ${TfLite_LIB}) 101 102 target_link_libraries("${APP_TARGET_NAME}" PUBLIC tflite_headers) 103 target_include_directories("${APP_TARGET_NAME}" PUBLIC ${Flatbuffers_INCLUDE_DIR}) 104 target_link_libraries("${APP_TARGET_NAME}" PUBLIC ${Flatbuffers_LIB}) 105endif() 106 107if (NOT OPENCV_LIBS_FOUND) 108 message("Building OpenCV libs") 109 add_dependencies("${APP_TARGET_NAME}" "${OPENCV_LIB}") 110endif() 111 112target_link_libraries("${APP_TARGET_NAME}" PUBLIC ${ARMNN_LIBS} ${OPENCV_LIBS}) 113target_include_directories("${APP_TARGET_NAME}" PUBLIC ${ARMNN_INCLUDE_DIR} ${OPENCV_INCLUDE_DIR}) 114