1# 2# Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved. 3# Copyright © 2020 NXP 4# SPDX-License-Identifier: MIT 5# 6cmake_minimum_required (VERSION 3.7.0) 7project(armnn) 8set(CMAKE_CXX_STANDARD 17) 9set(CMAKE_CXX_STANDARD_REQUIRED ON) 10 11set(additional_cmake_files) 12list(APPEND additional_cmake_files 13 cmake/ArmnnVersion.cmake 14 cmake/ClassicDelegateVersion.cmake 15 cmake/OpaqueDelegateVersion.cmake 16 cmake/ParserVersion.cmake 17 cmake/Utils.cmake 18 cmake/GlobalConfig.cmake 19 cmake/AddDllCopyCommands.cmake 20 cmake/ArmnnTestUtilsVersion.cmake) 21 22foreach(cmake_file ${additional_cmake_files}) 23 include(${cmake_file}) 24endforeach() 25 26cmake_policy(SET CMP0057 NEW) 27 28# If the root of the tensorflow source tree has not been specified 29# and we are trying to build the tensorflow lite parser make 30# our best guess as to where it will be i.e. one directory above 31# the one this CMakeLists.txt file lives in, in a subdirectory 32# called tensorflow 33if (BUILD_TF_LITE_PARSER AND "${TENSORFLOW_ROOT}" STREQUAL "") 34 set(TENSORFLOW_ROOT "${PROJECT_SOURCE_DIR}/../tensorflow" CACHE INTERNAL "") 35 message(STATUS "Set TENSORFLOW_ROOT: ${TENSORFLOW_ROOT}") 36else() 37 message(STATUS "TENSORFLOW_ROOT: ${TENSORFLOW_ROOT}") 38endif() 39 40set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/delegate/cmake/Modules/") 41 42set(as_subproject Armnn) 43 44macro(find_package) 45 if(NOT ${ARGV0} IN_LIST as_subproject) 46 _find_package(${ARGV}) 47 endif() 48endmacro() 49 50if (DYNAMIC_BACKEND_PATHS) 51 # It's expected to have the format: DYNAMIC_BACKEND_PATHS="PATH_1:PATH_2...:PATH_N" 52 add_definitions('-DDYNAMIC_BACKEND_PATHS="${DYNAMIC_BACKEND_PATHS}"') 53endif() 54 55include(GNUInstallDirs) 56 57add_subdirectory(profiling/common/src) 58add_subdirectory(profiling/client/src) 59 60add_subdirectory(samples) 61add_subdirectory(src/armnnTfLiteParser) 62add_subdirectory(src/armnnSerializer) 63add_subdirectory(src/armnnDeserializer) 64add_subdirectory(src/armnnTestUtils) 65 66if (BUILD_TESTS) 67 add_subdirectory(tests) 68endif() 69 70# Include the additional cmake files in their own target so that they will appear nicely in IDEs 71add_custom_target(AdditionalCMakeFiles SOURCES ${additional_cmake_files}) 72 73set(armnnUtils_sources) 74list(APPEND armnnUtils_sources 75 include/armnnUtils/CompatibleTypes.hpp 76 include/armnnUtils/DataLayoutIndexed.hpp 77 include/armnnUtils/Permute.hpp 78 include/armnnUtils/Filesystem.hpp 79 include/armnnUtils/FloatingPointComparison.hpp 80 include/armnnUtils/FloatingPointConverter.hpp 81 include/armnnUtils/QuantizeHelper.hpp 82 include/armnnUtils/TContainer.hpp 83 include/armnnUtils/TensorUtils.hpp 84 include/armnnUtils/Transpose.hpp 85 src/armnnUtils/BFloat16.hpp 86 src/armnnUtils/CompatibleTypes.cpp 87 src/armnnUtils/Filesystem.cpp 88 src/armnnUtils/GraphTopologicalSort.hpp 89 src/armnnUtils/Half.hpp 90 src/armnnUtils/Permute.cpp 91 src/armnnUtils/DataLayoutIndexed.cpp 92 src/armnnUtils/DotSerializer.cpp 93 src/armnnUtils/DotSerializer.hpp 94 src/armnnUtils/HeapProfiling.cpp 95 src/armnnUtils/HeapProfiling.hpp 96 src/armnnUtils/LeakChecking.cpp 97 src/armnnUtils/LeakChecking.hpp 98 src/armnnUtils/ModelAccuracyChecker.cpp 99 src/armnnUtils/ModelAccuracyChecker.hpp 100 src/armnnUtils/FloatingPointConverter.cpp 101 src/armnnUtils/VerificationHelpers.hpp 102 src/armnnUtils/VerificationHelpers.cpp 103 src/armnnUtils/ParserHelper.hpp 104 src/armnnUtils/ParserHelper.cpp 105 src/armnnUtils/ParserPrototxtFixture.hpp 106 src/armnnUtils/ProfilingOptionsConverter.hpp 107 src/armnnUtils/ProfilingOptionsConverter.cpp 108 src/armnnUtils/PrototxtConversions.hpp 109 src/armnnUtils/PrototxtConversions.cpp 110 src/armnnUtils/TensorIOUtils.hpp 111 src/armnnUtils/TensorUtils.cpp 112 src/armnnUtils/Transpose.cpp 113 ) 114 115add_library_ex(armnnUtils STATIC ${armnnUtils_sources}) 116 117target_include_directories(armnnUtils PRIVATE src/backends) 118 119if(BUILD_ONNX_PARSER) 120 set(armnn_onnx_parser_sources) 121 list(APPEND armnn_onnx_parser_sources 122 include/armnnOnnxParser/IOnnxParser.hpp 123 include/armnnOnnxParser/Version.hpp 124 src/armnnOnnxParser/OnnxParser.hpp 125 src/armnnOnnxParser/OnnxParser.cpp 126 ${ONNX_GENERATED_SOURCES}/onnx/onnx.pb.cc 127 ) 128 # The generated onnx protobuf .cc files are not warning clean and we can't fix them. 129 if(COMPILER_IS_GNU_LIKE) 130 set_source_files_properties(${ONNX_GENERATED_SOURCES}/onnx/onnx.pb.cc PROPERTIES COMPILE_FLAGS "-Wno-conversion -Wno-sign-conversion") 131 endif() 132 133 add_library_ex(armnnOnnxParser SHARED ${armnn_onnx_parser_sources}) 134 135 target_include_directories(armnnOnnxParser PRIVATE src/armnnUtils) 136 137 target_link_libraries(armnnOnnxParser armnn) 138 139 # Protobuf 140 target_link_libraries(armnnOnnxParser ${PROTOBUF_LIBRARIES}) 141 set_target_properties(armnnOnnxParser PROPERTIES VERSION ${ONNX_PARSER_LIB_VERSION} SOVERSION ${ONNX_PARSER_LIB_SOVERSION}) 142endif() 143 144list(APPEND armnn_sources 145 include/armnn/ArmNN.hpp 146 include/armnn/BackendHelper.hpp 147 include/armnn/BackendId.hpp 148 include/armnn/BackendOptions.hpp 149 include/armnn/BackendRegistry.hpp 150 include/armnn/Conversion.hpp 151 include/armnn/Deprecated.hpp 152 include/armnn/Descriptors.hpp 153 include/armnn/DescriptorsFwd.hpp 154 include/armnn/Exceptions.hpp 155 include/armnn/backends/ILayerSupport.hpp 156 include/armnn/backends/ICustomAllocator.hpp 157 include/armnn/IAsyncExecutionCallback.hpp 158 include/armnn/INetwork.hpp 159 include/armnn/IProfiler.hpp 160 include/armnn/IRuntime.hpp 161 include/armnn/IStrategy.hpp 162 include/armnn/IWorkingMemHandle.hpp 163 include/armnn/Logging.hpp 164 include/armnn/LstmParams.hpp 165 include/armnn/MemorySources.hpp 166 include/armnn/NetworkFwd.hpp 167 include/armnn/Optional.hpp 168 include/armnn/QuantizedLstmParams.hpp 169 include/armnn/StrategyBase.hpp 170 include/armnn/Tensor.hpp 171 include/armnn/TensorFwd.hpp 172 include/armnn/Threadpool.hpp 173 include/armnn/Types.hpp 174 include/armnn/TypesUtils.hpp 175 include/armnn/Utils.hpp 176 include/armnn/Version.hpp 177 include/armnn/utility/Assert.hpp 178 include/armnn/utility/IgnoreUnused.hpp 179 include/armnn/utility/NumericCast.hpp 180 include/armnn/utility/PolymorphicDowncast.hpp 181 include/armnn/utility/StringUtils.hpp 182 include/armnn/utility/TransformIterator.hpp 183 include/armnn/backends/SubgraphView.hpp 184 src/armnn/layers/LayerCloneBase.hpp 185 src/armnn/layers/LayerWithParameters.hpp 186 src/armnn/layers/ActivationLayer.hpp 187 src/armnn/layers/ActivationLayer.cpp 188 src/armnn/layers/AdditionLayer.hpp 189 src/armnn/layers/AdditionLayer.cpp 190 src/armnn/layers/ArgMinMaxLayer.hpp 191 src/armnn/layers/ArgMinMaxLayer.cpp 192 src/armnn/layers/BatchMatMulLayer.hpp 193 src/armnn/layers/BatchMatMulLayer.cpp 194 src/armnn/layers/BatchNormalizationLayer.hpp 195 src/armnn/layers/BatchNormalizationLayer.cpp 196 src/armnn/layers/BatchToSpaceNdLayer.hpp 197 src/armnn/layers/BatchToSpaceNdLayer.cpp 198 src/armnn/layers/CastLayer.hpp 199 src/armnn/layers/CastLayer.cpp 200 src/armnn/layers/ChannelShuffleLayer.hpp 201 src/armnn/layers/ChannelShuffleLayer.cpp 202 src/armnn/layers/ComparisonLayer.hpp 203 src/armnn/layers/ComparisonLayer.cpp 204 src/armnn/layers/ConcatLayer.hpp 205 src/armnn/layers/ConcatLayer.cpp 206 src/armnn/layers/ConstantLayer.hpp 207 src/armnn/layers/ConstantLayer.cpp 208 src/armnn/layers/Convolution2dLayer.hpp 209 src/armnn/layers/Convolution2dLayer.cpp 210 src/armnn/layers/Convolution3dLayer.hpp 211 src/armnn/layers/Convolution3dLayer.cpp 212 src/armnn/layers/ConvertFp16ToFp32Layer.hpp 213 src/armnn/layers/ConvertFp16ToFp32Layer.cpp 214 src/armnn/layers/ConvertFp32ToFp16Layer.hpp 215 src/armnn/layers/ConvertFp32ToFp16Layer.cpp 216 src/armnn/layers/DebugLayer.hpp 217 src/armnn/layers/DebugLayer.cpp 218 src/armnn/layers/DepthToSpaceLayer.hpp 219 src/armnn/layers/DepthToSpaceLayer.cpp 220 src/armnn/layers/DepthwiseConvolution2dLayer.hpp 221 src/armnn/layers/DepthwiseConvolution2dLayer.cpp 222 src/armnn/layers/DequantizeLayer.hpp 223 src/armnn/layers/DequantizeLayer.cpp 224 src/armnn/layers/DetectionPostProcessLayer.hpp 225 src/armnn/layers/DetectionPostProcessLayer.cpp 226 src/armnn/layers/ElementwiseBaseLayer.hpp 227 src/armnn/layers/ElementwiseBaseLayer.cpp 228 src/armnn/layers/ElementwiseBinaryLayer.hpp 229 src/armnn/layers/ElementwiseBinaryLayer.cpp 230 src/armnn/layers/ElementwiseUnaryLayer.hpp 231 src/armnn/layers/ElementwiseUnaryLayer.cpp 232 src/armnn/layers/FakeQuantizationLayer.hpp 233 src/armnn/layers/FakeQuantizationLayer.cpp 234 src/armnn/layers/FillLayer.hpp 235 src/armnn/layers/FillLayer.cpp 236 src/armnn/layers/FloorLayer.hpp 237 src/armnn/layers/FloorLayer.cpp 238 src/armnn/layers/FullyConnectedLayer.hpp 239 src/armnn/layers/FullyConnectedLayer.cpp 240 src/armnn/layers/GatherLayer.cpp 241 src/armnn/layers/GatherLayer.hpp 242 src/armnn/layers/GatherNdLayer.cpp 243 src/armnn/layers/GatherNdLayer.hpp 244 src/armnn/layers/InputLayer.hpp 245 src/armnn/layers/InputLayer.cpp 246 src/armnn/layers/InstanceNormalizationLayer.hpp 247 src/armnn/layers/InstanceNormalizationLayer.cpp 248 src/armnn/layers/L2NormalizationLayer.hpp 249 src/armnn/layers/L2NormalizationLayer.cpp 250 src/armnn/layers/LogicalBinaryLayer.hpp 251 src/armnn/layers/LogicalBinaryLayer.cpp 252 src/armnn/layers/LogSoftmaxLayer.hpp 253 src/armnn/layers/LogSoftmaxLayer.cpp 254 src/armnn/layers/LstmLayer.cpp 255 src/armnn/layers/LstmLayer.hpp 256 src/armnn/layers/MapLayer.cpp 257 src/armnn/layers/MapLayer.hpp 258 src/armnn/layers/MaximumLayer.cpp 259 src/armnn/layers/MaximumLayer.hpp 260 src/armnn/layers/MeanLayer.hpp 261 src/armnn/layers/MeanLayer.cpp 262 src/armnn/layers/MemCopyLayer.hpp 263 src/armnn/layers/MemCopyLayer.cpp 264 src/armnn/layers/MemImportLayer.hpp 265 src/armnn/layers/MemImportLayer.cpp 266 src/armnn/layers/MergeLayer.hpp 267 src/armnn/layers/MergeLayer.cpp 268 src/armnn/layers/MinimumLayer.cpp 269 src/armnn/layers/MinimumLayer.hpp 270 src/armnn/layers/MultiplicationLayer.hpp 271 src/armnn/layers/MultiplicationLayer.cpp 272 src/armnn/layers/NormalizationLayer.hpp 273 src/armnn/layers/NormalizationLayer.cpp 274 src/armnn/layers/OutputLayer.hpp 275 src/armnn/layers/OutputLayer.cpp 276 src/armnn/layers/PadLayer.hpp 277 src/armnn/layers/PadLayer.cpp 278 src/armnn/layers/PermuteLayer.hpp 279 src/armnn/layers/PermuteLayer.cpp 280 src/armnn/layers/Pooling2dLayer.hpp 281 src/armnn/layers/Pooling2dLayer.cpp 282 src/armnn/layers/Pooling3dLayer.hpp 283 src/armnn/layers/Pooling3dLayer.cpp 284 src/armnn/layers/QuantizeLayer.cpp 285 src/armnn/layers/QuantizeLayer.hpp 286 src/armnn/layers/QLstmLayer.hpp 287 src/armnn/layers/QLstmLayer.cpp 288 src/armnn/layers/QuantizedLstmLayer.hpp 289 src/armnn/layers/QuantizedLstmLayer.cpp 290 src/armnn/layers/DivisionLayer.cpp 291 src/armnn/layers/DivisionLayer.hpp 292 src/armnn/layers/PreCompiledLayer.hpp 293 src/armnn/layers/PreCompiledLayer.cpp 294 src/armnn/layers/PreluLayer.hpp 295 src/armnn/layers/PreluLayer.cpp 296 src/armnn/layers/RankLayer.hpp 297 src/armnn/layers/RankLayer.cpp 298 src/armnn/layers/ReduceLayer.hpp 299 src/armnn/layers/ReduceLayer.cpp 300 src/armnn/layers/ReshapeLayer.hpp 301 src/armnn/layers/ReshapeLayer.cpp 302 src/armnn/layers/ResizeLayer.hpp 303 src/armnn/layers/ResizeLayer.cpp 304 src/armnn/layers/ShapeLayer.cpp 305 src/armnn/layers/ShapeLayer.hpp 306 src/armnn/layers/SliceLayer.cpp 307 src/armnn/layers/SliceLayer.hpp 308 src/armnn/layers/SoftmaxLayer.hpp 309 src/armnn/layers/SoftmaxLayer.cpp 310 src/armnn/layers/SpaceToBatchNdLayer.hpp 311 src/armnn/layers/SpaceToBatchNdLayer.cpp 312 src/armnn/layers/SpaceToDepthLayer.hpp 313 src/armnn/layers/SpaceToDepthLayer.cpp 314 src/armnn/layers/SplitterLayer.hpp 315 src/armnn/layers/SplitterLayer.cpp 316 src/armnn/layers/StackLayer.hpp 317 src/armnn/layers/StackLayer.cpp 318 src/armnn/layers/StandInLayer.cpp 319 src/armnn/layers/StandInLayer.hpp 320 src/armnn/layers/StridedSliceLayer.cpp 321 src/armnn/layers/StridedSliceLayer.hpp 322 src/armnn/layers/SubtractionLayer.cpp 323 src/armnn/layers/SubtractionLayer.hpp 324 src/armnn/layers/SwitchLayer.cpp 325 src/armnn/layers/SwitchLayer.hpp 326 src/armnn/layers/TransposeConvolution2dLayer.cpp 327 src/armnn/layers/TransposeConvolution2dLayer.hpp 328 src/armnn/layers/TransposeLayer.hpp 329 src/armnn/layers/TransposeLayer.cpp 330 src/armnn/layers/UnidirectionalSequenceLstmLayer.cpp 331 src/armnn/layers/UnidirectionalSequenceLstmLayer.hpp 332 src/armnn/layers/UnmapLayer.cpp 333 src/armnn/layers/UnmapLayer.hpp 334 src/armnn/ArmNNProfilingServiceInitialiser.cpp 335 src/armnn/ArmNNProfilingServiceInitialiser.hpp 336 src/armnn/AsyncExecutionCallback.cpp 337 src/armnn/AsyncExecutionCallback.hpp 338 src/armnn/BackendRegistry.cpp 339 src/armnn/BackendSettings.hpp 340 src/armnn/BackendHelper.cpp 341 src/armnn/Descriptors.cpp 342 src/armnn/DeviceSpec.hpp 343 src/armnn/DllExport.hpp 344 src/armnn/Exceptions.cpp 345 src/armnn/ExecutionData.hpp 346 src/armnn/ExecutionFrame.cpp 347 src/armnn/ExecutionFrame.hpp 348 src/armnn/Graph.cpp 349 src/armnn/Graph.hpp 350 src/armnn/IGraphObservable.hpp 351 src/armnn/ILayerSupport.cpp 352 src/armnn/Instrument.hpp 353 src/armnn/InternalTypes.cpp 354 src/armnn/InternalTypes.hpp 355 src/armnn/ISubgraphViewConverter.hpp 356 src/armnn/JsonPrinter.cpp 357 src/armnn/JsonPrinter.hpp 358 src/armnn/Layer.cpp 359 src/armnn/LayerFwd.hpp 360 src/armnn/Layer.hpp 361 src/armnn/LayersFwd.hpp 362 src/armnn/LayerSupportCommon.hpp 363 src/armnn/LoadedNetwork.cpp 364 src/armnn/LoadedNetwork.hpp 365 src/armnn/Logging.cpp 366 src/armnn/Network.cpp 367 src/armnn/Network.hpp 368 src/armnn/NetworkUtils.cpp 369 src/armnn/NetworkUtils.hpp 370 src/armnn/Observable.cpp 371 src/armnn/Observable.hpp 372 src/armnn/Optimizer.cpp 373 src/armnn/Optimizer.hpp 374 src/armnn/OutputHandler.cpp 375 src/armnn/OutputHandler.hpp 376 src/armnn/Profiling.cpp 377 src/armnn/ProfilingEvent.cpp 378 src/armnn/ProfilingDetails.hpp 379 src/armnn/ProfilingEvent.hpp 380 src/armnn/Profiling.hpp 381 src/armnn/Runtime.cpp 382 src/armnn/Runtime.hpp 383 src/armnn/RangeTracker.cpp 384 src/armnn/RangeTracker.hpp 385 src/armnn/ResolveType.hpp 386 src/armnn/SerializeLayerParameters.cpp 387 src/armnn/SerializeLayerParameters.hpp 388 src/armnn/SubgraphView.cpp 389 src/armnn/SubgraphViewSelector.cpp 390 src/armnn/SubgraphViewSelector.hpp 391 src/armnn/Tensor.cpp 392 src/armnn/Threadpool.cpp 393 src/armnn/TypesUtils.cpp 394 src/armnn/Utils.cpp 395 src/armnn/WallClockTimer.cpp 396 src/armnn/WallClockTimer.hpp 397 src/armnn/WorkingMemDescriptor.hpp 398 src/armnn/WorkingMemHandle.cpp 399 src/armnn/WorkingMemHandle.hpp 400 src/armnn/optimizations/AddBroadcastReshapeLayer.hpp 401 src/armnn/optimizations/AddDebug.hpp 402 src/armnn/optimizations/All.hpp 403 src/armnn/optimizations/ConvertConstants.hpp 404 src/armnn/optimizations/ConvertFp32NetworkToFp16.hpp 405 src/armnn/optimizations/FoldPadIntoLayer2d.hpp 406 src/armnn/optimizations/MovePermuteUp.hpp 407 src/armnn/optimizations/MoveTransposeUp.hpp 408 src/armnn/optimizations/Optimization.hpp 409 src/armnn/optimizations/OptimizeConsecutiveReshapes.hpp 410 src/armnn/optimizations/OptimizeInverseConversions.hpp 411 src/armnn/optimizations/OptimizeInversePermutes.hpp 412 src/armnn/optimizations/PermuteAndBatchToSpaceAsDepthToSpace.hpp 413 src/armnn/optimizations/PermuteAsReshape.hpp 414 src/armnn/optimizations/SquashEqualSiblings.hpp 415 third-party/cxxopts/cxxopts.hpp 416 third-party/ghc/filesystem.hpp 417 third-party/half/half.hpp 418 third-party/mapbox/optional.hpp 419 third-party/mapbox/recursive_wrapper.hpp 420 third-party/mapbox/variant.hpp 421 third-party/mapbox/variant_cast.hpp 422 third-party/mapbox/variant_io.hpp 423 third-party/mapbox/variant_visitor.hpp 424 ) 425 426# Files used for Streamline-based profiling backend 427if(PROFILING_BACKEND_STREAMLINE) 428 list(APPEND armnn_sources 429 ${GATOR_ROOT}/annotate/streamline_annotate.h 430 ${GATOR_ROOT}/annotate/streamline_annotate.c) 431endif() 432 433# the backends under src/backends extend the list of 434# object libs armnn to include in the build 435include(src/backends/backends.cmake) 436foreach(lib ${armnnLibraries}) 437 message(STATUS "Adding object library dependency to armnn: ${lib}") 438 list(APPEND armnn_sources $<TARGET_OBJECTS:${lib}>) 439endforeach() 440 441# The delegate needs to be placed after armnnLibraries has been fully populated. The armnn_delegate_jni library 442# requires a static armnn build. 443# Explanation: 444# Because backends are added as object libraries they won't be linked to armnn when building armnn statically. 445# A target that uses a static armnn library has to link to the object libraries in the variable armnnLibraries 446# manually to include all symbols from backends. 447if (BUILD_CLASSIC_DELEGATE OR BUILD_OPAQUE_DELEGATE) 448 set(ARMNN_SUB_PROJECT ON) 449 set(ARMNN_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) 450 add_subdirectory(delegate) 451endif() 452if (BUILD_CLASSIC_DELEGATE) 453 add_definitions(-DARMNN_TFLITE_DELEGATE) 454endif() 455if (BUILD_OPAQUE_DELEGATE) 456 add_definitions(-DARMNN_TFLITE_OPAQUE_DELEGATE) 457endif() 458 459if(BUILD_BARE_METAL OR EXECUTE_NETWORK_STATIC) 460 add_library_ex(armnn STATIC ${armnn_sources}) 461else() 462 if (BUILD_SHARED_LIBS) 463 add_library_ex(armnn SHARED ${armnn_sources}) 464 else() 465 add_library(armnn ${armnn_sources}) 466 endif() 467endif() 468 469target_compile_definitions(armnn PRIVATE "ARMNN_COMPILING_DLL") 470 471# Generate a map file for all build modes 472set_property(TARGET armnn APPEND_STRING PROPERTY 473 LINK_FLAGS " -Wl,-Map=libarmnnMapFile.map") 474message(STATUS "Linker will generate mapfile ") 475 476target_include_directories(armnn 477 PUBLIC 478 $<INSTALL_INTERFACE:include> 479 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> 480 PRIVATE 481 src/armnn 482 src/armnnUtils 483 src/backends 484 src/profiling 485 profiling/common/include 486 profiling/client/include 487) 488 489# Link fmt third-party library 490add_subdirectory(third-party/fmt) 491target_link_libraries(armnn PUBLIC fmt) 492 493target_link_libraries(armnn PUBLIC armnnUtils) 494target_link_libraries(armnn PUBLIC pipeCommon) 495target_link_libraries(armnn PUBLIC pipeClient) 496 497if(NOT BUILD_BARE_METAL AND NOT EXECUTE_NETWORK_STATIC) 498 target_link_libraries(armnn PUBLIC ${CMAKE_DL_LIBS}) 499endif() 500 501if ("${CMAKE_SYSTEM_NAME}" STREQUAL Windows) 502 target_link_libraries(armnn PUBLIC Ws2_32.lib) 503endif() 504 505 506if(BUILD_ONNX_PARSER) 507 install(TARGETS armnnOnnxParser 508 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 509 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 510 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 511endif() 512 513install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) 514 515if(ARMCOMPUTENEON OR ARMCOMPUTECL) 516 target_link_libraries(armnn PUBLIC ${ARMCOMPUTE_LIBRARIES}) 517endif() 518 519# Flatbuffers is not included in armnn if the armnnSerializer is not present 520# Required to target link both flatbuffers and tosa_serialization_lib to armnn 521if(ARMNNTOSACOMMON) 522 if (FLATBUFFERS_LIBRARY) 523 target_link_libraries(armnn PUBLIC ${FLATBUFFERS_LIBRARY}) 524 else() 525 # Use PATH_SUFFIXES to help find separate libs for debug/release on Windows builds 526 find_library(FLATBUFFERS_LIBRARY_DEBUG NAMES flatbuffers 527 HINTS ${FLATBUFFERS_BUILD_DIR} 528 PATH_SUFFIXES "Debug") 529 find_library(FLATBUFFERS_LIBRARY_RELEASE NAMES flatbuffers 530 HINTS ${FLATBUFFERS_BUILD_DIR} 531 PATH_SUFFIXES "Release") 532 target_link_libraries(armnn PUBLIC 533 debug ${FLATBUFFERS_LIBRARY_DEBUG} 534 optimized ${FLATBUFFERS_LIBRARY_RELEASE}) 535 endif() 536 537 if (TOSA_SERIALIZATION_LIB) 538 target_link_libraries(armnn PUBLIC -Wl,--whole-archive ${TOSA_SERIALIZATION_LIB} -Wl,--no-whole-archive) 539 else() 540 find_library(TOSA_SERIALIZATION_LIB 541 NAMES libtosa_serialization_lib.a tosa_serialization_lib 542 HINTS ${TOSA_SERIALIZATION_LIB_ROOT}/lib /usr/local/lib /usr/lib) 543 544 message(STATUS "TOSA serialization library set to ${TOSA_SERIALIZATION_LIB}") 545 546 target_link_libraries(armnn PUBLIC -Wl,--whole-archive ${TOSA_SERIALIZATION_LIB} -Wl,--no-whole-archive) 547 endif() 548endif() 549 550if (ARMNNTOSAREF) 551 if (TOSA_REFERENCE_MODEL_LIB) 552 target_link_libraries(armnn PUBLIC -Wl,--whole-archive ${TOSA_REFERENCE_MODEL_LIB} -Wl,--no-whole-archive) 553 else() 554 find_library(TOSA_REFERENCE_MODEL_LIB 555 NAMES libtosa_reference_model_lib.a tosa_reference_model_lib 556 HINTS ${TOSA_REFERENCE_MODEL_ROOT}/lib /usr/local/lib /usr/lib) 557 message(STATUS "TOSA Reference Model set to ${TOSA_REFERENCE_MODEL_LIB}") 558 559 target_link_libraries(armnn PUBLIC -Wl,--whole-archive ${TOSA_REFERENCE_MODEL_LIB} -Wl,--no-whole-archive) 560 endif() 561endif() 562 563if(PROFILING_BACKEND_STREAMLINE AND (NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL Android))) 564 target_link_libraries(armnn PUBLIC ${CMAKE_THREAD_LIBS_INIT}) 565endif() 566 567set_target_properties(armnn PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION}) 568 569if(BUILD_UNIT_TESTS) 570 set(unittest_sources) 571 list(APPEND unittest_sources 572 src/armnn/test/CloneTests.cpp 573 src/armnn/test/ConstTensorLayerVisitor.hpp 574 src/armnn/test/ConstTensorLayerVisitor.cpp 575 src/armnn/test/EndToEndTest.cpp 576 src/armnn/test/ExecutionFrameTest.cpp 577 src/armnn/test/FloatingPointConverterTest.cpp 578 src/armnn/test/FlowControl.cpp 579 src/armnn/test/GraphTests.cpp 580 src/armnn/test/InstrumentTests.cpp 581 src/armnn/test/InferOutputTests.cpp 582 src/armnn/test/InferOutputTests.hpp 583 src/armnn/test/ModelAccuracyCheckerTest.cpp 584 src/armnn/test/NetworkTests.cpp 585 src/armnn/test/ObservableTest.cpp 586 src/armnn/test/OptimizerTests.cpp 587 src/armnn/test/optimizations/AddBroadcastReshapeLayerTests.cpp 588 src/armnn/test/optimizations/ConvertConstDequantisationLayersToConstLayersTest.cpp 589 src/armnn/test/optimizations/ConvertConstPermuteLayersToConstLayersTest.cpp 590 src/armnn/test/optimizations/ConvertConstantsFloatToHalfTests.cpp 591 src/armnn/test/optimizations/ConvertConstantsHalfToFloatTests.cpp 592 src/armnn/test/optimizations/FoldPadIntoQuantizedAveragePooling2DTests.cpp 593 src/armnn/test/optimizations/FoldPadTests.cpp 594 src/armnn/test/optimizations/Fp32NetworkToFp16ConverterTests.cpp 595 src/armnn/test/optimizations/FuseActivationTests.cpp 596 src/armnn/test/optimizations/InsertDebugLayerTests.cpp 597 src/armnn/test/optimizations/MovePermuteUpTests.cpp 598 src/armnn/test/optimizations/MoveTransposeUpTests.cpp 599 src/armnn/test/optimizations/OptimizeConsecutiveReshapesTests.cpp 600 src/armnn/test/optimizations/OptimizeInverseConversionsTests.cpp 601 src/armnn/test/optimizations/OptimizeInversePermutesTests.cpp 602 src/armnn/test/optimizations/PermuteAndBatchToSpaceAsDepthToSpaceTests.cpp 603 src/armnn/test/optimizations/PermuteAsReshapeTests.cpp 604 src/armnn/test/optimizations/ReduceMultipleAxesTests.cpp 605 src/armnn/test/optimizations/SquashEqualSiblingsTests.cpp 606 src/armnn/test/optimizations/TransposeAsReshapeTests.cpp 607 src/armnn/test/OptionalTest.cpp 608 src/armnn/test/ProfilerTests.cpp 609 src/armnn/test/ProfilingEventTest.cpp 610 src/armnn/test/ShapeInferenceTests.cpp 611 src/armnn/test/SubgraphViewTests.cpp 612 src/armnn/test/TensorHandleStrategyTest.cpp 613 src/armnn/test/TensorTest.cpp 614 src/armnn/test/TestInputOutputLayerVisitor.cpp 615 src/armnn/test/TestInputOutputLayerVisitor.hpp 616 src/armnn/test/TestLayerVisitor.cpp 617 src/armnn/test/TestLayerVisitor.hpp 618 src/armnn/test/TestNameOnlyLayerVisitor.cpp 619 src/armnn/test/TestNameOnlyLayerVisitor.hpp 620 src/armnn/test/TestNameAndDescriptorLayerVisitor.hpp 621 src/armnn/test/TestNameAndDescriptorLayerVisitor.cpp 622 src/armnn/test/UtilityTests.cpp 623 src/armnn/test/UtilsTests.cpp 624 src/armnnUtils/test/FloatingPointComparisonTest.cpp 625 src/armnnUtils/test/ParserHelperTest.cpp 626 src/armnnUtils/test/PrototxtConversionsTest.cpp 627 src/armnnUtils/test/QuantizeHelperTest.cpp 628 src/armnnUtils/test/TensorUtilsTest.cpp 629 src/armnnUtils/test/TransformIteratorTest.cpp 630 src/profiling/test/BufferTests.cpp 631 src/profiling/test/FileOnlyProfilingDecoratorTests.cpp 632 src/profiling/test/PrintPacketHeaderHandler.cpp 633 src/profiling/test/PrintPacketHeaderHandler.hpp 634 src/profiling/test/ProfilingConnectionDumpToFileDecoratorTests.cpp 635 src/profiling/test/ProfilingGuidTest.cpp 636 src/profiling/test/ProfilingMocks.hpp 637 src/profiling/test/ProfilingTests.cpp 638 src/profiling/test/ProfilingTests.hpp 639 src/profiling/test/ProfilingTestUtils.cpp 640 src/profiling/test/ProfilingTestUtils.hpp 641 src/profiling/test/RequestCountersPacketHandler.cpp 642 src/profiling/test/RequestCountersPacketHandler.hpp 643 src/profiling/test/SendCounterPacketTests.cpp 644 src/profiling/test/SendCounterPacketTests.hpp 645 src/profiling/test/TestTimelinePacketHandler.cpp 646 src/profiling/test/TestTimelinePacketHandler.hpp 647 src/profiling/test/TimelineModel.cpp 648 src/profiling/test/TimelineModel.hpp 649 src/profiling/test/SendTimelinePacketTests.cpp 650 src/profiling/test/TimelinePacketTests.cpp 651 src/profiling/test/TimelineUtilityMethodsTests.cpp 652 third-party/doctest/doctest.h 653 ) 654 655 if(ARMNNREF) 656 list(APPEND unittest_sources 657 src/armnn/test/optimizations/FuseBatchNormTests.cpp 658 src/armnn/test/DebugCallbackTest.cpp 659 src/armnn/test/RuntimeTests.cpp 660 src/armnn/test/RuntimeTests.hpp 661 ) 662 endif() 663 664 if(BUILD_TF_LITE_PARSER AND ARMNNREF) 665 list(APPEND unittest_sources 666 src/armnnTfLiteParser/test/Activations.cpp 667 src/armnnTfLiteParser/test/Addition.cpp 668 src/armnnTfLiteParser/test/ArgMinMax.cpp 669 src/armnnTfLiteParser/test/AvgPool2D.cpp 670 src/armnnTfLiteParser/test/BatchMatMul.cpp 671 src/armnnTfLiteParser/test/BatchToSpaceND.cpp 672 src/armnnTfLiteParser/test/Cast.cpp 673 src/armnnTfLiteParser/test/Comparison.cpp 674 src/armnnTfLiteParser/test/Concatenation.cpp 675 src/armnnTfLiteParser/test/Constant.cpp 676 src/armnnTfLiteParser/test/Conv2D.cpp 677 src/armnnTfLiteParser/test/Conv3D.cpp 678 src/armnnTfLiteParser/test/DepthwiseConvolution2D.cpp 679 src/armnnTfLiteParser/test/DepthToSpace.cpp 680 src/armnnTfLiteParser/test/Dequantize.cpp 681 src/armnnTfLiteParser/test/DetectionPostProcess.cpp 682 src/armnnTfLiteParser/test/Div.cpp 683 src/armnnTfLiteParser/test/ElementWiseUnary.cpp 684 src/armnnTfLiteParser/test/ExpandDims.cpp 685 src/armnnTfLiteParser/test/FloorDiv.cpp 686 src/armnnTfLiteParser/test/FullyConnected.cpp 687 src/armnnTfLiteParser/test/Gather.cpp 688 src/armnnTfLiteParser/test/GatherNd.cpp 689 src/armnnTfLiteParser/test/L2Normalization.cpp 690 src/armnnTfLiteParser/test/LeakyRelu.cpp 691 src/armnnTfLiteParser/test/LoadScopeDynamicTensor.cpp 692 src/armnnTfLiteParser/test/LocalResponseNormalization.cpp 693 src/armnnTfLiteParser/test/Maximum.cpp 694 src/armnnTfLiteParser/test/MaxPool2D.cpp 695 src/armnnTfLiteParser/test/Mean.cpp 696 src/armnnTfLiteParser/test/Minimum.cpp 697 src/armnnTfLiteParser/test/MirrorPad.cpp 698 src/armnnTfLiteParser/test/Multiplication.cpp 699 src/armnnTfLiteParser/test/Pack.cpp 700 src/armnnTfLiteParser/test/Pad.cpp 701 src/armnnTfLiteParser/test/PadV2.cpp 702 src/armnnTfLiteParser/test/Prelu.cpp 703 src/armnnTfLiteParser/test/Reduce.cpp 704 src/armnnTfLiteParser/test/Reshape.cpp 705 src/armnnTfLiteParser/test/ReshapeDynamic.cpp 706 src/armnnTfLiteParser/test/ResizeBilinear.cpp 707 src/armnnTfLiteParser/test/ResizeNearestNeighbor.cpp 708 src/armnnTfLiteParser/test/Quantize.cpp 709 src/armnnTfLiteParser/test/Softmax.cpp 710 src/armnnTfLiteParser/test/SpaceToBatchND.cpp 711 src/armnnTfLiteParser/test/Shape.cpp 712 src/armnnTfLiteParser/test/Slice.cpp 713 src/armnnTfLiteParser/test/Split.cpp 714 src/armnnTfLiteParser/test/SplitV.cpp 715 src/armnnTfLiteParser/test/Squeeze.cpp 716 src/armnnTfLiteParser/test/StridedSlice.cpp 717 src/armnnTfLiteParser/test/Sub.cpp 718 src/armnnTfLiteParser/test/Sum.cpp 719 src/armnnTfLiteParser/test/TransposeConv.cpp 720 src/armnnTfLiteParser/test/Transpose.cpp 721 src/armnnTfLiteParser/test/Unpack.cpp 722 src/armnnTfLiteParser/test/Unsupported.cpp 723 src/armnnTfLiteParser/test/LoadModel.cpp 724 src/armnnTfLiteParser/test/GetBuffer.cpp 725 src/armnnTfLiteParser/test/OutputShapeOfSqueeze.cpp 726 src/armnnTfLiteParser/test/InputOutputTensorNames.cpp 727 src/armnnTfLiteParser/test/GetTensorIds.cpp 728 src/armnnTfLiteParser/test/GetSubgraphInputsOutputs.cpp 729 src/armnnTfLiteParser/test/GetInputsOutputs.cpp 730 src/armnnTfLiteParser/test/TfLiteParser.cpp 731 ) 732 733 # Generate SchemaText.cpp file which contains the TfLite schema text as a 734 # static C-array of bytes. This is needed at runtime for TfLite parser tests. 735 add_custom_command( 736 OUTPUT SchemaText.cpp 737 COMMAND cp ${TF_LITE_SCHEMA_INCLUDE_PATH}/schema.fbs g_TfLiteSchemaText 738 COMMAND xxd -i g_TfLiteSchemaText SchemaText.cpp 739 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 740 DEPENDS ${TF_LITE_SCHEMA_INCLUDE_PATH}/schema.fbs 741 ) 742 list(APPEND unittest_sources ${CMAKE_CURRENT_BINARY_DIR}/SchemaText.cpp) 743 endif() 744 745 if(BUILD_ONNX_PARSER AND ARMNNREF) 746 list(APPEND unittest_sources 747 src/armnnOnnxParser/test/Addition.cpp 748 src/armnnOnnxParser/test/BatchNorm.cpp 749 src/armnnOnnxParser/test/Clip.cpp 750 src/armnnOnnxParser/test/Concat.cpp 751 src/armnnOnnxParser/test/Const.cpp 752 src/armnnOnnxParser/test/Constructor.cpp 753 src/armnnOnnxParser/test/Conv2D.cpp 754 src/armnnOnnxParser/test/CreateNetwork.cpp 755 src/armnnOnnxParser/test/DepthConv.cpp 756 src/armnnOnnxParser/test/Flatten.cpp 757 src/armnnOnnxParser/test/FullyConnected.cpp 758 src/armnnOnnxParser/test/Gather.cpp 759 src/armnnOnnxParser/test/Gemm.cpp 760 src/armnnOnnxParser/test/GetInputsOutputs.cpp 761 src/armnnOnnxParser/test/LoadScopeDynamicTensor.cpp 762 src/armnnOnnxParser/test/OnnxParserTestUtils.cpp 763 src/armnnOnnxParser/test/OnnxParserTestUtils.hpp 764 src/armnnOnnxParser/test/Pooling.cpp 765 src/armnnOnnxParser/test/ProtoxtFixture.cpp 766 src/armnnOnnxParser/test/Relu.cpp 767 src/armnnOnnxParser/test/Reshape.cpp 768 src/armnnOnnxParser/test/Shape.cpp 769 src/armnnOnnxParser/test/Unsqueeze.cpp 770 ) 771 endif() 772 773 if(BUILD_ARMNN_SERIALIZER AND ARMNNREF) 774 enable_language(ASM) 775 list(APPEND unittest_sources 776 src/armnnSerializer/test/ActivationSerializationTests.cpp 777 src/armnnSerializer/test/ComparisonSerializationTests.cpp 778 src/armnnSerializer/test/LstmSerializationTests.cpp 779 src/armnnSerializer/test/SerializerTests.cpp 780 src/armnnSerializer/test/SerializerTestUtils.cpp 781 src/armnnSerializer/test/SerializerTestUtils.hpp 782 src/armnnDeserializer/test/DeserializeAbs.cpp 783 src/armnnDeserializer/test/DeserializeActivation.cpp 784 src/armnnDeserializer/test/DeserializeAdd.cpp 785 src/armnnDeserializer/test/DeserializeArgMinMax.cpp 786 src/armnnDeserializer/test/DeserializeBatchMatMul.cpp 787 src/armnnDeserializer/test/DeserializeBatchToSpaceNd.cpp 788 src/armnnDeserializer/test/DeserializeBatchNormalization.cpp 789 src/armnnDeserializer/test/DeserializeCast.cpp 790 src/armnnDeserializer/test/DeserializeChannelShuffle.cpp 791 src/armnnDeserializer/test/DeserializeComparison.cpp 792 src/armnnDeserializer/test/DeserializeConstant.cpp 793 src/armnnDeserializer/test/DeserializeConvolution2d.cpp 794 src/armnnDeserializer/test/DeserializeConvolution3d.cpp 795 src/armnnDeserializer/test/DeserializeDepthToSpace.cpp 796 src/armnnDeserializer/test/DeserializeDepthwiseConv2d.cpp 797 src/armnnDeserializer/test/DeserializeDivision.cpp 798 src/armnnDeserializer/test/DeserializeFill.cpp 799 src/armnnDeserializer/test/DeserializeFloor.cpp 800 src/armnnDeserializer/test/DeserializeFullyConnected.cpp 801 src/armnnDeserializer/test/DeserializeGather.cpp 802 src/armnnDeserializer/test/DeserializeGatherNd.cpp 803 src/armnnDeserializer/test/DeserializeInstanceNormalization.cpp 804 src/armnnDeserializer/test/DeserializeL2Normalization.cpp 805 src/armnnDeserializer/test/DeserializeLogSoftmax.cpp 806 src/armnnDeserializer/test/DeserializeMean.cpp 807 src/armnnDeserializer/test/DeserializeMultiplication.cpp 808 src/armnnDeserializer/test/DeserializeNormalization.cpp 809 src/armnnDeserializer/test/DeserializePad.cpp 810 src/armnnDeserializer/test/DeserializePermute.cpp 811 src/armnnDeserializer/test/DeserializePooling2d.cpp 812 src/armnnDeserializer/test/DeserializePooling3d.cpp 813 src/armnnDeserializer/test/DeserializeRank.cpp 814 src/armnnDeserializer/test/DeserializeReduceSum.cpp 815 src/armnnDeserializer/test/DeserializeReshape.cpp 816 src/armnnDeserializer/test/DeserializeResizeBilinear.cpp 817 src/armnnDeserializer/test/DeserializeRsqrt.cpp 818 src/armnnDeserializer/test/DeserializeShape.cpp 819 src/armnnDeserializer/test/DeserializeSlice.cpp 820 src/armnnDeserializer/test/DeserializeSpaceToBatchNd.cpp 821 src/armnnDeserializer/test/DeserializeStridedSlice.cpp 822 src/armnnDeserializer/test/DeserializeSubtraction.cpp 823 src/armnnDeserializer/test/ParserFlatbuffersSerializeFixture.hpp 824 src/armnnDeserializer/test/SchemaSerialize.s 825 ) 826 set_source_files_properties(src/armnnDeserializer/test/SchemaSerialize.s PROPERTIES COMPILE_FLAGS "-x assembler-with-cpp") 827 endif() 828 829 if(BUILD_GATORD_MOCK) 830 list(APPEND unittest_sources 831 tests/profiling/gatordmock/tests/GatordMockTests.cpp 832 ) 833 endif() 834 835 if(BUILD_TIMELINE_DECODER) 836 list(APPEND unittest_sources 837 src/timelineDecoder/tests/JSONTimelineDecoderTests.cpp 838 profiling/server/src/timelineDecoder/tests/TimelineTests.cpp 839 ) 840 endif() 841 842 if(BUILD_BASE_PIPE_SERVER) 843 list(APPEND unittest_sources 844 profiling/server/src/basePipeServer/tests/BasePipeServerTests.cpp 845 ) 846 endif() 847 848 if(BUILD_TESTS) 849 list(APPEND unittest_sources 850 ./tests/NetworkExecutionUtils/NetworkExecutionUtils.cpp 851 ./tests/NetworkExecutionUtils/test/NetworkExecutionUtilsTests.cpp) 852 endif() 853 854 foreach(lib ${armnnUnitTestLibraries}) 855 message(STATUS "Adding object library dependency to UnitTests: ${lib}") 856 list(APPEND unittest_sources $<TARGET_OBJECTS:${lib}>) 857 endforeach() 858 859 add_executable(UnitTests ${unittest_sources}) 860 target_include_directories(UnitTests PRIVATE src/armnn) 861 target_include_directories(UnitTests PRIVATE src/armnnUtils) 862 target_include_directories(UnitTests PRIVATE src/armnnTestUtils) 863 target_include_directories(UnitTests PRIVATE src/backends) 864 target_include_directories(UnitTests PRIVATE src/profiling) 865 866 if(VALGRIND_FOUND) 867 if(HEAP_PROFILING OR LEAK_CHECKING) 868 message(STATUS "Valgrind is disabled for heap profiling and leak checking builds.") 869 else() 870 # Valgrind works with gperftools version number <= 2.4 871 target_compile_definitions(UnitTests PRIVATE "WITH_VALGRIND=1") 872 endif() 873 endif() 874 875 target_link_libraries(UnitTests ${CMAKE_THREAD_LIBS_INIT}) 876 877 target_link_libraries(UnitTests armnn) 878 target_link_libraries(UnitTests armnnTestUtils) 879 880 if(BUILD_GATORD_MOCK) 881 target_link_libraries(UnitTests gatordMockService) 882 endif() 883 884 if(BUILD_TIMELINE_DECODER) 885 target_link_libraries(UnitTests timelineDecoder) 886 target_link_libraries(UnitTests timelineDecoderJson) 887 endif() 888 889 if(BUILD_TF_LITE_PARSER) 890 target_include_directories(UnitTests SYSTEM PRIVATE "${TF_LITE_SCHEMA_INCLUDE_PATH}") 891 target_include_directories(UnitTests SYSTEM PRIVATE "${FLATBUFFERS_INCLUDE_PATH}") 892 target_link_libraries(UnitTests armnnTfLiteParser) 893 endif() 894 895 if(BUILD_ARMNN_SERIALIZER AND ARMNNREF) 896 target_include_directories(UnitTests SYSTEM PRIVATE generated) 897 target_include_directories(UnitTests SYSTEM PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src/armnnSerializer) 898 target_include_directories(UnitTests SYSTEM PRIVATE "${FLATBUFFERS_INCLUDE_PATH}") 899 target_link_libraries(UnitTests armnnSerializer) 900 endif() 901 902 if(BUILD_ONNX_PARSER) 903 target_link_libraries(UnitTests armnnOnnxParser) 904 endif() 905 906 if(BUILD_BASE_PIPE_SERVER) 907 target_link_libraries(UnitTests armnnBasePipeServer) 908 endif() 909 910 addDllCopyCommands(UnitTests) 911endif() 912 913if (BUILD_ARMNN_SERIALIZER AND (BUILD_TF_LITE_PARSER OR BUILD_ONNX_PARSER) AND ARMNNREF) 914 set(ArmnnConverter_sources 915 src/armnnConverter/ArmnnConverter.cpp) 916 917 add_executable_ex(ArmnnConverter ${ArmnnConverter_sources}) 918 target_include_directories(ArmnnConverter PRIVATE src/armnn) 919 target_include_directories(ArmnnConverter PRIVATE src/armnnUtils) 920 921 if(BUILD_ONNX_PARSER) 922 target_link_libraries(ArmnnConverter armnnOnnxParser) 923 endif() 924 925 if(BUILD_TF_LITE_PARSER) 926 target_link_libraries(ArmnnConverter armnnTfLiteParser) 927 endif() 928 929 target_link_libraries(ArmnnConverter armnnSerializer) 930 931 target_link_libraries(ArmnnConverter armnn) 932 target_link_libraries(ArmnnConverter ${CMAKE_THREAD_LIBS_INIT}) 933 addDllCopyCommands(ArmnnConverter) 934 935 install(TARGETS ArmnnConverter 936 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 937endif() 938 939if(BUILD_BASE_PIPE_SERVER) 940 add_subdirectory(profiling/server/src/basePipeServer) 941endif() 942 943if(BUILD_TIMELINE_DECODER) 944 add_subdirectory(profiling/server/src/timelineDecoder) 945 add_subdirectory(src/timelineDecoder) 946endif() 947 948if(BUILD_GATORD_MOCK AND NOT BUILD_BASE_PIPE_SERVER) 949 message(ERROR, "In order to build GatordMock you must set BUILD_BASE_PIPE_SERVER = YES") 950endif() 951 952if(BUILD_GATORD_MOCK AND NOT BUILD_TIMELINE_DECODER) 953 message(ERROR, "In order to build GatordMock you must set BUILD_TIMELINE_DECODER = YES") 954endif() 955 956if(BUILD_GATORD_MOCK) 957 set(gatord_mock_sources) 958 list(APPEND gatord_mock_sources 959 tests/profiling/gatordmock/CommandFileParser.hpp 960 tests/profiling/gatordmock/CommandFileParser.cpp 961 tests/profiling/gatordmock/CommandLineProcessor.hpp 962 tests/profiling/gatordmock/CommandLineProcessor.cpp 963 tests/profiling/gatordmock/GatordMockService.hpp 964 tests/profiling/gatordmock/GatordMockService.cpp 965 tests/profiling/gatordmock/PeriodicCounterCaptureCommandHandler.cpp 966 tests/profiling/gatordmock/PeriodicCounterCaptureCommandHandler.hpp 967 tests/profiling/gatordmock/PeriodicCounterSelectionResponseHandler.cpp 968 tests/profiling/gatordmock/PeriodicCounterSelectionResponseHandler.hpp 969 tests/profiling/gatordmock/StreamMetadataCommandHandler.cpp 970 tests/profiling/gatordmock/StreamMetadataCommandHandler.hpp 971 tests/profiling/gatordmock/StubCommandHandler.hpp 972 ) 973 974 add_library_ex(gatordMockService STATIC ${gatord_mock_sources}) 975 976 target_include_directories(gatordMockService PRIVATE profiling/common/include 977 profiling/client/include 978 profiling/server/src/basePipeServer 979 src/armnnUtils 980 src/profiling 981 src/timelineDecoder) 982 983 if(BUILD_UNIT_TESTS) 984 target_include_directories(UnitTests PRIVATE tests/profiling/gatordmock) 985 target_include_directories(UnitTests PRIVATE src/backends/backendsCommon/test) 986 endif() 987 988 add_executable_ex(GatordMock tests/profiling/gatordmock/GatordMockMain.cpp) 989 990 target_include_directories(GatordMock PRIVATE profiling/common/include 991 profiling/client/include 992 profiling/server/src/basePipeServer 993 src/armnnUtils 994 src/profiling 995 src/timelineDecoder) 996 997 target_link_libraries(GatordMock PUBLIC 998 armnn 999 armnnBasePipeServer 1000 timelineDecoder 1001 gatordMockService) 1002 1003 if(Threads_FOUND AND (NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL Android))) 1004 target_link_libraries(GatordMock PUBLIC ${CMAKE_THREAD_LIBS_INIT}) 1005 endif() 1006 1007endif() 1008 1009#################################################### 1010# export targets 1011set(armnn_export_targets) 1012list(APPEND armnn_export_targets 1013 armnn 1014 armnnUtils 1015) 1016 1017install( 1018 TARGETS ${armnn_export_targets} 1019 EXPORT armnn-targets 1020 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 1021 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 1022) 1023 1024#################################################### 1025## Set export alias 1026set_target_properties(armnn 1027 PROPERTIES 1028 EXPORT_NAME Armnn 1029) 1030 1031## Export target scrips 1032install( 1033 EXPORT armnn-targets 1034 FILE ArmnnTargets.cmake 1035 NAMESPACE Armnn:: 1036 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} 1037) 1038 1039#################################################### 1040## Create ArmnnConfig.cmake 1041include(CMakePackageConfigHelpers) 1042set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}) 1043 1044message(STATUS "CMAKE_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_DIR}" ) 1045message(STATUS "CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}" ) 1046configure_package_config_file( 1047 ${CMAKE_CURRENT_LIST_DIR}/cmake/ArmnnConfig.cmake.in 1048 ${CMAKE_CURRENT_BINARY_DIR}/ArmnnConfig.cmake 1049 INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} 1050) 1051 1052#################################################### 1053## Install Armnn config file 1054install( 1055 FILES 1056 ${CMAKE_CURRENT_BINARY_DIR}/ArmnnConfig.cmake 1057 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} 1058) 1059 1060#################################################### 1061## Export from build tree 1062export( 1063 EXPORT armnn-targets 1064 FILE ${CMAKE_CURRENT_BINARY_DIR}/ArmnnTargets.cmake 1065 NAMESPACE Armnn:: 1066) 1067 1068add_library(Armnn::Armnn ALIAS armnn) 1069add_library(Armnn::armnnUtils ALIAS armnnUtils) 1070 1071#################################################### 1072## Build Python bindings 1073if (BUILD_PYTHON_WHL OR BUILD_PYTHON_SRC) 1074 add_subdirectory(python/pyarmnn) 1075endif() 1076