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