xref: /aosp_15_r20/external/armnn/cmake/GlobalConfig.cmake (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker#
2*89c4ff92SAndroid Build Coastguard Worker# Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker# Copyright 2020 NXP
4*89c4ff92SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT
5*89c4ff92SAndroid Build Coastguard Worker#
6*89c4ff92SAndroid Build Coastguard Worker
7*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_ONNX_PARSER "Build Onnx parser" OFF)
8*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_UNIT_TESTS "Build unit tests" ON)
9*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_TESTS "Build test applications" OFF)
10*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_FOR_COVERAGE "Use no optimization and output .gcno and .gcda files" OFF)
11*89c4ff92SAndroid Build Coastguard Workeroption(ARMCOMPUTENEON "Build with ARM Compute NEON support" OFF)
12*89c4ff92SAndroid Build Coastguard Workeroption(ARMCOMPUTECL "Build with ARM Compute OpenCL support" OFF)
13*89c4ff92SAndroid Build Coastguard Workeroption(ARMNNREF "Build with ArmNN reference support" ON)
14*89c4ff92SAndroid Build Coastguard Workeroption(ARMNNTOSAREF "Build with TOSA reference support" OFF)
15*89c4ff92SAndroid Build Coastguard Workeroption(PROFILING_BACKEND_STREAMLINE "Forward the armNN profiling events to DS-5/Streamline as annotations" OFF)
16*89c4ff92SAndroid Build Coastguard Worker# options used for heap profiling and leak checking
17*89c4ff92SAndroid Build Coastguard Workeroption(HEAP_PROFILING "Build with heap profiling enabled" OFF)
18*89c4ff92SAndroid Build Coastguard Workeroption(LEAK_CHECKING "Build with leak checking enabled" OFF)
19*89c4ff92SAndroid Build Coastguard Workeroption(GPERFTOOLS_ROOT "Location where the gperftools 'include' and 'lib' folders to be found" Off)
20*89c4ff92SAndroid Build Coastguard Worker# options used for tensorflow lite support
21*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_TF_LITE_PARSER "Build Tensorflow Lite parser" OFF)
22*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_ARMNN_SERIALIZER "Build Armnn Serializer" OFF)
23*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_ACCURACY_TOOL "Build Accuracy Tool" OFF)
24*89c4ff92SAndroid Build Coastguard Workeroption(FLATC_DIR "Path to Flatbuffers compiler" OFF)
25*89c4ff92SAndroid Build Coastguard Workeroption(TF_LITE_GENERATED_PATH "Tensorflow lite generated C++ schema location" OFF)
26*89c4ff92SAndroid Build Coastguard Workeroption(FLATBUFFERS_ROOT "Location where the flatbuffers 'include' and 'lib' folders to be found" Off)
27*89c4ff92SAndroid Build Coastguard Workeroption(TOSA_SERIALIZATION_LIB_ROOT "Location where the TOSA Serialization Library 'include' and 'lib' folders can be found" OFF)
28*89c4ff92SAndroid Build Coastguard Workeroption(TOSA_REFERENCE_MODEL_ROOT "Location where the TOSA Reference Model 'include' and 'lib' folders can be found" OFF)
29*89c4ff92SAndroid Build Coastguard Workeroption(TOSA_REFERENCE_MODEL_OUTPUT "TOSA Reference Model output is printed during layer support checks" ON)
30*89c4ff92SAndroid Build Coastguard Workeroption(DYNAMIC_BACKEND_PATHS "Colon seperated list of paths where to load the dynamic backends from" "")
31*89c4ff92SAndroid Build Coastguard Workeroption(SAMPLE_DYNAMIC_BACKEND "Include the sample dynamic backend and its tests in the build" OFF)
32*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_GATORD_MOCK "Build the Gatord simulator for external profiling testing." ON)
33*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_TIMELINE_DECODER "Build the Timeline Decoder for external profiling." ON)
34*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_BASE_PIPE_SERVER "Build the server to handle external profiling pipe traffic" ON)
35*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_PYTHON_WHL "Build Python wheel package" OFF)
36*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_PYTHON_SRC "Build Python source package" OFF)
37*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_STATIC_PIPE_LIBS "Build Static PIPE libraries" OFF)
38*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_PIPE_ONLY "Build the PIPE libraries only" OFF)
39*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_CLASSIC_DELEGATE "Build the Arm NN TfLite delegate" OFF)
40*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_OPAQUE_DELEGATE "Build the Arm NN TfLite Opaque delegate" OFF)
41*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_MEMORY_STRATEGY_BENCHMARK "Build the MemoryBenchmark" OFF)
42*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_BARE_METAL "Disable features requiring operating system support" OFF)
43*89c4ff92SAndroid Build Coastguard Workeroption(BUILD_SHARED_LIBS "Determines if Armnn will be built statically or dynamically.
44*89c4ff92SAndroid Build Coastguard Worker                          This is an experimental feature and not fully supported.
45*89c4ff92SAndroid Build Coastguard Worker                          Only the ArmNN core and the Delegate can be built statically." ON)
46*89c4ff92SAndroid Build Coastguard Workeroption(EXECUTE_NETWORK_STATIC " This is a limited experimental build that is entirely static.
47*89c4ff92SAndroid Build Coastguard Worker                                It currently only supports being set by changing the current CMake default options like so:
48*89c4ff92SAndroid Build Coastguard Worker                                BUILD_TF_LITE_PARSER=1/0
49*89c4ff92SAndroid Build Coastguard Worker                                BUILD_ARMNN_SERIALIZER=1/0
50*89c4ff92SAndroid Build Coastguard Worker                                ARMCOMPUTENEON=1/0
51*89c4ff92SAndroid Build Coastguard Worker                                ARMNNREF=1/0
52*89c4ff92SAndroid Build Coastguard Worker                                ARMCOMPUTECL=0
53*89c4ff92SAndroid Build Coastguard Worker                                BUILD_ONNX_PARSER=0
54*89c4ff92SAndroid Build Coastguard Worker                                BUILD_CLASSIC_DELEGATE=0
55*89c4ff92SAndroid Build Coastguard Worker                                BUILD_OPAQUE_DELEGATE=0
56*89c4ff92SAndroid Build Coastguard Worker                                BUILD_TIMELINE_DECODER=0
57*89c4ff92SAndroid Build Coastguard Worker                                BUILD_BASE_PIPE_SERVER=0
58*89c4ff92SAndroid Build Coastguard Worker                                BUILD_UNIT_TESTS=0
59*89c4ff92SAndroid Build Coastguard Worker                                BUILD_GATORD_MOCK=0" OFF)
60*89c4ff92SAndroid Build Coastguard Worker
61*89c4ff92SAndroid Build Coastguard Workerif(BUILD_ARMNN_TFLITE_DELEGATE)
62*89c4ff92SAndroid Build Coastguard Worker    message(BUILD_ARMNN_TFLITE_DELEGATE option is deprecated, it will be removed in 24.02, please use BUILD_CLASSIC_DELEGATE instead)
63*89c4ff92SAndroid Build Coastguard Worker    set(BUILD_CLASSIC_DELEGATE 1)
64*89c4ff92SAndroid Build Coastguard Workerendif()
65*89c4ff92SAndroid Build Coastguard Worker
66*89c4ff92SAndroid Build Coastguard Workerinclude(SelectLibraryConfigurations)
67*89c4ff92SAndroid Build Coastguard Worker
68*89c4ff92SAndroid Build Coastguard Workerset(COMPILER_IS_GNU_LIKE 0)
69*89c4ff92SAndroid Build Coastguard Workerif(${CMAKE_CXX_COMPILER_ID} STREQUAL GNU OR
70*89c4ff92SAndroid Build Coastguard Worker   ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang OR
71*89c4ff92SAndroid Build Coastguard Worker   ${CMAKE_CXX_COMPILER_ID} STREQUAL AppleClang)
72*89c4ff92SAndroid Build Coastguard Worker    set(COMPILER_IS_GNU_LIKE 1)
73*89c4ff92SAndroid Build Coastguard Workerendif()
74*89c4ff92SAndroid Build Coastguard Worker
75*89c4ff92SAndroid Build Coastguard Worker# Enable CCache if available and not disabled
76*89c4ff92SAndroid Build Coastguard Workeroption(USE_CCACHE "USE_CCACHE" ON)
77*89c4ff92SAndroid Build Coastguard Workerfind_program(CCACHE_FOUND ccache)
78*89c4ff92SAndroid Build Coastguard Workerif(CCACHE_FOUND AND USE_CCACHE)
79*89c4ff92SAndroid Build Coastguard Worker    get_property(rule_launch_compile DIRECTORY PROPERTY RULE_LAUNCH_COMPILE)
80*89c4ff92SAndroid Build Coastguard Worker    set_property(DIRECTORY PROPERTY RULE_LAUNCH_COMPILE "CCACHE_CPP2=yes ${rule_launch_compile} ccache")
81*89c4ff92SAndroid Build Coastguard Workerendif()
82*89c4ff92SAndroid Build Coastguard Worker
83*89c4ff92SAndroid Build Coastguard Worker# Enable distcc if available and not disabled
84*89c4ff92SAndroid Build Coastguard Workeroption(USE_DISTCC "USE_DISTCC" OFF)
85*89c4ff92SAndroid Build Coastguard Workerfind_program(DISTCC_FOUND distcc)
86*89c4ff92SAndroid Build Coastguard Workerif(DISTCC_FOUND AND USE_DISTCC)
87*89c4ff92SAndroid Build Coastguard Worker    get_property(rule_launch_compile DIRECTORY PROPERTY RULE_LAUNCH_COMPILE)
88*89c4ff92SAndroid Build Coastguard Worker    set_property(DIRECTORY PROPERTY RULE_LAUNCH_COMPILE "${rule_launch_compile} distcc")
89*89c4ff92SAndroid Build Coastguard Workerendif()
90*89c4ff92SAndroid Build Coastguard Worker
91*89c4ff92SAndroid Build Coastguard Worker# Set to release configuration by default
92*89c4ff92SAndroid Build Coastguard Workerif(NOT CMAKE_BUILD_TYPE)
93*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_BUILD_TYPE "Release")
94*89c4ff92SAndroid Build Coastguard Workerendif()
95*89c4ff92SAndroid Build Coastguard Worker
96*89c4ff92SAndroid Build Coastguard Worker# Compiler flags that are always set
97*89c4ff92SAndroid Build Coastguard Workerset(CMAKE_POSITION_INDEPENDENT_CODE ON)
98*89c4ff92SAndroid Build Coastguard Workerif(COMPILER_IS_GNU_LIKE)
99*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -Wextra -Werror -Wold-style-cast -Wno-missing-braces -Wconversion -Wsign-conversion")
100*89c4ff92SAndroid Build Coastguard Worker    if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
101*89c4ff92SAndroid Build Coastguard Worker        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -Wno-psabi")
102*89c4ff92SAndroid Build Coastguard Worker    endif()
103*89c4ff92SAndroid Build Coastguard Workerelseif(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
104*89c4ff92SAndroid Build Coastguard Worker    # Disable C4996 (use of deprecated identifier) due to
105*89c4ff92SAndroid Build Coastguard Worker    # https://developercommunity.visualstudio.com/content/problem/252574/deprecated-compilation-warning-for-virtual-overrid.html
106*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /MP /wd4996")
107*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DNO_STRICT=1)
108*89c4ff92SAndroid Build Coastguard Workerendif()
109*89c4ff92SAndroid Build Coastguard Workerif("${CMAKE_SYSTEM_NAME}" STREQUAL Android)
110*89c4ff92SAndroid Build Coastguard Worker    # -lz is necessary for when building with ACL set with compressed kernels
111*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -llog -lz")
112*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -llog -lz")
113*89c4ff92SAndroid Build Coastguard Workerendif()
114*89c4ff92SAndroid Build Coastguard Worker
115*89c4ff92SAndroid Build Coastguard Worker# Compiler flags for Release builds
116*89c4ff92SAndroid Build Coastguard Workerset(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG")
117*89c4ff92SAndroid Build Coastguard Workerif(COMPILER_IS_GNU_LIKE)
118*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
119*89c4ff92SAndroid Build Coastguard Workerelseif(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
120*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD /O2")
121*89c4ff92SAndroid Build Coastguard Workerendif()
122*89c4ff92SAndroid Build Coastguard Worker
123*89c4ff92SAndroid Build Coastguard Worker# Compiler flags for Debug builds
124*89c4ff92SAndroid Build Coastguard Workerif(COMPILER_IS_GNU_LIKE)
125*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0")
126*89c4ff92SAndroid Build Coastguard Workerelseif(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
127*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd /ZI /Od")
128*89c4ff92SAndroid Build Coastguard Worker    # Disable SAFESEH which is necessary for Edit and Continue to work
129*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_EXE_LINKER_FLAGS_DEBUG  "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
130*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_SHARED_LINKER_FLAGS_DEBUG  "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
131*89c4ff92SAndroid Build Coastguard Workerendif()
132*89c4ff92SAndroid Build Coastguard Worker
133*89c4ff92SAndroid Build Coastguard Worker# Modify RelWithDebInfo so that NDEBUG isn't defined.
134*89c4ff92SAndroid Build Coastguard Worker# This enables asserts.
135*89c4ff92SAndroid Build Coastguard Workerif (COMPILER_IS_GNU_LIKE)
136*89c4ff92SAndroid Build Coastguard Worker    string(REPLACE "-DNDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
137*89c4ff92SAndroid Build Coastguard Workerelseif (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
138*89c4ff92SAndroid Build Coastguard Worker    string(REPLACE "/DNDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
139*89c4ff92SAndroid Build Coastguard Workerendif()
140*89c4ff92SAndroid Build Coastguard Worker
141*89c4ff92SAndroid Build Coastguard Worker# Compiler flags for code coverage measurements
142*89c4ff92SAndroid Build Coastguard Workerif(BUILD_FOR_COVERAGE)
143*89c4ff92SAndroid Build Coastguard Worker    if(NOT CMAKE_BUILD_TYPE EQUAL "Debug")
144*89c4ff92SAndroid Build Coastguard Worker        message(WARNING "BUILD_FOR_COVERAGE set so forcing to Debug build")
145*89c4ff92SAndroid Build Coastguard Worker        set(CMAKE_BUILD_TYPE "Debug")
146*89c4ff92SAndroid Build Coastguard Worker    endif()
147*89c4ff92SAndroid Build Coastguard Worker
148*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} --coverage")
149*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
150*89c4ff92SAndroid Build Coastguard Workerendif()
151*89c4ff92SAndroid Build Coastguard Worker
152*89c4ff92SAndroid Build Coastguard Workerif(BUILD_FOR_COVERAGE AND NOT BUILD_UNIT_TESTS)
153*89c4ff92SAndroid Build Coastguard Worker    message(WARNING "BUILD_FOR_COVERAGE set but not BUILD_UNIT_TESTS, so code coverage will not be able to run")
154*89c4ff92SAndroid Build Coastguard Workerendif()
155*89c4ff92SAndroid Build Coastguard Worker
156*89c4ff92SAndroid Build Coastguard Workerset(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
157*89c4ff92SAndroid Build Coastguard Worker
158*89c4ff92SAndroid Build Coastguard Workerinclude(CMakeFindDependencyMacro)
159*89c4ff92SAndroid Build Coastguard Worker
160*89c4ff92SAndroid Build Coastguard Worker
161*89c4ff92SAndroid Build Coastguard Workerif(EXECUTE_NETWORK_STATIC)
162*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DARMNN_DISABLE_SOCKETS
163*89c4ff92SAndroid Build Coastguard Worker                    -DBUILD_SHARED_LIBS=0
164*89c4ff92SAndroid Build Coastguard Worker                    -DARMNN_EXECUTE_NETWORK_STATIC)
165*89c4ff92SAndroid Build Coastguard Workerendif()
166*89c4ff92SAndroid Build Coastguard Worker
167*89c4ff92SAndroid Build Coastguard Workerif(BUILD_BARE_METAL)
168*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DARMNN_BUILD_BARE_METAL
169*89c4ff92SAndroid Build Coastguard Worker            -DARMNN_DISABLE_FILESYSTEM
170*89c4ff92SAndroid Build Coastguard Worker            -DARMNN_DISABLE_PROCESSES
171*89c4ff92SAndroid Build Coastguard Worker            -DARMNN_DISABLE_THREADS
172*89c4ff92SAndroid Build Coastguard Worker            -DARMNN_DISABLE_SOCKETS)
173*89c4ff92SAndroid Build Coastguard Workerendif()
174*89c4ff92SAndroid Build Coastguard Worker
175*89c4ff92SAndroid Build Coastguard Workerif (NOT BUILD_PIPE_ONLY)
176*89c4ff92SAndroid Build Coastguard Worker  # cxxopts (Alternative to boost::program_options)
177*89c4ff92SAndroid Build Coastguard Worker  find_path(CXXOPTS_INCLUDE cxxopts/cxxopts.hpp PATHS third-party NO_CMAKE_FIND_ROOT_PATH)
178*89c4ff92SAndroid Build Coastguard Worker  include_directories(SYSTEM "${CXXOPTS_INCLUDE}")
179*89c4ff92SAndroid Build Coastguard Workerendif()
180*89c4ff92SAndroid Build Coastguard Worker
181*89c4ff92SAndroid Build Coastguard Workerif (NOT BUILD_PIPE_ONLY)
182*89c4ff92SAndroid Build Coastguard Worker  # ghc (Alternative to boost::filesystem)
183*89c4ff92SAndroid Build Coastguard Worker  find_path(GHC_INCLUDE ghc/filesystem.hpp PATHS third-party NO_CMAKE_FIND_ROOT_PATH)
184*89c4ff92SAndroid Build Coastguard Worker  include_directories(SYSTEM "${GHC_INCLUDE}")
185*89c4ff92SAndroid Build Coastguard Workerendif()
186*89c4ff92SAndroid Build Coastguard Worker
187*89c4ff92SAndroid Build Coastguard Worker# JNI_BUILD has DBUILD_SHARED_LIBS set to 0 and not finding libs while building
188*89c4ff92SAndroid Build Coastguard Worker# hence added NOT BUILD_CLASSIC_DELEGATE/BUILD_OPAQUE_DELEGATE condition
189*89c4ff92SAndroid Build Coastguard Workerif(NOT BUILD_SHARED_LIBS AND NOT BUILD_CLASSIC_DELEGATE AND NOT BUILD_OPAQUE_DELEGATE)
190*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_FIND_LIBRARY_SUFFIXES .a .lib)
191*89c4ff92SAndroid Build Coastguard Workerendif()
192*89c4ff92SAndroid Build Coastguard Worker
193*89c4ff92SAndroid Build Coastguard Worker# pthread
194*89c4ff92SAndroid Build Coastguard Workerif (NOT BUILD_BARE_METAL)
195*89c4ff92SAndroid Build Coastguard Workerfind_package(Threads)
196*89c4ff92SAndroid Build Coastguard Workerendif()
197*89c4ff92SAndroid Build Coastguard Worker
198*89c4ff92SAndroid Build Coastguard Workerif (EXECUTE_NETWORK_STATIC)
199*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc -static -pthread")
200*89c4ff92SAndroid Build Coastguard Workerendif()
201*89c4ff92SAndroid Build Coastguard Worker
202*89c4ff92SAndroid Build Coastguard Worker# Favour the protobuf passed on command line
203*89c4ff92SAndroid Build Coastguard Workerif(BUILD_ONNX_PARSER)
204*89c4ff92SAndroid Build Coastguard Worker    find_library(PROTOBUF_LIBRARY_DEBUG NAMES "protobufd"
205*89c4ff92SAndroid Build Coastguard Worker        PATHS ${PROTOBUF_ROOT}/lib
206*89c4ff92SAndroid Build Coastguard Worker        NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
207*89c4ff92SAndroid Build Coastguard Worker    find_library(PROTOBUF_LIBRARY_DEBUG NAMES "protobufd")
208*89c4ff92SAndroid Build Coastguard Worker
209*89c4ff92SAndroid Build Coastguard Worker    find_library(PROTOBUF_LIBRARY_RELEASE NAMES "protobuf"
210*89c4ff92SAndroid Build Coastguard Worker        PATHS ${PROTOBUF_ROOT}/lib
211*89c4ff92SAndroid Build Coastguard Worker        NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
212*89c4ff92SAndroid Build Coastguard Worker    find_library(PROTOBUF_LIBRARY_RELEASE NAMES "protobuf")
213*89c4ff92SAndroid Build Coastguard Worker
214*89c4ff92SAndroid Build Coastguard Worker    select_library_configurations(PROTOBUF)
215*89c4ff92SAndroid Build Coastguard Worker
216*89c4ff92SAndroid Build Coastguard Worker    find_path(PROTOBUF_INCLUDE_DIRS "google/protobuf/message.h"
217*89c4ff92SAndroid Build Coastguard Worker              PATHS ${PROTOBUF_ROOT}/include
218*89c4ff92SAndroid Build Coastguard Worker              NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
219*89c4ff92SAndroid Build Coastguard Worker    find_path(PROTOBUF_INCLUDE_DIRS "google/protobuf/message.h")
220*89c4ff92SAndroid Build Coastguard Worker
221*89c4ff92SAndroid Build Coastguard Worker    include_directories(SYSTEM "${PROTOBUF_INCLUDE_DIRS}")
222*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DPROTOBUF_USE_DLLS)
223*89c4ff92SAndroid Build Coastguard Worker
224*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DARMNN_ONNX_PARSER)
225*89c4ff92SAndroid Build Coastguard Worker
226*89c4ff92SAndroid Build Coastguard Worker    find_path(ONNX_GENERATED_SOURCES "onnx/onnx.pb.cc")
227*89c4ff92SAndroid Build Coastguard Worker
228*89c4ff92SAndroid Build Coastguard Worker    # C++ headers generated for onnx protobufs
229*89c4ff92SAndroid Build Coastguard Worker    include_directories(SYSTEM "${ONNX_GENERATED_SOURCES}")
230*89c4ff92SAndroid Build Coastguard Workerendif()
231*89c4ff92SAndroid Build Coastguard Worker
232*89c4ff92SAndroid Build Coastguard Workerif(BUILD_CLASSIC_DELEGATE)
233*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DARMNN_TFLITE_DELEGATE)
234*89c4ff92SAndroid Build Coastguard Workerendif()
235*89c4ff92SAndroid Build Coastguard Worker
236*89c4ff92SAndroid Build Coastguard Workerif(BUILD_OPAQUE_DELEGATE)
237*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DARMNN_TFLITE_OPAQUE_DELEGATE)
238*89c4ff92SAndroid Build Coastguard Workerendif()
239*89c4ff92SAndroid Build Coastguard Worker
240*89c4ff92SAndroid Build Coastguard Worker# Flatbuffers support for TF Lite, Armnn Serializer or the TOSA backend.
241*89c4ff92SAndroid Build Coastguard Workerif(BUILD_TF_LITE_PARSER OR BUILD_ARMNN_SERIALIZER OR ARMNNTOSAREF)
242*89c4ff92SAndroid Build Coastguard Worker    # verify we have a valid flatbuffers include path
243*89c4ff92SAndroid Build Coastguard Worker    find_path(FLATBUFFERS_INCLUDE_PATH flatbuffers/flatbuffers.h
244*89c4ff92SAndroid Build Coastguard Worker              HINTS ${FLATBUFFERS_ROOT}/include /usr/local/include /usr/include)
245*89c4ff92SAndroid Build Coastguard Worker
246*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "Flatbuffers headers are located at: ${FLATBUFFERS_INCLUDE_PATH}")
247*89c4ff92SAndroid Build Coastguard Worker
248*89c4ff92SAndroid Build Coastguard Worker    find_library(FLATBUFFERS_LIBRARY
249*89c4ff92SAndroid Build Coastguard Worker                 NAMES libflatbuffers.a flatbuffers
250*89c4ff92SAndroid Build Coastguard Worker                 HINTS ${FLATBUFFERS_ROOT}/lib /usr/local/lib /usr/lib)
251*89c4ff92SAndroid Build Coastguard Worker
252*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "Flatbuffers library located at: ${FLATBUFFERS_LIBRARY}")
253*89c4ff92SAndroid Build Coastguard Workerendif()
254*89c4ff92SAndroid Build Coastguard Worker
255*89c4ff92SAndroid Build Coastguard Worker# Flatbuffers schema support for TF Lite
256*89c4ff92SAndroid Build Coastguard Workerif(BUILD_TF_LITE_PARSER)
257*89c4ff92SAndroid Build Coastguard Worker    find_path(TF_LITE_SCHEMA_INCLUDE_PATH
258*89c4ff92SAndroid Build Coastguard Worker              schema_generated.h
259*89c4ff92SAndroid Build Coastguard Worker              HINTS ${TF_LITE_GENERATED_PATH})
260*89c4ff92SAndroid Build Coastguard Worker
261*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "Tf Lite generated header found at: ${TF_LITE_SCHEMA_INCLUDE_PATH}")
262*89c4ff92SAndroid Build Coastguard Worker
263*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DARMNN_TF_LITE_PARSER)
264*89c4ff92SAndroid Build Coastguard Workerendif()
265*89c4ff92SAndroid Build Coastguard Worker
266*89c4ff92SAndroid Build Coastguard Workerif(BUILD_ARMNN_SERIALIZER)
267*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DARMNN_SERIALIZER)
268*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DARMNN_SERIALIZER_SCHEMA_PATH="${CMAKE_CURRENT_SOURCE_DIR}/src/armnnSerializer/ArmnnSchema.fbs")
269*89c4ff92SAndroid Build Coastguard Workerendif()
270*89c4ff92SAndroid Build Coastguard Worker
271*89c4ff92SAndroid Build Coastguard Workerinclude_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
272*89c4ff92SAndroid Build Coastguard Workerinclude_directories(${CMAKE_CURRENT_SOURCE_DIR}/profiling)
273*89c4ff92SAndroid Build Coastguard Worker
274*89c4ff92SAndroid Build Coastguard Worker# ARM Compute
275*89c4ff92SAndroid Build Coastguard Worker# Note that ARM Compute has a different folder layout depending on the branch but also on
276*89c4ff92SAndroid Build Coastguard Worker# whether it comes from a prepackaged archive (this is why we add several hints below)
277*89c4ff92SAndroid Build Coastguard Workerif(ARMCOMPUTENEON OR ARMCOMPUTECL)
278*89c4ff92SAndroid Build Coastguard Worker    find_path(ARMCOMPUTE_INCLUDE arm_compute/core/CL/OpenCL.h
279*89c4ff92SAndroid Build Coastguard Worker              PATHS ${ARMCOMPUTE_ROOT}/include
280*89c4ff92SAndroid Build Coastguard Worker              PATHS ${ARMCOMPUTE_ROOT}/applications/arm_compute
281*89c4ff92SAndroid Build Coastguard Worker              PATHS ${ARMCOMPUTE_ROOT}
282*89c4ff92SAndroid Build Coastguard Worker              NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
283*89c4ff92SAndroid Build Coastguard Worker    find_path(ARMCOMPUTE_INCLUDE arm_compute/core/CL/OpenCL.h)
284*89c4ff92SAndroid Build Coastguard Worker    include_directories(SYSTEM "${ARMCOMPUTE_INCLUDE}")
285*89c4ff92SAndroid Build Coastguard Worker
286*89c4ff92SAndroid Build Coastguard Worker    # Find the Arm Compute libraries if not already specified (the user may have already defined this in advance,
287*89c4ff92SAndroid Build Coastguard Worker    # e.g. if building clframework as a dependent cmake project)
288*89c4ff92SAndroid Build Coastguard Worker    if (NOT DEFINED ARMCOMPUTE_LIBRARIES)
289*89c4ff92SAndroid Build Coastguard Worker        # We link to the static variant so that customers don't need to find and build a compatible version of clframework.
290*89c4ff92SAndroid Build Coastguard Worker        # First try the folders specified ARMCOMPUTE_BUILD_DIR (with PATH_SUFFIXES for
291*89c4ff92SAndroid Build Coastguard Worker        # Windows builds)
292*89c4ff92SAndroid Build Coastguard Worker        if ((NOT DEFINED ARMCOMPUTE_BUILD_DIR) AND (DEFINED ARMCOMPUTE_ROOT))
293*89c4ff92SAndroid Build Coastguard Worker            # Default build directory for ComputeLibrary is under the root
294*89c4ff92SAndroid Build Coastguard Worker            set(ARMCOMPUTE_BUILD_DIR ${ARMCOMPUTE_ROOT}/build)
295*89c4ff92SAndroid Build Coastguard Worker        endif()
296*89c4ff92SAndroid Build Coastguard Worker
297*89c4ff92SAndroid Build Coastguard Worker        find_library(ARMCOMPUTE_LIBRARY_DEBUG NAMES arm_compute-static
298*89c4ff92SAndroid Build Coastguard Worker                     PATHS ${ARMCOMPUTE_BUILD_DIR}
299*89c4ff92SAndroid Build Coastguard Worker                     PATH_SUFFIXES "Debug"
300*89c4ff92SAndroid Build Coastguard Worker                     NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
301*89c4ff92SAndroid Build Coastguard Worker        find_library(ARMCOMPUTE_LIBRARY_RELEASE NAMES arm_compute-static
302*89c4ff92SAndroid Build Coastguard Worker                     PATHS ${ARMCOMPUTE_BUILD_DIR}
303*89c4ff92SAndroid Build Coastguard Worker                     PATH_SUFFIXES "Release"
304*89c4ff92SAndroid Build Coastguard Worker                     NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
305*89c4ff92SAndroid Build Coastguard Worker        find_library(ARMCOMPUTE_CORE_LIBRARY_DEBUG NAMES arm_compute_core-static
306*89c4ff92SAndroid Build Coastguard Worker                     PATHS ${ARMCOMPUTE_BUILD_DIR}
307*89c4ff92SAndroid Build Coastguard Worker                     PATH_SUFFIXES "Debug"
308*89c4ff92SAndroid Build Coastguard Worker                     NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
309*89c4ff92SAndroid Build Coastguard Worker        find_library(ARMCOMPUTE_CORE_LIBRARY_RELEASE NAMES arm_compute_core-static
310*89c4ff92SAndroid Build Coastguard Worker                     PATHS ${ARMCOMPUTE_BUILD_DIR}
311*89c4ff92SAndroid Build Coastguard Worker                     PATH_SUFFIXES "Release"
312*89c4ff92SAndroid Build Coastguard Worker                     NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
313*89c4ff92SAndroid Build Coastguard Worker
314*89c4ff92SAndroid Build Coastguard Worker        # In case it wasn't there, try a default search (will work in cases where
315*89c4ff92SAndroid Build Coastguard Worker        # the library has been installed into a standard location)
316*89c4ff92SAndroid Build Coastguard Worker        find_library(ARMCOMPUTE_LIBRARY_DEBUG NAMES arm_compute-static)
317*89c4ff92SAndroid Build Coastguard Worker        find_library(ARMCOMPUTE_LIBRARY_RELEASE NAMES arm_compute-static)
318*89c4ff92SAndroid Build Coastguard Worker        find_library(ARMCOMPUTE_CORE_LIBRARY_DEBUG NAMES arm_compute_core-static)
319*89c4ff92SAndroid Build Coastguard Worker        find_library(ARMCOMPUTE_CORE_LIBRARY_RELEASE NAMES arm_compute_core-static)
320*89c4ff92SAndroid Build Coastguard Worker
321*89c4ff92SAndroid Build Coastguard Worker        # In case it wasn't there, try the dynamic libraries
322*89c4ff92SAndroid Build Coastguard Worker        # This case will get used in a linux setup where the Compute Library
323*89c4ff92SAndroid Build Coastguard Worker        # has been installed in a standard system library path as a dynamic library
324*89c4ff92SAndroid Build Coastguard Worker        find_library(ARMCOMPUTE_LIBRARY_DEBUG NAMES arm_compute)
325*89c4ff92SAndroid Build Coastguard Worker        find_library(ARMCOMPUTE_LIBRARY_RELEASE NAMES arm_compute)
326*89c4ff92SAndroid Build Coastguard Worker        find_library(ARMCOMPUTE_CORE_LIBRARY_DEBUG NAMES arm_compute_core)
327*89c4ff92SAndroid Build Coastguard Worker        find_library(ARMCOMPUTE_CORE_LIBRARY_RELEASE NAMES arm_compute_core)
328*89c4ff92SAndroid Build Coastguard Worker
329*89c4ff92SAndroid Build Coastguard Worker        set(ARMCOMPUTE_LIBRARIES
330*89c4ff92SAndroid Build Coastguard Worker            debug ${ARMCOMPUTE_LIBRARY_DEBUG} ${ARMCOMPUTE_CORE_LIBRARY_DEBUG}
331*89c4ff92SAndroid Build Coastguard Worker            optimized ${ARMCOMPUTE_LIBRARY_RELEASE} ${ARMCOMPUTE_CORE_LIBRARY_RELEASE} )
332*89c4ff92SAndroid Build Coastguard Worker    endif()
333*89c4ff92SAndroid Build Coastguard Workerendif()
334*89c4ff92SAndroid Build Coastguard Worker
335*89c4ff92SAndroid Build Coastguard Worker# ARM Compute NEON backend
336*89c4ff92SAndroid Build Coastguard Workerif(ARMCOMPUTENEON)
337*89c4ff92SAndroid Build Coastguard Worker    # Add preprocessor definition for ARM Compute NEON
338*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DARMCOMPUTENEON_ENABLED)
339*89c4ff92SAndroid Build Coastguard Worker    # The ARM Compute headers contain some NEON intrinsics, so we need to build armnn with NEON support on armv7
340*89c4ff92SAndroid Build Coastguard Worker    if(${CMAKE_SYSTEM_PROCESSOR} MATCHES armv7 AND COMPILER_IS_GNU_LIKE)
341*89c4ff92SAndroid Build Coastguard Worker        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon")
342*89c4ff92SAndroid Build Coastguard Worker    endif()
343*89c4ff92SAndroid Build Coastguard Workerendif()
344*89c4ff92SAndroid Build Coastguard Worker
345*89c4ff92SAndroid Build Coastguard Worker# ARM Compute OpenCL backend
346*89c4ff92SAndroid Build Coastguard Workerif(ARMCOMPUTECL)
347*89c4ff92SAndroid Build Coastguard Worker    # verify we have a valid flatbuffers include path
348*89c4ff92SAndroid Build Coastguard Worker    find_path(FLATBUFFERS_INCLUDE_PATH flatbuffers/flatbuffers.h
349*89c4ff92SAndroid Build Coastguard Worker              HINTS ${FLATBUFFERS_ROOT}/include /usr/local/include /usr/include)
350*89c4ff92SAndroid Build Coastguard Worker
351*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "Flatbuffers headers are located at: ${FLATBUFFERS_INCLUDE_PATH}")
352*89c4ff92SAndroid Build Coastguard Worker
353*89c4ff92SAndroid Build Coastguard Worker    find_library(FLATBUFFERS_LIBRARY
354*89c4ff92SAndroid Build Coastguard Worker                 NAMES libflatbuffers.a flatbuffers
355*89c4ff92SAndroid Build Coastguard Worker                 HINTS ${FLATBUFFERS_ROOT}/lib /usr/local/lib /usr/lib)
356*89c4ff92SAndroid Build Coastguard Worker
357*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "Flatbuffers library located at: ${FLATBUFFERS_LIBRARY}")
358*89c4ff92SAndroid Build Coastguard Worker
359*89c4ff92SAndroid Build Coastguard Worker    # Always use Arm compute library OpenCL headers
360*89c4ff92SAndroid Build Coastguard Worker    find_path(OPENCL_INCLUDE CL/opencl.hpp
361*89c4ff92SAndroid Build Coastguard Worker              PATHS ${ARMCOMPUTE_ROOT}/include
362*89c4ff92SAndroid Build Coastguard Worker              NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
363*89c4ff92SAndroid Build Coastguard Worker
364*89c4ff92SAndroid Build Coastguard Worker    # Link against libOpenCL in opencl-1.2-stubs, but don't search there at runtime
365*89c4ff92SAndroid Build Coastguard Worker    link_libraries(-L${ARMCOMPUTE_BUILD_DIR}/opencl-1.2-stubs)
366*89c4ff92SAndroid Build Coastguard Worker    set(OPENCL_LIBRARIES OpenCL)
367*89c4ff92SAndroid Build Coastguard Worker
368*89c4ff92SAndroid Build Coastguard Worker    include_directories(SYSTEM ${OPENCL_INCLUDE})
369*89c4ff92SAndroid Build Coastguard Worker
370*89c4ff92SAndroid Build Coastguard Worker    # Add preprocessor definition for ARM Compute OpenCL
371*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DARMCOMPUTECL_ENABLED)
372*89c4ff92SAndroid Build Coastguard Worker
373*89c4ff92SAndroid Build Coastguard Worker    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DARM_COMPUTE_DEBUG_ENABLED")
374*89c4ff92SAndroid Build Coastguard Workerendif()
375*89c4ff92SAndroid Build Coastguard Worker
376*89c4ff92SAndroid Build Coastguard Worker# Used by both Arm Compute backends, but should be added
377*89c4ff92SAndroid Build Coastguard Worker# to the search path after the system directories if necessary
378*89c4ff92SAndroid Build Coastguard Workerif(ARMCOMPUTENEON OR ARMCOMPUTECL)
379*89c4ff92SAndroid Build Coastguard Worker    find_path(HALF_INCLUDE half/half.hpp)
380*89c4ff92SAndroid Build Coastguard Worker    find_path(HALF_INCLUDE half/half.hpp
381*89c4ff92SAndroid Build Coastguard Worker              PATHS ${ARMCOMPUTE_ROOT}/include
382*89c4ff92SAndroid Build Coastguard Worker              NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
383*89c4ff92SAndroid Build Coastguard Worker    include_directories(SYSTEM ${HALF_INCLUDE})
384*89c4ff92SAndroid Build Coastguard Workerendif()
385*89c4ff92SAndroid Build Coastguard Worker
386*89c4ff92SAndroid Build Coastguard Worker# ArmNN reference backend
387*89c4ff92SAndroid Build Coastguard Workerif(ARMNNREF)
388*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DARMNNREF_ENABLED)
389*89c4ff92SAndroid Build Coastguard Workerendif()
390*89c4ff92SAndroid Build Coastguard Worker
391*89c4ff92SAndroid Build Coastguard Worker# If a backend requires TOSA common, add it here.
392*89c4ff92SAndroid Build Coastguard Workerif(ARMNNTOSAREF)
393*89c4ff92SAndroid Build Coastguard Worker    set(ARMNNTOSACOMMON ON)
394*89c4ff92SAndroid Build Coastguard Workerendif()
395*89c4ff92SAndroid Build Coastguard Worker
396*89c4ff92SAndroid Build Coastguard Workerif(ARMNNTOSACOMMON)
397*89c4ff92SAndroid Build Coastguard Worker    # Locate the includes for the TOSA serialization library as it is needed for TOSA common and TOSA backends.
398*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "TOSA serialization library root set to ${TOSA_SERIALIZATION_LIB_ROOT}")
399*89c4ff92SAndroid Build Coastguard Worker
400*89c4ff92SAndroid Build Coastguard Worker    find_path(TOSA_SERIALIZATION_LIB_INCLUDE tosa_serialization_handler.h
401*89c4ff92SAndroid Build Coastguard Worker              HINTS ${TOSA_SERIALIZATION_LIB_ROOT}/include)
402*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "TOSA serialization library include directory located at: ${TOSA_SERIALIZATION_LIB_INCLUDE}")
403*89c4ff92SAndroid Build Coastguard Worker
404*89c4ff92SAndroid Build Coastguard Worker    find_library(TOSA_SERIALIZATION_LIB
405*89c4ff92SAndroid Build Coastguard Worker                 NAMES tosa_serialization_lib.a tosa_serialization_lib
406*89c4ff92SAndroid Build Coastguard Worker                 HINTS ${TOSA_SERIALIZATION_LIB_ROOT}/lib /usr/local/lib /usr/lib)
407*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "TOSA serialization library set to ${TOSA_SERIALIZATION_LIB}")
408*89c4ff92SAndroid Build Coastguard Worker
409*89c4ff92SAndroid Build Coastguard Worker    # Include required headers for TOSA Serialization Library
410*89c4ff92SAndroid Build Coastguard Worker    include_directories(SYSTEM ${FLATBUFFERS_INCLUDE_PATH})
411*89c4ff92SAndroid Build Coastguard Worker    include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/half)
412*89c4ff92SAndroid Build Coastguard Worker    include_directories(SYSTEM ${TOSA_SERIALIZATION_LIB_INCLUDE})
413*89c4ff92SAndroid Build Coastguard Workerendif()
414*89c4ff92SAndroid Build Coastguard Worker
415*89c4ff92SAndroid Build Coastguard Worker# ArmNN TOSA reference backend
416*89c4ff92SAndroid Build Coastguard Workerif(ARMNNTOSAREF)
417*89c4ff92SAndroid Build Coastguard Worker    # Locate the includes for the TOSA Reference Model, which is specific to the TOSA Reference Backend.
418*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "TOSA Reference Model root set to ${TOSA_REFERENCE_MODEL_ROOT}")
419*89c4ff92SAndroid Build Coastguard Worker
420*89c4ff92SAndroid Build Coastguard Worker    find_path(TOSA_REFERENCE_MODEL_INCLUDE model_runner.h
421*89c4ff92SAndroid Build Coastguard Worker              HINTS ${TOSA_REFERENCE_MODEL_ROOT}/include)
422*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "TOSA Reference Model include directory located at: ${TOSA_REFERENCE_MODEL_INCLUDE}")
423*89c4ff92SAndroid Build Coastguard Worker
424*89c4ff92SAndroid Build Coastguard Worker    include_directories(SYSTEM ${TOSA_REFERENCE_MODEL_INCLUDE})
425*89c4ff92SAndroid Build Coastguard Worker
426*89c4ff92SAndroid Build Coastguard Worker    find_library(TOSA_REFERENCE_MODEL_LIB
427*89c4ff92SAndroid Build Coastguard Worker                 NAMES tosa_reference_model_lib.a tosa_reference_model_lib
428*89c4ff92SAndroid Build Coastguard Worker                 HINTS ${TOSA_REFERENCE_MODEL_ROOT}/lib /usr/local/lib /usr/lib)
429*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "TOSA Reference Model set to ${TOSA_REFERENCE_MODEL_LIB}")
430*89c4ff92SAndroid Build Coastguard Worker
431*89c4ff92SAndroid Build Coastguard Worker    if(TOSA_REFERENCE_MODEL_OUTPUT)
432*89c4ff92SAndroid Build Coastguard Worker        add_definitions("-DTOSA_REFERENCE_MODEL_OUTPUT=1")
433*89c4ff92SAndroid Build Coastguard Worker    endif()
434*89c4ff92SAndroid Build Coastguard Workerendif()
435*89c4ff92SAndroid Build Coastguard Worker
436*89c4ff92SAndroid Build Coastguard Worker# This is the root for the dynamic backend tests to search for dynamic
437*89c4ff92SAndroid Build Coastguard Worker# backends. By default it will be the project build directory.
438*89c4ff92SAndroid Build Coastguard Workeradd_definitions(-DDYNAMIC_BACKEND_BUILD_DIR="${PROJECT_BINARY_DIR}")
439*89c4ff92SAndroid Build Coastguard Worker
440*89c4ff92SAndroid Build Coastguard Worker# ArmNN dynamic backend
441*89c4ff92SAndroid Build Coastguard Workerif(DYNAMIC_BACKEND_PATHS)
442*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DARMNN_DYNAMIC_BACKEND_ENABLED)
443*89c4ff92SAndroid Build Coastguard Workerendif()
444*89c4ff92SAndroid Build Coastguard Worker
445*89c4ff92SAndroid Build Coastguard Workerif(SAMPLE_DYNAMIC_BACKEND)
446*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DSAMPLE_DYNAMIC_BACKEND_ENABLED)
447*89c4ff92SAndroid Build Coastguard Workerendif()
448*89c4ff92SAndroid Build Coastguard Worker
449*89c4ff92SAndroid Build Coastguard Worker# Streamline annotate
450*89c4ff92SAndroid Build Coastguard Workerif(PROFILING_BACKEND_STREAMLINE)
451*89c4ff92SAndroid Build Coastguard Worker    include_directories("${GATOR_ROOT}/annotate")
452*89c4ff92SAndroid Build Coastguard Worker    add_definitions(-DARMNN_STREAMLINE_ENABLED)
453*89c4ff92SAndroid Build Coastguard Workerendif()
454*89c4ff92SAndroid Build Coastguard Worker
455*89c4ff92SAndroid Build Coastguard Workerif(NOT BUILD_BARE_METAL AND NOT EXECUTE_NETWORK_STATIC)
456*89c4ff92SAndroid Build Coastguard Workerif(HEAP_PROFILING OR LEAK_CHECKING)
457*89c4ff92SAndroid Build Coastguard Worker    find_path(HEAP_PROFILER_INCLUDE gperftools/heap-profiler.h
458*89c4ff92SAndroid Build Coastguard Worker            PATHS ${GPERFTOOLS_ROOT}/include
459*89c4ff92SAndroid Build Coastguard Worker            NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
460*89c4ff92SAndroid Build Coastguard Worker    include_directories(SYSTEM "${HEAP_PROFILER_INCLUDE}")
461*89c4ff92SAndroid Build Coastguard Worker    find_library(GPERF_TOOLS_LIBRARY
462*89c4ff92SAndroid Build Coastguard Worker                NAMES tcmalloc_debug
463*89c4ff92SAndroid Build Coastguard Worker                HINTS ${GPERFTOOLS_ROOT}/lib)
464*89c4ff92SAndroid Build Coastguard Worker    link_directories(${GPERFTOOLS_ROOT}/lib)
465*89c4ff92SAndroid Build Coastguard Worker
466*89c4ff92SAndroid Build Coastguard Worker    link_libraries(${GPERF_TOOLS_LIBRARY})
467*89c4ff92SAndroid Build Coastguard Worker    if (HEAP_PROFILING)
468*89c4ff92SAndroid Build Coastguard Worker        add_definitions("-DARMNN_HEAP_PROFILING_ENABLED=1")
469*89c4ff92SAndroid Build Coastguard Worker    endif()
470*89c4ff92SAndroid Build Coastguard Worker    if (LEAK_CHECKING)
471*89c4ff92SAndroid Build Coastguard Worker        add_definitions("-DARMNN_LEAK_CHECKING_ENABLED=1")
472*89c4ff92SAndroid Build Coastguard Worker    endif()
473*89c4ff92SAndroid Build Coastguard Workerelse()
474*89c4ff92SAndroid Build Coastguard Worker    # Valgrind only works with gperftools version number <= 2.4
475*89c4ff92SAndroid Build Coastguard Worker    CHECK_INCLUDE_FILE(valgrind/memcheck.h VALGRIND_FOUND)
476*89c4ff92SAndroid Build Coastguard Workerendif()
477*89c4ff92SAndroid Build Coastguard Workerendif()
478*89c4ff92SAndroid Build Coastguard Worker
479*89c4ff92SAndroid Build Coastguard Workerif(NOT BUILD_TF_LITE_PARSER)
480*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "Tensorflow Lite parser support is disabled")
481*89c4ff92SAndroid Build Coastguard Workerendif()
482*89c4ff92SAndroid Build Coastguard Worker
483*89c4ff92SAndroid Build Coastguard Workerif(NOT BUILD_ARMNN_SERIALIZER)
484*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "Armnn Serializer support is disabled")
485*89c4ff92SAndroid Build Coastguard Workerendif()
486*89c4ff92SAndroid Build Coastguard Worker
487*89c4ff92SAndroid Build Coastguard Workerif(NOT BUILD_PYTHON_WHL)
488*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "PyArmNN wheel package is disabled")
489*89c4ff92SAndroid Build Coastguard Workerendif()
490*89c4ff92SAndroid Build Coastguard Worker
491*89c4ff92SAndroid Build Coastguard Workerif(NOT BUILD_PYTHON_SRC)
492*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "PyArmNN source package is disabled")
493*89c4ff92SAndroid Build Coastguard Workerendif()
494*89c4ff92SAndroid Build Coastguard Worker
495*89c4ff92SAndroid Build Coastguard Workerif(BUILD_PYTHON_WHL OR BUILD_PYTHON_SRC)
496*89c4ff92SAndroid Build Coastguard Worker    find_package(PythonInterp 3 REQUIRED)
497*89c4ff92SAndroid Build Coastguard Worker    if(NOT ${PYTHONINTERP_FOUND})
498*89c4ff92SAndroid Build Coastguard Worker        message(FATAL_ERROR "Python 3.x required to build PyArmNN, but not found")
499*89c4ff92SAndroid Build Coastguard Worker    endif()
500*89c4ff92SAndroid Build Coastguard Worker
501*89c4ff92SAndroid Build Coastguard Worker    find_package(PythonLibs 3 REQUIRED)
502*89c4ff92SAndroid Build Coastguard Worker    if(NOT ${PYTHONLIBS_FOUND})
503*89c4ff92SAndroid Build Coastguard Worker        message(FATAL_ERROR "Python 3.x development package required to build PyArmNN, but not found")
504*89c4ff92SAndroid Build Coastguard Worker    endif()
505*89c4ff92SAndroid Build Coastguard Worker
506*89c4ff92SAndroid Build Coastguard Worker    find_package(SWIG 4 REQUIRED)
507*89c4ff92SAndroid Build Coastguard Worker    if(NOT ${SWIG_FOUND})
508*89c4ff92SAndroid Build Coastguard Worker        message(FATAL_ERROR "SWIG 4.x requried to build PyArmNN, but not found")
509*89c4ff92SAndroid Build Coastguard Worker    endif()
510*89c4ff92SAndroid Build Coastguard Workerendif()
511*89c4ff92SAndroid Build Coastguard Worker
512*89c4ff92SAndroid Build Coastguard Worker# ArmNN source files required for all build options
513*89c4ff92SAndroid Build Coastguard Workerinclude_directories(SYSTEM third-party)
514