blob: 953c4ed11c20ef1f303cb3794a2cccb9edc8e6c4 [file] [log] [blame]
Éanna Ó Catháin919c14e2020-09-14 17:36:49 +01001# Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
2# SPDX-License-Identifier: MIT
3
4cmake_minimum_required(VERSION 3.0.2)
Eanna O Cathain2f0ddb62022-03-03 15:58:10 +00005project (object_detection_example)
Éanna Ó Catháin919c14e2020-09-14 17:36:49 +01006
7set(CMAKE_C_STANDARD 99)
8set(CMAKE_CXX_STANDARD 14)
Eanna O Cathain2f0ddb62022-03-03 15:58:10 +00009#location of FindTfLite.cmake and FindTfLiteSrc.cmake
10set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/../../delegate/cmake/Modules/")
Éanna Ó Catháin919c14e2020-09-14 17:36:49 +010011
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
Éanna Ó Catháin919c14e2020-09-14 17:36:49 +010021set(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
Eanna O Cathain2f0ddb62022-03-03 15:58:10 +000027SET(USE_ARMNN_DELEGATE False CACHE BOOL "Use delegate file")
28message("USE_ARMNN_DELEGATE=${USE_ARMNN_DELEGATE}")
29
Éanna Ó Catháin919c14e2020-09-14 17:36:49 +010030include(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
Éanna Ó Catháinc6ab02a2021-04-07 14:35:25 +010045include(../common/cmake/find_opencv.cmake)
46include(../common/cmake/find_armnn.cmake)
Eanna O Cathain2f0ddb62022-03-03 15:58:10 +000047if( 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()
Éanna Ó Catháin919c14e2020-09-14 17:36:49 +010056
57include_directories(include)
Eanna O Cathain2f0ddb62022-03-03 15:58:10 +000058## chose the correct instance of ArmnnNetworkExecutor.hpp
59if( USE_ARMNN_DELEGATE )
60 include_directories(include/delegate)
61else()
62 include_directories(../common/include/ArmnnUtils)
63endif()
Éanna Ó Catháinc6ab02a2021-04-07 14:35:25 +010064include_directories(../common/include/Utils)
65include_directories(../common/include/CVUtils)
Éanna Ó Catháin919c14e2020-09-14 17:36:49 +010066
67file(GLOB SOURCES "src/*.cpp")
George Gekov23c26272021-08-16 11:32:10 +010068file(GLOB CVUTILS_SOURCES "../common/src/CVUtils**/*.cpp")
69file(GLOB UTILS_SOURCES "../common/src/Utils**/*.cpp")
Éanna Ó Catháin919c14e2020-09-14 17:36:49 +010070list(REMOVE_ITEM SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Main.cpp)
Eanna O Cathain2f0ddb62022-03-03 15:58:10 +000071if( 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()
Éanna Ó Catháin919c14e2020-09-14 17:36:49 +010087file(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
George Gekov23c26272021-08-16 11:32:10 +010096add_executable("${APP_TARGET_NAME}" ${SOURCES} ${CVUTILS_SOURCES} ${UTILS_SOURCES} ${APP_MAIN})
Éanna Ó Catháin919c14e2020-09-14 17:36:49 +010097
Eanna O Cathain2f0ddb62022-03-03 15:58:10 +000098if( 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
Éanna Ó Catháin919c14e2020-09-14 17:36:49 +0100107if (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})