xref: /aosp_15_r20/external/armnn/samples/ObjectDetection/CMakeLists.txt (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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