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