Éanna Ó Catháin | 919c14e | 2020-09-14 17:36:49 +0100 | [diff] [blame] | 1 | # Copyright © 2020 Arm Ltd and Contributors. All rights reserved. |
| 2 | # SPDX-License-Identifier: MIT |
| 3 | |
| 4 | cmake_minimum_required(VERSION 3.0.2) |
Eanna O Cathain | 2f0ddb6 | 2022-03-03 15:58:10 +0000 | [diff] [blame] | 5 | project (object_detection_example) |
Éanna Ó Catháin | 919c14e | 2020-09-14 17:36:49 +0100 | [diff] [blame] | 6 | |
| 7 | set(CMAKE_C_STANDARD 99) |
| 8 | set(CMAKE_CXX_STANDARD 14) |
Eanna O Cathain | 2f0ddb6 | 2022-03-03 15:58:10 +0000 | [diff] [blame] | 9 | #location of FindTfLite.cmake and FindTfLiteSrc.cmake |
| 10 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/../../delegate/cmake/Modules/") |
Éanna Ó Catháin | 919c14e | 2020-09-14 17:36:49 +0100 | [diff] [blame] | 11 | |
| 12 | # Make the standard a requirement => prevent fallback to previous |
| 13 | # supported standard |
| 14 | set(CMAKE_C_STANDARD_REQUIRED ON) |
| 15 | set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| 16 | |
| 17 | # We want to pass standard C/C++ flags, without gnu extensions |
| 18 | set(CMAKE_C_EXTENSIONS OFF) |
| 19 | set(CMAKE_CXX_EXTENSIONS OFF) |
| 20 | |
Éanna Ó Catháin | 919c14e | 2020-09-14 17:36:49 +0100 | [diff] [blame] | 21 | set(CMAKE_C_FLAGS_DEBUG "-DDEBUG -O0 -g -fPIC") |
| 22 | set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG -O3 -fPIC") |
| 23 | |
| 24 | set(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG -O0 -g -fPIC") |
| 25 | set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O3 -fPIC") |
| 26 | |
Eanna O Cathain | 2f0ddb6 | 2022-03-03 15:58:10 +0000 | [diff] [blame] | 27 | SET(USE_ARMNN_DELEGATE False CACHE BOOL "Use delegate file") |
| 28 | message("USE_ARMNN_DELEGATE=${USE_ARMNN_DELEGATE}") |
| 29 | |
Éanna Ó Catháin | 919c14e | 2020-09-14 17:36:49 +0100 | [diff] [blame] | 30 | include(ExternalProject) |
| 31 | |
| 32 | # Build in release mode by default |
| 33 | if (NOT CMAKE_BUILD_TYPE STREQUAL Debug) |
| 34 | set(CMAKE_BUILD_TYPE Release CACHE INTERNAL "") |
| 35 | endif() |
| 36 | |
| 37 | set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) |
| 38 | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) |
| 39 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) |
| 40 | |
| 41 | if (NOT DEFINED DEPENDENCIES_DIR) |
| 42 | set(DEPENDENCIES_DIR ${CMAKE_BINARY_DIR}/dependencies) |
| 43 | endif() |
| 44 | |
Éanna Ó Catháin | c6ab02a | 2021-04-07 14:35:25 +0100 | [diff] [blame] | 45 | include(../common/cmake/find_opencv.cmake) |
| 46 | include(../common/cmake/find_armnn.cmake) |
Eanna O Cathain | 2f0ddb6 | 2022-03-03 15:58:10 +0000 | [diff] [blame] | 47 | if( 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) |
| 55 | endif() |
Éanna Ó Catháin | 919c14e | 2020-09-14 17:36:49 +0100 | [diff] [blame] | 56 | |
| 57 | include_directories(include) |
Eanna O Cathain | 2f0ddb6 | 2022-03-03 15:58:10 +0000 | [diff] [blame] | 58 | ## chose the correct instance of ArmnnNetworkExecutor.hpp |
| 59 | if( USE_ARMNN_DELEGATE ) |
| 60 | include_directories(include/delegate) |
| 61 | else() |
| 62 | include_directories(../common/include/ArmnnUtils) |
| 63 | endif() |
Éanna Ó Catháin | c6ab02a | 2021-04-07 14:35:25 +0100 | [diff] [blame] | 64 | include_directories(../common/include/Utils) |
| 65 | include_directories(../common/include/CVUtils) |
Éanna Ó Catháin | 919c14e | 2020-09-14 17:36:49 +0100 | [diff] [blame] | 66 | |
| 67 | file(GLOB SOURCES "src/*.cpp") |
George Gekov | 23c2627 | 2021-08-16 11:32:10 +0100 | [diff] [blame] | 68 | file(GLOB CVUTILS_SOURCES "../common/src/CVUtils**/*.cpp") |
| 69 | file(GLOB UTILS_SOURCES "../common/src/Utils**/*.cpp") |
Éanna Ó Catháin | 919c14e | 2020-09-14 17:36:49 +0100 | [diff] [blame] | 70 | list(REMOVE_ITEM SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Main.cpp) |
Eanna O Cathain | 2f0ddb6 | 2022-03-03 15:58:10 +0000 | [diff] [blame] | 71 | if( 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) |
| 84 | else() |
| 85 | file(GLOB TEST_SOURCES "test/*.cpp") |
| 86 | endif() |
Éanna Ó Catháin | 919c14e | 2020-09-14 17:36:49 +0100 | [diff] [blame] | 87 | file(GLOB APP_MAIN "src/Main.cpp") |
| 88 | |
| 89 | if(BUILD_UNIT_TESTS) |
| 90 | include(cmake/unit_tests.cmake) |
| 91 | endif() |
| 92 | |
| 93 | |
| 94 | set(APP_TARGET_NAME "${CMAKE_PROJECT_NAME}") |
| 95 | |
George Gekov | 23c2627 | 2021-08-16 11:32:10 +0100 | [diff] [blame] | 96 | add_executable("${APP_TARGET_NAME}" ${SOURCES} ${CVUTILS_SOURCES} ${UTILS_SOURCES} ${APP_MAIN}) |
Éanna Ó Catháin | 919c14e | 2020-09-14 17:36:49 +0100 | [diff] [blame] | 97 | |
Eanna O Cathain | 2f0ddb6 | 2022-03-03 15:58:10 +0000 | [diff] [blame] | 98 | if( 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}) |
| 105 | endif() |
| 106 | |
Éanna Ó Catháin | 919c14e | 2020-09-14 17:36:49 +0100 | [diff] [blame] | 107 | if (NOT OPENCV_LIBS_FOUND) |
| 108 | message("Building OpenCV libs") |
| 109 | add_dependencies("${APP_TARGET_NAME}" "${OPENCV_LIB}") |
| 110 | endif() |
| 111 | |
| 112 | target_link_libraries("${APP_TARGET_NAME}" PUBLIC ${ARMNN_LIBS} ${OPENCV_LIBS}) |
| 113 | target_include_directories("${APP_TARGET_NAME}" PUBLIC ${ARMNN_INCLUDE_DIR} ${OPENCV_INCLUDE_DIR}) |