blob: d5cdca2b56dfccc62f69151b3ec8f9fac27dfdfb [file] [log] [blame]
Pavel Macenauer59e057f2020-04-15 14:17:26 +00001#
Jim Flynnbbfe6032020-07-20 16:57:44 +01002# Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
Pavel Macenauer59e057f2020-04-15 14:17:26 +00003# Copyright 2020 NXP
4# SPDX-License-Identifier: MIT
5#
Jim Flynn870b96c2022-03-25 21:24:56 +00006
telsoa01c577f2c2018-08-31 09:22:23 +01007option(BUILD_ONNX_PARSER "Build Onnx parser" OFF)
telsoa014fcda012018-03-09 14:13:49 +00008option(BUILD_UNIT_TESTS "Build unit tests" ON)
9option(BUILD_TESTS "Build test applications" OFF)
10option(BUILD_FOR_COVERAGE "Use no optimization and output .gcno and .gcda files" OFF)
11option(ARMCOMPUTENEON "Build with ARM Compute NEON support" OFF)
12option(ARMCOMPUTECL "Build with ARM Compute OpenCL support" OFF)
Matteo Martincighf88663c2019-08-28 16:38:53 +010013option(ARMNNREF "Build with ArmNN reference support" ON)
telsoa014fcda012018-03-09 14:13:49 +000014option(PROFILING_BACKEND_STREAMLINE "Forward the armNN profiling events to DS-5/Streamline as annotations" OFF)
telsoa01c577f2c2018-08-31 09:22:23 +010015# options used for heap profiling and leak checking
surmeh013537c2c2018-05-18 16:31:43 +010016option(HEAP_PROFILING "Build with heap profiling enabled" OFF)
telsoa01c577f2c2018-08-31 09:22:23 +010017option(LEAK_CHECKING "Build with leak checking enabled" OFF)
surmeh013537c2c2018-05-18 16:31:43 +010018option(GPERFTOOLS_ROOT "Location where the gperftools 'include' and 'lib' folders to be found" Off)
telsoa01c577f2c2018-08-31 09:22:23 +010019# options used for tensorflow lite support
20option(BUILD_TF_LITE_PARSER "Build Tensorflow Lite parser" OFF)
Nattapat Chaimanowong949f1252019-01-31 15:36:39 +000021option(BUILD_ARMNN_SERIALIZER "Build Armnn Serializer" OFF)
Éanna Ó Catháina563b922019-05-09 11:34:06 +010022option(BUILD_ACCURACY_TOOL "Build Accuracy Tool" OFF)
Nattapat Chaimanowong949f1252019-01-31 15:36:39 +000023option(FLATC_DIR "Path to Flatbuffers compiler" OFF)
telsoa01c577f2c2018-08-31 09:22:23 +010024option(TF_LITE_GENERATED_PATH "Tensorflow lite generated C++ schema location" OFF)
25option(FLATBUFFERS_ROOT "Location where the flatbuffers 'include' and 'lib' folders to be found" Off)
Matteo Martincighe7d44982019-08-05 12:16:47 +010026option(DYNAMIC_BACKEND_PATHS "Colon seperated list of paths where to load the dynamic backends from" "")
Colm Donelan0dbe00a2020-06-03 08:00:28 +010027option(SAMPLE_DYNAMIC_BACKEND "Include the sample dynamic backend and its tests in the build" OFF)
Colm Donelana21620d2019-10-11 13:09:49 +010028option(BUILD_GATORD_MOCK "Build the Gatord simulator for external profiling testing." ON)
Sadik Armagan6f86b692020-03-09 11:04:32 +000029option(BUILD_TIMELINE_DECODER "Build the Timeline Decoder for external profiling." ON)
Finn Williams2ed809c2020-04-20 21:21:07 +010030option(BUILD_BASE_PIPE_SERVER "Build the server to handle external profiling pipe traffic" ON)
Pavel Macenauer59e057f2020-04-15 14:17:26 +000031option(BUILD_PYTHON_WHL "Build Python wheel package" OFF)
32option(BUILD_PYTHON_SRC "Build Python source package" OFF)
Jim Flynnbbfe6032020-07-20 16:57:44 +010033option(BUILD_STATIC_PIPE_LIBS "Build Static PIPE libraries" OFF)
34option(BUILD_PIPE_ONLY "Build the PIPE libraries only" OFF)
Sadik Armagan5d03e312020-11-17 16:43:56 +000035option(BUILD_ARMNN_TFLITE_DELEGATE "Build the Arm NN TfLite delegate" OFF)
Jim Flynne1fdd282021-10-26 21:26:10 +010036option(BUILD_MEMORY_STRATEGY_BENCHMARK "Build the MemoryBenchmark" OFF)
Jim Flynn870b96c2022-03-25 21:24:56 +000037option(BUILD_BARE_METAL "Disable features requiring operating system support" OFF)
Jan Eilersa96489a2021-12-08 10:05:47 +000038option(BUILD_SHARED_LIBS "Determines if Armnn will be built statically or dynamically.
39 This is an experimental feature and not fully supported.
40 Only the ArmNN core and the Delegate can be built statically." ON)
telsoa014fcda012018-03-09 14:13:49 +000041
42include(SelectLibraryConfigurations)
43
44set(COMPILER_IS_GNU_LIKE 0)
Jim Flynn82262f52020-07-16 11:23:45 +010045if(${CMAKE_CXX_COMPILER_ID} STREQUAL GNU OR
46 ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang OR
47 ${CMAKE_CXX_COMPILER_ID} STREQUAL AppleClang)
telsoa014fcda012018-03-09 14:13:49 +000048 set(COMPILER_IS_GNU_LIKE 1)
49endif()
50
51# Enable CCache if available and not disabled
52option(USE_CCACHE "USE_CCACHE" ON)
53find_program(CCACHE_FOUND ccache)
54if(CCACHE_FOUND AND USE_CCACHE)
55 get_property(rule_launch_compile DIRECTORY PROPERTY RULE_LAUNCH_COMPILE)
56 set_property(DIRECTORY PROPERTY RULE_LAUNCH_COMPILE "CCACHE_CPP2=yes ${rule_launch_compile} ccache")
57endif()
58
59# Enable distcc if available and not disabled
60option(USE_DISTCC "USE_DISTCC" OFF)
61find_program(DISTCC_FOUND distcc)
62if(DISTCC_FOUND AND USE_DISTCC)
63 get_property(rule_launch_compile DIRECTORY PROPERTY RULE_LAUNCH_COMPILE)
64 set_property(DIRECTORY PROPERTY RULE_LAUNCH_COMPILE "${rule_launch_compile} distcc")
65endif()
66
67# Set to release configuration by default
68if(NOT CMAKE_BUILD_TYPE)
69 set(CMAKE_BUILD_TYPE "Release")
70endif()
71
72# Compiler flags that are always set
73set(CMAKE_POSITION_INDEPENDENT_CODE ON)
74if(COMPILER_IS_GNU_LIKE)
Derek Lambertiba25aee2019-12-10 22:20:54 +000075 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -Wextra -Werror -Wold-style-cast -Wno-missing-braces -Wconversion -Wsign-conversion")
Finn Williams3d626142021-08-11 13:04:32 +010076 if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
77 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
78 endif()
telsoa014fcda012018-03-09 14:13:49 +000079elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
Jim Flynn870b96c2022-03-25 21:24:56 +000080 # Disable C4996 (use of deprecated identifier) due to
81 # https://developercommunity.visualstudio.com/content/problem/252574/deprecated-compilation-warning-for-virtual-overrid.html
Rob Hughesfc6bf052019-12-16 17:10:51 +000082 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /MP /wd4996")
Rob Hughesbc873d22020-05-20 13:11:37 +010083 add_definitions(-DNO_STRICT=1)
telsoa014fcda012018-03-09 14:13:49 +000084endif()
85if("${CMAKE_SYSTEM_NAME}" STREQUAL Android)
Keith Davisb8942bf2021-05-31 11:22:35 +010086 # -lz is necessary for when building with ACL set with compressed kernels
87 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -llog -lz")
88 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -llog -lz")
telsoa014fcda012018-03-09 14:13:49 +000089endif()
90
91# Compiler flags for Release builds
Matthew Benthame30054f2019-06-24 13:10:54 +010092set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG")
telsoa014fcda012018-03-09 14:13:49 +000093if(COMPILER_IS_GNU_LIKE)
94 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
95elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
96 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD /O2")
97endif()
98
99# Compiler flags for Debug builds
100if(COMPILER_IS_GNU_LIKE)
Matthew Benthame30054f2019-06-24 13:10:54 +0100101 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0")
telsoa014fcda012018-03-09 14:13:49 +0000102elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
Matthew Benthame30054f2019-06-24 13:10:54 +0100103 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd /ZI /Od")
telsoa014fcda012018-03-09 14:13:49 +0000104 # Disable SAFESEH which is necessary for Edit and Continue to work
105 set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
106 set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
107endif()
108
109# Modify RelWithDebInfo so that NDEBUG isn't defined.
110# This enables asserts.
111if (COMPILER_IS_GNU_LIKE)
112 string(REPLACE "-DNDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
113elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
114 string(REPLACE "/DNDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
115endif()
116
117# Compiler flags for code coverage measurements
118if(BUILD_FOR_COVERAGE)
119 if(NOT CMAKE_BUILD_TYPE EQUAL "Debug")
120 message(WARNING "BUILD_FOR_COVERAGE set so forcing to Debug build")
121 set(CMAKE_BUILD_TYPE "Debug")
122 endif()
123
124 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
125 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
126endif()
127
128if(BUILD_FOR_COVERAGE AND NOT BUILD_UNIT_TESTS)
129 message(WARNING "BUILD_FOR_COVERAGE set but not BUILD_UNIT_TESTS, so code coverage will not be able to run")
130endif()
131
132set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
133
Derek Lambertieac4adb2020-08-25 13:05:59 +0100134include(CMakeFindDependencyMacro)
135
Jim Flynnbbfe6032020-07-20 16:57:44 +0100136if (NOT BUILD_PIPE_ONLY)
Jim Flynnbbfe6032020-07-20 16:57:44 +0100137 # cxxopts (Alternative to boost::program_options)
Vincent ABRIOU54940192020-09-03 13:02:43 +0200138 find_path(CXXOPTS_INCLUDE cxxopts/cxxopts.hpp PATHS third-party NO_CMAKE_FIND_ROOT_PATH)
Jim Flynnbbfe6032020-07-20 16:57:44 +0100139 include_directories(SYSTEM "${CXXOPTS_INCLUDE}")
140endif()
Jan Eilers7e989832020-06-19 11:47:21 +0100141
Jim Flynnbbfe6032020-07-20 16:57:44 +0100142if (NOT BUILD_PIPE_ONLY)
143 # ghc (Alternative to boost::filesystem)
Vincent ABRIOU54940192020-09-03 13:02:43 +0200144 find_path(GHC_INCLUDE ghc/filesystem.hpp PATHS third-party NO_CMAKE_FIND_ROOT_PATH)
Jim Flynnbbfe6032020-07-20 16:57:44 +0100145 include_directories(SYSTEM "${GHC_INCLUDE}")
146endif()
Jan Eilers307fd342020-06-23 14:16:04 +0100147
telsoa014fcda012018-03-09 14:13:49 +0000148# pthread
Jim Flynn870b96c2022-03-25 21:24:56 +0000149if (NOT BUILD_BARE_METAL)
150find_package(Threads)
151endif()
telsoa014fcda012018-03-09 14:13:49 +0000152
153# Favour the protobuf passed on command line
Nikhil Raj5d955cf2021-04-19 16:59:48 +0100154if(BUILD_ONNX_PARSER)
telsoa014fcda012018-03-09 14:13:49 +0000155 find_library(PROTOBUF_LIBRARY_DEBUG NAMES "protobufd"
156 PATHS ${PROTOBUF_ROOT}/lib
157 NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
158 find_library(PROTOBUF_LIBRARY_DEBUG NAMES "protobufd")
159
160 find_library(PROTOBUF_LIBRARY_RELEASE NAMES "protobuf"
161 PATHS ${PROTOBUF_ROOT}/lib
162 NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
163 find_library(PROTOBUF_LIBRARY_RELEASE NAMES "protobuf")
164
165 select_library_configurations(PROTOBUF)
166
167 find_path(PROTOBUF_INCLUDE_DIRS "google/protobuf/message.h"
168 PATHS ${PROTOBUF_ROOT}/include
169 NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
170 find_path(PROTOBUF_INCLUDE_DIRS "google/protobuf/message.h")
171
172 include_directories(SYSTEM "${PROTOBUF_INCLUDE_DIRS}")
173 add_definitions(-DPROTOBUF_USE_DLLS)
telsoa014fcda012018-03-09 14:13:49 +0000174
telsoa01c577f2c2018-08-31 09:22:23 +0100175 add_definitions(-DARMNN_ONNX_PARSER)
176
177 find_path(ONNX_GENERATED_SOURCES "onnx/onnx.pb.cc")
178
179 # C++ headers generated for onnx protobufs
180 include_directories(SYSTEM "${ONNX_GENERATED_SOURCES}")
181endif()
182
Sadik Armagan5d03e312020-11-17 16:43:56 +0000183if(BUILD_ARMNN_TFLITE_DELEGATE)
184 add_definitions(-DARMNN_TFLITE_DELEGATE)
185endif()
Nattapat Chaimanowong949f1252019-01-31 15:36:39 +0000186# Flatbuffers support for TF Lite and Armnn Serializer
187if(BUILD_TF_LITE_PARSER OR BUILD_ARMNN_SERIALIZER)
telsoa01c577f2c2018-08-31 09:22:23 +0100188 # verify we have a valid flatbuffers include path
189 find_path(FLATBUFFERS_INCLUDE_PATH flatbuffers/flatbuffers.h
190 HINTS ${FLATBUFFERS_ROOT}/include /usr/local/include /usr/include)
191
Matthew Benthamd1ae3a62019-02-22 17:30:32 +0000192 message(STATUS "Flatbuffers headers are located at: ${FLATBUFFERS_INCLUDE_PATH}")
telsoa01c577f2c2018-08-31 09:22:23 +0100193
194 find_library(FLATBUFFERS_LIBRARY
195 NAMES libflatbuffers.a flatbuffers
196 HINTS ${FLATBUFFERS_ROOT}/lib /usr/local/lib /usr/lib)
197
Matthew Benthamd1ae3a62019-02-22 17:30:32 +0000198 message(STATUS "Flatbuffers library located at: ${FLATBUFFERS_LIBRARY}")
Nattapat Chaimanowong949f1252019-01-31 15:36:39 +0000199endif()
200
201# Flatbuffers schema support for TF Lite
202if(BUILD_TF_LITE_PARSER)
203 find_path(TF_LITE_SCHEMA_INCLUDE_PATH
204 schema_generated.h
205 HINTS ${TF_LITE_GENERATED_PATH})
206
Matthew Benthamd1ae3a62019-02-22 17:30:32 +0000207 message(STATUS "Tf Lite generated header found at: ${TF_LITE_SCHEMA_INCLUDE_PATH}")
Nattapat Chaimanowong949f1252019-01-31 15:36:39 +0000208
Matthew Benthamd1ae3a62019-02-22 17:30:32 +0000209 add_definitions(-DARMNN_TF_LITE_PARSER)
telsoa01c577f2c2018-08-31 09:22:23 +0100210endif()
211
Kevin May43a799c2019-02-08 16:31:42 +0000212if(BUILD_ARMNN_SERIALIZER)
Kevin May43a799c2019-02-08 16:31:42 +0000213 add_definitions(-DARMNN_SERIALIZER)
Matthew Bentham268509a2019-02-25 13:58:24 +0000214 add_definitions(-DARMNN_SERIALIZER_SCHEMA_PATH="${CMAKE_CURRENT_SOURCE_DIR}/src/armnnSerializer/ArmnnSchema.fbs")
Kevin May43a799c2019-02-08 16:31:42 +0000215endif()
216
telsoa014fcda012018-03-09 14:13:49 +0000217include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
Sadik Armagana97a0be2020-03-03 10:44:56 +0000218include_directories(${CMAKE_CURRENT_SOURCE_DIR}/profiling)
telsoa014fcda012018-03-09 14:13:49 +0000219
220# ARM Compute
221# Note that ARM Compute has a different folder layout depending on the branch but also on
222# whether it comes from a prepackaged archive (this is why we add several hints below)
223if(ARMCOMPUTENEON OR ARMCOMPUTECL)
Francis Murtagh82490ee2020-11-04 13:33:41 +0000224 find_path(ARMCOMPUTE_INCLUDE arm_compute/core/CL/OpenCL.h
telsoa014fcda012018-03-09 14:13:49 +0000225 PATHS ${ARMCOMPUTE_ROOT}/include
226 PATHS ${ARMCOMPUTE_ROOT}/applications/arm_compute
227 PATHS ${ARMCOMPUTE_ROOT}
228 NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
Francis Murtagh82490ee2020-11-04 13:33:41 +0000229 find_path(ARMCOMPUTE_INCLUDE arm_compute/core/CL/OpenCL.h)
telsoa014fcda012018-03-09 14:13:49 +0000230 include_directories(SYSTEM "${ARMCOMPUTE_INCLUDE}")
231
232 # Find the Arm Compute libraries if not already specified (the user may have already defined this in advance,
233 # e.g. if building clframework as a dependent cmake project)
234 if (NOT DEFINED ARMCOMPUTE_LIBRARIES)
235 # We link to the static variant so that customers don't need to find and build a compatible version of clframework.
236 # First try the folders specified ARMCOMPUTE_BUILD_DIR (with PATH_SUFFIXES for
237 # Windows builds)
Matthew Bentham2624dd72020-05-20 10:44:18 +0100238 if ((NOT DEFINED ARMCOMPUTE_BUILD_DIR) AND (DEFINED ARMCOMPUTE_ROOT))
239 # Default build directory for ComputeLibrary is under the root
240 set(ARMCOMPUTE_BUILD_DIR ${ARMCOMPUTE_ROOT}/build)
241 endif()
242
telsoa014fcda012018-03-09 14:13:49 +0000243 find_library(ARMCOMPUTE_LIBRARY_DEBUG NAMES arm_compute-static
244 PATHS ${ARMCOMPUTE_BUILD_DIR}
245 PATH_SUFFIXES "Debug"
246 NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
247 find_library(ARMCOMPUTE_LIBRARY_RELEASE NAMES arm_compute-static
248 PATHS ${ARMCOMPUTE_BUILD_DIR}
249 PATH_SUFFIXES "Release"
250 NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
251 find_library(ARMCOMPUTE_CORE_LIBRARY_DEBUG NAMES arm_compute_core-static
252 PATHS ${ARMCOMPUTE_BUILD_DIR}
253 PATH_SUFFIXES "Debug"
254 NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
255 find_library(ARMCOMPUTE_CORE_LIBRARY_RELEASE NAMES arm_compute_core-static
256 PATHS ${ARMCOMPUTE_BUILD_DIR}
257 PATH_SUFFIXES "Release"
258 NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
259
260 # In case it wasn't there, try a default search (will work in cases where
261 # the library has been installed into a standard location)
262 find_library(ARMCOMPUTE_LIBRARY_DEBUG NAMES arm_compute-static)
263 find_library(ARMCOMPUTE_LIBRARY_RELEASE NAMES arm_compute-static)
264 find_library(ARMCOMPUTE_CORE_LIBRARY_DEBUG NAMES arm_compute_core-static)
265 find_library(ARMCOMPUTE_CORE_LIBRARY_RELEASE NAMES arm_compute_core-static)
266
Matthew Bentham6445cff2020-03-10 11:13:17 +0000267 # In case it wasn't there, try the dynamic libraries
268 # This case will get used in a linux setup where the Compute Library
269 # has been installed in a standard system library path as a dynamic library
270 find_library(ARMCOMPUTE_LIBRARY_DEBUG NAMES arm_compute)
271 find_library(ARMCOMPUTE_LIBRARY_RELEASE NAMES arm_compute)
272 find_library(ARMCOMPUTE_CORE_LIBRARY_DEBUG NAMES arm_compute_core)
273 find_library(ARMCOMPUTE_CORE_LIBRARY_RELEASE NAMES arm_compute_core)
274
telsoa014fcda012018-03-09 14:13:49 +0000275 set(ARMCOMPUTE_LIBRARIES
276 debug ${ARMCOMPUTE_LIBRARY_DEBUG} ${ARMCOMPUTE_CORE_LIBRARY_DEBUG}
277 optimized ${ARMCOMPUTE_LIBRARY_RELEASE} ${ARMCOMPUTE_CORE_LIBRARY_RELEASE} )
278 endif()
279endif()
280
281# ARM Compute NEON backend
282if(ARMCOMPUTENEON)
283 # Add preprocessor definition for ARM Compute NEON
284 add_definitions(-DARMCOMPUTENEON_ENABLED)
285 # The ARM Compute headers contain some NEON intrinsics, so we need to build armnn with NEON support on armv7
286 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES armv7 AND COMPILER_IS_GNU_LIKE)
287 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon")
288 endif()
289endif()
290
291# ARM Compute OpenCL backend
292if(ARMCOMPUTECL)
Nikhil Rajb55d3662021-02-11 14:49:19 +0000293 # verify we have a valid flatbuffers include path
294 find_path(FLATBUFFERS_INCLUDE_PATH flatbuffers/flatbuffers.h
295 HINTS ${FLATBUFFERS_ROOT}/include /usr/local/include /usr/include)
296
297 message(STATUS "Flatbuffers headers are located at: ${FLATBUFFERS_INCLUDE_PATH}")
298
299 find_library(FLATBUFFERS_LIBRARY
300 NAMES libflatbuffers.a flatbuffers
301 HINTS ${FLATBUFFERS_ROOT}/lib /usr/local/lib /usr/lib)
302
303 message(STATUS "Flatbuffers library located at: ${FLATBUFFERS_LIBRARY}")
304
telsoa014fcda012018-03-09 14:13:49 +0000305 # Always use Arm compute library OpenCL headers
Nikhil Raj407cddf2021-11-30 09:57:08 +0000306 find_path(OPENCL_INCLUDE CL/opencl.hpp
telsoa014fcda012018-03-09 14:13:49 +0000307 PATHS ${ARMCOMPUTE_ROOT}/include
308 NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
309
Matthew Bentham3b72db02018-10-11 09:47:01 +0100310 # Link against libOpenCL in opencl-1.2-stubs, but don't search there at runtime
311 link_libraries(-L${ARMCOMPUTE_BUILD_DIR}/opencl-1.2-stubs)
312 set(OPENCL_LIBRARIES OpenCL)
telsoa014fcda012018-03-09 14:13:49 +0000313
Matthew Bentham416b41d2020-02-05 22:15:26 +0000314 include_directories(SYSTEM ${OPENCL_INCLUDE})
telsoa014fcda012018-03-09 14:13:49 +0000315
316 # Add preprocessor definition for ARM Compute OpenCL
317 add_definitions(-DARMCOMPUTECL_ENABLED)
318
319 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DARM_COMPUTE_DEBUG_ENABLED")
320endif()
321
322# Used by both Arm Compute backends, but should be added
323# to the search path after the system directories if necessary
324if(ARMCOMPUTENEON OR ARMCOMPUTECL)
325 find_path(HALF_INCLUDE half/half.hpp)
326 find_path(HALF_INCLUDE half/half.hpp
327 PATHS ${ARMCOMPUTE_ROOT}/include
328 NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
telsoa01c577f2c2018-08-31 09:22:23 +0100329 include_directories(SYSTEM ${HALF_INCLUDE})
telsoa014fcda012018-03-09 14:13:49 +0000330endif()
331
Matteo Martincighdb16dd32019-08-27 16:41:11 +0100332# ArmNN reference backend
333if(ARMNNREF)
334 add_definitions(-DARMNNREF_ENABLED)
Matteo Martincighe67edb22019-08-14 14:05:46 +0100335endif()
336
Colm Donelanaa93d982020-06-28 08:16:46 +0100337# This is the root for the dynamic backend tests to search for dynamic
338# backends. By default it will be the project build directory.
Rob Hughes35c31c02020-08-17 15:47:20 +0100339add_definitions(-DDYNAMIC_BACKEND_BUILD_DIR="${PROJECT_BINARY_DIR}")
Colm Donelanaa93d982020-06-28 08:16:46 +0100340
Narumol Prangnawarat60a20fb2019-12-09 17:24:41 +0000341# ArmNN dynamic backend
342if(DYNAMIC_BACKEND_PATHS)
343 add_definitions(-DARMNN_DYNAMIC_BACKEND_ENABLED)
344endif()
345
Narumol Prangnawarat867eba52020-02-03 12:29:56 +0000346if(SAMPLE_DYNAMIC_BACKEND)
347 add_definitions(-DSAMPLE_DYNAMIC_BACKEND_ENABLED)
348endif()
349
telsoa014fcda012018-03-09 14:13:49 +0000350# Streamline annotate
351if(PROFILING_BACKEND_STREAMLINE)
352 include_directories("${GATOR_ROOT}/annotate")
353 add_definitions(-DARMNN_STREAMLINE_ENABLED)
354endif()
355
Jim Flynn870b96c2022-03-25 21:24:56 +0000356if(NOT BUILD_BARE_METAL)
telsoa01c577f2c2018-08-31 09:22:23 +0100357if(HEAP_PROFILING OR LEAK_CHECKING)
surmeh013537c2c2018-05-18 16:31:43 +0100358 # enable heap profiling for everything except for referencetests
359 if(NOT ${PROJECT_NAME} STREQUAL "referencetests")
360 find_path(HEAP_PROFILER_INCLUDE gperftools/heap-profiler.h
361 PATHS ${GPERFTOOLS_ROOT}/include
362 NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
363 include_directories(SYSTEM "${HEAP_PROFILER_INCLUDE}")
364 find_library(GPERF_TOOLS_LIBRARY
365 NAMES tcmalloc_debug
366 HINTS ${GPERFTOOLS_ROOT}/lib)
367 link_directories(${GPERFTOOLS_ROOT}/lib)
368
369 link_libraries(${GPERF_TOOLS_LIBRARY})
telsoa01c577f2c2018-08-31 09:22:23 +0100370 if (HEAP_PROFILING)
371 add_definitions("-DARMNN_HEAP_PROFILING_ENABLED=1")
372 endif()
373 if (LEAK_CHECKING)
374 add_definitions("-DARMNN_LEAK_CHECKING_ENABLED=1")
375 endif()
surmeh013537c2c2018-05-18 16:31:43 +0100376 else()
Rob Hughes721b82f2019-11-15 09:04:17 +0000377 message(STATUS "Heap profiling and leak checking are disabled for referencetests")
surmeh013537c2c2018-05-18 16:31:43 +0100378 endif()
379else()
380 # Valgrind only works with gperftools version number <= 2.4
381 CHECK_INCLUDE_FILE(valgrind/memcheck.h VALGRIND_FOUND)
382endif()
Jim Flynn870b96c2022-03-25 21:24:56 +0000383endif()
surmeh013537c2c2018-05-18 16:31:43 +0100384
telsoa01c577f2c2018-08-31 09:22:23 +0100385if(NOT BUILD_TF_LITE_PARSER)
386 message(STATUS "Tensorflow Lite parser support is disabled")
387endif()
David Beck10b4dfd2018-09-19 12:03:20 +0100388
Nattapat Chaimanowong949f1252019-01-31 15:36:39 +0000389if(NOT BUILD_ARMNN_SERIALIZER)
390 message(STATUS "Armnn Serializer support is disabled")
391endif()
392
Pavel Macenauer59e057f2020-04-15 14:17:26 +0000393if(NOT BUILD_PYTHON_WHL)
394 message(STATUS "PyArmNN wheel package is disabled")
395endif()
396
397if(NOT BUILD_PYTHON_SRC)
398 message(STATUS "PyArmNN source package is disabled")
399endif()
400
401if(BUILD_PYTHON_WHL OR BUILD_PYTHON_SRC)
402 find_package(PythonInterp 3 REQUIRED)
403 if(NOT ${PYTHONINTERP_FOUND})
404 message(FATAL_ERROR "Python 3.x required to build PyArmNN, but not found")
405 endif()
406
407 find_package(PythonLibs 3 REQUIRED)
408 if(NOT ${PYTHONLIBS_FOUND})
409 message(FATAL_ERROR "Python 3.x development package required to build PyArmNN, but not found")
410 endif()
411
412 find_package(SWIG 4 REQUIRED)
413 if(NOT ${SWIG_FOUND})
414 message(FATAL_ERROR "SWIG 4.x requried to build PyArmNN, but not found")
415 endif()
416endif()
417
Jim Flynn870b96c2022-03-25 21:24:56 +0000418if(BUILD_BARE_METAL)
419 add_definitions(-DARMNN_BUILD_BARE_METAL
420 -DARMNN_DISABLE_FILESYSTEM
421 -DARMNN_DISABLE_PROCESSES
422 -DARMNN_DISABLE_THREADS
423 -DARMNN_DISABLE_SOCKETS)
424endif()
425
David Beck10b4dfd2018-09-19 12:03:20 +0100426# ArmNN source files required for all build options
427include_directories(SYSTEM third-party)