diff options
author | Renato Grottesi <otaner@google.com> | 2023-07-11 17:29:15 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-07-11 17:29:15 +0000 |
commit | f07f03ab17b4a493ce9dfd5105460e625202dbbc (patch) | |
tree | ab56c6cf4cf97af680d620c18c89f03643f71a0b | |
parent | e853a8f9cfbf3d3dbd7aeaee4d3d2856b77fa4f7 (diff) | |
parent | c96df6103b5127adedff1ecad2301d98dc3970ee (diff) | |
download | armnn-f07f03ab17b4a493ce9dfd5105460e625202dbbc.tar.gz |
Revert "Compile ArmNN shim over the support library" am: bcd58b1c35 am: 9eb729581c am: fe3266f25b am: 05fdf4fe9a am: c96df6103b
Original change: https://android-review.googlesource.com/c/platform/external/armnn/+/2653622
Change-Id: I68e34296e31d98c53acf726cc9d8cf24a2567257
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | Android.bp | 373 | ||||
-rw-r--r-- | Android.mk | 566 | ||||
-rw-r--r-- | shim/Android.bp | 186 | ||||
-rw-r--r-- | shim/Android.bp.off | 97 | ||||
-rw-r--r-- | shim/config/android.hardware.neuralnetworks-shim-service-armnn.rc | 3 | ||||
-rw-r--r-- | shim/config/android.hardware.neuralnetworks-shim-service-armnn.xml | 2 | ||||
-rw-r--r-- | shim/shimservice.cpp | 2 | ||||
-rwxr-xr-x | shim/sl/build/android_arm/libarmnn_support_library_prebuilt.so | bin | 25176608 -> 0 bytes | |||
-rwxr-xr-x | shim/sl/build/android_arm64/libarmnn_support_library_prebuilt.so | bin | 31964448 -> 0 bytes | |||
-rw-r--r-- | shim/sl/canonical/ArmnnDevice.cpp | 2 | ||||
-rw-r--r-- | shim/sl/canonical/ArmnnDriverImpl.cpp | 7 | ||||
-rw-r--r-- | shim/sl/canonical/ArmnnPreparedModel.cpp | 3 | ||||
-rw-r--r-- | shim/sl/canonical/ConversionUtils.hpp | 8 | ||||
-rw-r--r-- | shim/sl/canonical/DriverOptions.cpp | 11 | ||||
-rwxr-xr-x | shim/sl/generate_prebuilts.sh | 35 |
15 files changed, 682 insertions, 613 deletions
diff --git a/Android.bp b/Android.bp index 5638cc433..8414eb516 100644 --- a/Android.bp +++ b/Android.bp @@ -1,375 +1,8 @@ // -// Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved. +// Copyright © 2017 ARM Ltd. All rights reserved. // SPDX-License-Identifier: MIT // -//////////////////////////////////////////// -// // -// libarmnn.a // -// // -//////////////////////////////////////////// +// Dummy Android.bp file to keep backward compatibility with previous +// build systems/environments. -COMMON_SOURCES = [ - "src/backends/backendsCommon/TensorHandle.cpp", - "src/backends/backendsCommon/DynamicBackend.cpp", - "src/backends/backendsCommon/DynamicBackendUtils.cpp", - "src/backends/backendsCommon/IBackendInternal.cpp", - "src/backends/backendsCommon/ITensorHandleFactory.cpp", - "src/backends/backendsCommon/LayerSupportBase.cpp", - "src/backends/backendsCommon/MapWorkload.cpp", - "src/backends/backendsCommon/MemCopyWorkload.cpp", - "src/backends/backendsCommon/MemImportWorkload.cpp", - "src/backends/backendsCommon/MemoryManager.cpp", - "src/backends/backendsCommon/MemSyncWorkload.cpp", - "src/backends/backendsCommon/OptimizationViews.cpp", - "src/backends/backendsCommon/TensorHandleFactoryRegistry.cpp", - "src/backends/backendsCommon/UnmapWorkload.cpp", - "src/backends/backendsCommon/WorkloadData.cpp", - "src/backends/backendsCommon/WorkloadFactory.cpp", - "src/backends/backendsCommon/WorkloadUtils.cpp", - "src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/ConstantMemoryStrategy.cpp", - "src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/SingleAxisPriorityList.cpp", - "src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/StrategyValidator.cpp", - "src/backends/aclCommon/ArmComputeTensorUtils.cpp", - "src/backends/aclCommon/BaseMemoryManager.cpp", -] - -ARMNN_SOURCES = [ - "profiling/common/src/CommandHandlerFunctor.cpp", - "profiling/common/src/CommandHandlerKey.cpp", - "profiling/common/src/CommandHandlerRegistry.cpp", - "profiling/common/src/CommonProfilingUtils.cpp", - "profiling/common/src/CounterDirectory.cpp", - "profiling/common/src/LabelsAndEventClasses.cpp", - "profiling/common/src/Logging.cpp", - "profiling/common/src/NetworkSockets.cpp", - "profiling/common/src/PacketVersionResolver.cpp", - "profiling/common/src/Processes.cpp", - "profiling/common/src/SwTrace.cpp", - "profiling/common/src/Threads.cpp", - "profiling/client/src/ActivateTimelineReportingCommandHandler.cpp", - "profiling/client/src/BufferManager.cpp", - "profiling/client/src/CommandHandler.cpp", - "profiling/client/src/ConnectionAcknowledgedCommandHandler.cpp", - "profiling/client/src/CounterIdMap.cpp", - "profiling/client/src/DeactivateTimelineReportingCommandHandler.cpp", - "profiling/client/src/FileOnlyProfilingConnection.cpp", - "profiling/client/src/Holder.cpp", - "profiling/client/src/IProfilingService.cpp", - "profiling/client/src/PacketBuffer.cpp", - "profiling/client/src/PeriodicCounterCapture.cpp", - "profiling/client/src/PeriodicCounterSelectionCommandHandler.cpp", - "profiling/client/src/PerJobCounterSelectionCommandHandler.cpp", - "profiling/client/src/ProfilingConnectionDumpToFileDecorator.cpp", - "profiling/client/src/ProfilingConnectionFactory.cpp", - "profiling/client/src/ProfilingService.cpp", - "profiling/client/src/ProfilingStateMachine.cpp", - "profiling/client/src/ProfilingUtils.cpp", - "profiling/client/src/RegisterBackendCounters.cpp", - "profiling/client/src/RequestCounterDirectoryCommandHandler.cpp", - "profiling/client/src/SendCounterPacket.cpp", - "profiling/client/src/SendThread.cpp", - "profiling/client/src/SendTimelinePacket.cpp", - "profiling/client/src/SocketProfilingConnection.cpp", - "profiling/client/src/TimelinePacketWriterFactory.cpp", - "profiling/client/src/TimelineUtilityMethods.cpp", - "profiling/client/src/backends/BackendProfiling.cpp", - "profiling/client/src/backends/IBackendProfiling.cpp", - "profiling/server/src/timelineDecoder/DirectoryCaptureCommandHandler.cpp", - "profiling/server/src/timelineDecoder/TimelineCaptureCommandHandler.cpp", - "profiling/server/src/timelineDecoder/TimelineDecoder.cpp", - "profiling/server/src/timelineDecoder/TimelineDirectoryCaptureCommandHandler.cpp", - "src/armnn/ArmNNProfilingServiceInitialiser.cpp", - "src/armnn/BackendHelper.cpp", - "src/armnn/BackendRegistry.cpp", - "src/armnn/Descriptors.cpp", - "src/armnn/Exceptions.cpp", - "src/armnn/Graph.cpp", - "src/armnn/ILayerSupport.cpp", - "src/armnn/InternalTypes.cpp", - "src/armnn/JsonPrinter.cpp", - "src/armnn/Layer.cpp", - "src/armnn/LoadedNetwork.cpp", - "src/armnn/Logging.cpp", - "src/armnn/Network.cpp", - "src/armnn/NetworkUtils.cpp", - "src/armnn/Observable.cpp", - "src/armnn/Optimizer.cpp", - "src/armnn/OutputHandler.cpp", - "src/armnn/ProfilingEvent.cpp", - "src/armnn/Profiling.cpp", - "src/armnn/Runtime.cpp", - "src/armnn/SerializeLayerParameters.cpp", - "src/armnn/SubgraphView.cpp", - "src/armnn/SubgraphViewSelector.cpp", - "src/armnn/Tensor.cpp", - "src/armnn/Threadpool.cpp", - "src/armnn/TypesUtils.cpp", - "src/armnn/Utils.cpp", - "src/armnn/WallClockTimer.cpp", - "src/armnn/WorkingMemHandle.cpp", - "src/armnnUtils/CompatibleTypes.cpp", - "src/armnnUtils/DataLayoutIndexed.cpp", - "src/armnnUtils/DotSerializer.cpp", - "src/armnnUtils/FloatingPointConverter.cpp", - "src/armnnUtils/HeapProfiling.cpp", - "src/armnnUtils/LeakChecking.cpp", - "src/armnnUtils/ParserHelper.cpp", - "src/armnnUtils/Permute.cpp", - "src/armnnUtils/TensorUtils.cpp", - "src/armnnUtils/VerificationHelpers.cpp", - "src/armnnUtils/Filesystem.cpp", - "src/armnnUtils/ProfilingOptionsConverter.cpp", - "src/armnnUtils/Transpose.cpp", - "src/armnn/layers/ActivationLayer.cpp", - "src/armnn/layers/AdditionLayer.cpp", - "src/armnn/layers/ArgMinMaxLayer.cpp", - "src/armnn/layers/BatchMatMulLayer.cpp", - "src/armnn/layers/BatchNormalizationLayer.cpp", - "src/armnn/layers/BatchToSpaceNdLayer.cpp", - "src/armnn/layers/CastLayer.cpp", - "src/armnn/layers/ChannelShuffleLayer.cpp", - "src/armnn/layers/ComparisonLayer.cpp", - "src/armnn/layers/ConcatLayer.cpp", - "src/armnn/layers/ConstantLayer.cpp", - "src/armnn/layers/Convolution2dLayer.cpp", - "src/armnn/layers/Convolution3dLayer.cpp", - "src/armnn/layers/ConvertFp16ToFp32Layer.cpp", - "src/armnn/layers/ConvertFp32ToFp16Layer.cpp", - "src/armnn/layers/DebugLayer.cpp", - "src/armnn/layers/DepthToSpaceLayer.cpp", - "src/armnn/layers/DepthwiseConvolution2dLayer.cpp", - "src/armnn/layers/DequantizeLayer.cpp", - "src/armnn/layers/DetectionPostProcessLayer.cpp", - "src/armnn/layers/DivisionLayer.cpp", - "src/armnn/layers/ElementwiseBaseLayer.cpp", - "src/armnn/layers/ElementwiseBinaryLayer.cpp", - "src/armnn/layers/ElementwiseUnaryLayer.cpp", - "src/armnn/layers/FakeQuantizationLayer.cpp", - "src/armnn/layers/FillLayer.cpp", - "src/armnn/layers/FloorLayer.cpp", - "src/armnn/layers/FullyConnectedLayer.cpp", - "src/armnn/layers/GatherLayer.cpp", - "src/armnn/layers/GatherNdLayer.cpp", - "src/armnn/layers/InputLayer.cpp", - "src/armnn/layers/InstanceNormalizationLayer.cpp", - "src/armnn/layers/L2NormalizationLayer.cpp", - "src/armnn/layers/LogicalBinaryLayer.cpp", - "src/armnn/layers/LogSoftmaxLayer.cpp", - "src/armnn/layers/LstmLayer.cpp", - "src/armnn/layers/MapLayer.cpp", - "src/armnn/layers/MaximumLayer.cpp", - "src/armnn/layers/MeanLayer.cpp", - "src/armnn/layers/MemCopyLayer.cpp", - "src/armnn/layers/MemImportLayer.cpp", - "src/armnn/layers/MergeLayer.cpp", - "src/armnn/layers/MinimumLayer.cpp", - "src/armnn/layers/MultiplicationLayer.cpp", - "src/armnn/layers/NormalizationLayer.cpp", - "src/armnn/layers/OutputLayer.cpp", - "src/armnn/layers/PadLayer.cpp", - "src/armnn/layers/PermuteLayer.cpp", - "src/armnn/layers/Pooling2dLayer.cpp", - "src/armnn/layers/Pooling3dLayer.cpp", - "src/armnn/layers/PreCompiledLayer.cpp", - "src/armnn/layers/PreluLayer.cpp", - "src/armnn/layers/QLstmLayer.cpp", - "src/armnn/layers/QuantizeLayer.cpp", - "src/armnn/layers/QuantizedLstmLayer.cpp", - "src/armnn/layers/RankLayer.cpp", - "src/armnn/layers/ReduceLayer.cpp", - "src/armnn/layers/ReshapeLayer.cpp", - "src/armnn/layers/ResizeLayer.cpp", - "src/armnn/layers/ShapeLayer.cpp", - "src/armnn/layers/SliceLayer.cpp", - "src/armnn/layers/SoftmaxLayer.cpp", - "src/armnn/layers/SpaceToBatchNdLayer.cpp", - "src/armnn/layers/SpaceToDepthLayer.cpp", - "src/armnn/layers/SplitterLayer.cpp", - "src/armnn/layers/StackLayer.cpp", - "src/armnn/layers/StandInLayer.cpp", - "src/armnn/layers/StridedSliceLayer.cpp", - "src/armnn/layers/SubtractionLayer.cpp", - "src/armnn/layers/SwitchLayer.cpp", - "src/armnn/layers/TransposeConvolution2dLayer.cpp", - "src/armnn/layers/TransposeLayer.cpp", - "src/armnn/layers/UnidirectionalSequenceLstmLayer.cpp", - "src/armnn/layers/UnmapLayer.cpp", - "src/armnnSerializer/Serializer.cpp", - "src/armnnSerializer/SerializerUtils.cpp", - "src/armnnDeserializer/Deserializer.cpp", -] - -GPU_BACKEND_SOURCES = [ - "src/backends/aclCommon/ArmComputeTuningUtils.cpp", - "src/backends/cl/ClBackend.cpp", - "src/backends/cl/ClBackendContext.cpp", - "src/backends/cl/ClBackendModelContext.cpp", - "src/backends/cl/ClContextControl.cpp", - "src/backends/cl/ClContextDeserializer.cpp", - "src/backends/cl/ClContextSerializer.cpp", - "src/backends/cl/ClImportTensorHandleFactory.cpp", - "src/backends/cl/ClLayerSupport.cpp", - "src/backends/cl/ClRegistryInitializer.cpp", - "src/backends/cl/ClTensorHandleFactory.cpp", - "src/backends/cl/ClWorkloadFactory.cpp", - "src/backends/cl/OpenClTimer.cpp", - "src/backends/cl/workloads/ClAbsWorkload.cpp", - "src/backends/cl/workloads/ClActivationWorkload.cpp", - "src/backends/cl/workloads/ClAdditionWorkload.cpp", - "src/backends/cl/workloads/ClArgMinMaxWorkload.cpp", - "src/backends/cl/workloads/ClBatchMatMulWorkload.cpp", - "src/backends/cl/workloads/ClBatchNormalizationFloatWorkload.cpp", - "src/backends/cl/workloads/ClBatchToSpaceNdWorkload.cpp", - "src/backends/cl/workloads/ClCastWorkload.cpp", - "src/backends/cl/workloads/ClChannelShuffleWorkload.cpp", - "src/backends/cl/workloads/ClComparisonWorkload.cpp", - "src/backends/cl/workloads/ClConcatWorkload.cpp", - "src/backends/cl/workloads/ClConstantWorkload.cpp", - "src/backends/cl/workloads/ClConvertFp16ToFp32Workload.cpp", - "src/backends/cl/workloads/ClConvertFp32ToFp16Workload.cpp", - "src/backends/cl/workloads/ClConvolution2dWorkload.cpp", - "src/backends/cl/workloads/ClConvolution3dWorkload.cpp", - "src/backends/cl/workloads/ClDepthToSpaceWorkload.cpp", - "src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp", - "src/backends/cl/workloads/ClDequantizeWorkload.cpp", - "src/backends/cl/workloads/ClDivisionWorkload.cpp", - "src/backends/cl/workloads/ClExpWorkload.cpp", - "src/backends/cl/workloads/ClFillWorkload.cpp", - "src/backends/cl/workloads/ClFloorFloatWorkload.cpp", - "src/backends/cl/workloads/ClFullyConnectedWorkload.cpp", - "src/backends/cl/workloads/ClGatherWorkload.cpp", - "src/backends/cl/workloads/ClGatherNdWorkload.cpp", - "src/backends/cl/workloads/ClInstanceNormalizationWorkload.cpp", - "src/backends/cl/workloads/ClL2NormalizationFloatWorkload.cpp", - "src/backends/cl/workloads/ClLogWorkload.cpp", - "src/backends/cl/workloads/ClLogicalAndWorkload.cpp", - "src/backends/cl/workloads/ClLogicalNotWorkload.cpp", - "src/backends/cl/workloads/ClLogicalOrWorkload.cpp", - "src/backends/cl/workloads/ClLogSoftmaxWorkload.cpp", - "src/backends/cl/workloads/ClLstmFloatWorkload.cpp", - "src/backends/cl/workloads/ClMaximumWorkload.cpp", - "src/backends/cl/workloads/ClMeanWorkload.cpp", - "src/backends/cl/workloads/ClMinimumWorkload.cpp", - "src/backends/cl/workloads/ClMultiplicationWorkload.cpp", - "src/backends/cl/workloads/ClNegWorkload.cpp", - "src/backends/cl/workloads/ClNormalizationFloatWorkload.cpp", - "src/backends/cl/workloads/ClPadWorkload.cpp", - "src/backends/cl/workloads/ClPermuteWorkload.cpp", - "src/backends/cl/workloads/ClPooling2dWorkload.cpp", - "src/backends/cl/workloads/ClPooling3dWorkload.cpp", - "src/backends/cl/workloads/ClPreluWorkload.cpp", - "src/backends/cl/workloads/ClQLstmWorkload.cpp", - "src/backends/cl/workloads/ClQuantizedLstmWorkload.cpp", - "src/backends/cl/workloads/ClQuantizeWorkload.cpp", - "src/backends/cl/workloads/ClReduceWorkload.cpp", - "src/backends/cl/workloads/ClReshapeWorkload.cpp", - "src/backends/cl/workloads/ClResizeWorkload.cpp", - "src/backends/cl/workloads/ClRsqrtWorkload.cpp", - "src/backends/cl/workloads/ClSinWorkload.cpp", - "src/backends/cl/workloads/ClSliceWorkload.cpp", - "src/backends/cl/workloads/ClSoftmaxWorkload.cpp", - "src/backends/cl/workloads/ClSpaceToBatchNdWorkload.cpp", - "src/backends/cl/workloads/ClSpaceToDepthWorkload.cpp", - "src/backends/cl/workloads/ClSplitterWorkload.cpp", - "src/backends/cl/workloads/ClSqrtWorkload.cpp", - "src/backends/cl/workloads/ClStackWorkload.cpp", - "src/backends/cl/workloads/ClStridedSliceWorkload.cpp", - "src/backends/cl/workloads/ClSubtractionWorkload.cpp", - "src/backends/cl/workloads/ClTransposeConvolution2dWorkload.cpp", - "src/backends/cl/workloads/ClTransposeWorkload.cpp", - "src/backends/cl/workloads/ClUnidirectionalSequenceLstmFloatWorkload.cpp", -] - -ARMNN_CFLAGS = [ - "-std=c++17", - "-fexceptions", - "-Wno-unused-parameter", - "-DFMT_HEADER_ONLY", - "-Wno-ignored-qualifiers", - "-Wno-macro-redefined", - "-Wno-unreachable-code-loop-increment", - "-DARMCOMPUTECL_ENABLED", // TODO: ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1) - "-DARMNN_MIXED_PRECISION_FP16_POOLING", -] - -package { - // See: http://go/android-license-faq - default_applicable_licenses: [ - "external_armnn_license", - ], -} - -license { - name: "external_armnn_license", - visibility: [":__subpackages__"], - license_kinds: [ - "SPDX-license-identifier-BSD", - "SPDX-license-identifier-BSL-1.0", - "SPDX-license-identifier-MIT", - "SPDX-license-identifier-PSF-2.0", - "legacy_unencumbered", - ], - license_text: [ - "LICENSE", - ], -} - -// cc_library_shared { -cc_library_static { - name: "libarmnn", - rtti: true, - - enabled : false, - arch: { - arm: { - enabled : true, - }, - arm64: { - enabled : true, - }, - }, - - defaults: [ - "neuralnetworks_cl_defaults", - ], - - local_include_dirs: [ - "generated", - "profiling", - "profiling/common/include", - "profiling/client/include", - "include", - "src/timelineDecoder", - "third-party", - "src", - "src/armnn", - "src/armnnUtils", - "src/profiling", - "src/backends", - "src/armnnSerializer", - "src/armnnDeserializer", - ], - - include_dirs: [ - "external/ComputeLibrary", - ], - - static_libs: [ - "libflatbuffers-cpp", - ], - - whole_static_libs: [ - "arm_compute_library", - ], - - shared_libs: ["liblog"], - - ldflags: ["-Wl,-Map=libarmnnMapFile.map"], - - cflags: ARMNN_CFLAGS + [ - "-DARMCOMPUTECL_ENABLED", - ], - - srcs: ARMNN_SOURCES + COMMON_SOURCES + GPU_BACKEND_SOURCES, -} diff --git a/Android.mk b/Android.mk new file mode 100644 index 000000000..31a454630 --- /dev/null +++ b/Android.mk @@ -0,0 +1,566 @@ +# +# Copyright © 2017-2023 ARM Ltd and Contributors. All rights reserved. +# SPDX-License-Identifier: MIT +# + +LOCAL_PATH := $(call my-dir) + +ARMNN_ANDROID_MK_ENABLED := 1 + +ifeq ($(ARMNN_ANDROID_MK_ENABLE),0) +ARMNN_ANDROID_MK_ENABLED := 0 +endif + +ifeq ($(ARMNN_ANDROID_MK_ENABLED),1) + +# Configure these paths if you move the source or Khronos headers +ARMNN_GENERATED_HEADER_PATH := $(LOCAL_PATH)/generated +OPENCL_HEADER_PATH := $(LOCAL_PATH)/../clframework/include +ARMNN_HEADER_PATH := $(LOCAL_PATH)/include +ARMNN_PROFILING_INCLUDE_PATH := $(LOCAL_PATH)/profiling +ARMNN_PROFILING_CLIENT_INCLUDE_PATH := $(LOCAL_PATH)/profiling/client/include +ARMNN_PROFILING_COMMON_INCLUDE_PATH := $(LOCAL_PATH)/profiling/common/include +ARMNN_TIMELINE_DECODER_INCLUDE_PATH := $(LOCAL_PATH)/src/timelineDecoder +ARMNN_THIRD_PARTY_INCLUDE_PATH := $(LOCAL_PATH)/third-party +ARMNN_MAIN_HEADER_PATH := $(LOCAL_PATH)/src +ARMNN_SOURCE_HEADER_PATH := $(LOCAL_PATH)/src/armnn +ARMNN_SOURCE_UTILS_HEADER_PATH := $(LOCAL_PATH)/src/armnnUtils +ARMNN_TEST_UTILS_SOURCE_PATH := $(LOCAL_PATH)/src/armnnTestUtils +ARMNN_BACKENDS_HEADER_PATH := $(LOCAL_PATH)/src/backends +ARMNN_PROFILING_HEADER_PATH := $(LOCAL_PATH)/src/profiling +ARMNN_SERIALIZER_HEADER_PATH := $(LOCAL_PATH)/src/armnnSerializer +ARMNN_DESERIALIZER_HEADER_PATH := $(LOCAL_PATH)/src/armnnDeserializer + +# find the common.mk and backend.mk files in the backend source folders +ARMNN_BACKEND_COMMON_MAKEFILE_LOCAL_PATHS := $(wildcard $(LOCAL_PATH)/src/backends/*/common.mk) +ARMNN_BACKEND_COMMON_MAKEFILE_PATHS := $(subst $(LOCAL_PATH),,$(ARMNN_BACKEND_COMMON_MAKEFILE_LOCAL_PATHS)) +ARMNN_BACKEND_COMMON_MAKEFILE_DIRS := $(subst /common.mk,,$(ARMNN_BACKEND_COMMON_MAKEFILE_PATHS)) + +ARMNN_BACKEND_MAKEFILE_LOCAL_PATHS := $(wildcard $(LOCAL_PATH)/src/backends/*/backend.mk) +ARMNN_BACKEND_MAKEFILE_PATHS := $(subst $(LOCAL_PATH),,$(ARMNN_BACKEND_MAKEFILE_LOCAL_PATHS)) +ARMNN_BACKEND_MAKEFILE_DIRS := $(subst /backend.mk,,$(ARMNN_BACKEND_MAKEFILE_PATHS)) + +############## +# libarmnn.a # +############## +include $(CLEAR_VARS) + +LOCAL_MODULE := libarmnn +LOCAL_LICENSE_KINDS := SPDX-license-identifier-BSD SPDX-license-identifier-BSL-1.0 SPDX-license-identifier-MIT SPDX-license-identifier-PSF-2.0 legacy_unencumbered +LOCAL_LICENSE_CONDITIONS := notice unencumbered +LOCAL_NOTICE_FILE := $(LOCAL_PATH)/LICENSE +Q_OR_LATER := 1 +CPP_VERSION := c++17 +ifeq ($(Q_OR_LATER),1) +# "eng" is deprecated in Android Q +LOCAL_MODULE_TAGS := optional +else +LOCAL_MODULE_TAGS := eng optional +endif +LOCAL_ARM_MODE := arm +LOCAL_PROPRIETARY_MODULE := true + +# Placeholder to hold all backend source files and include paths, common and specific to the backends +ARMNN_BACKEND_SOURCES := +ARMNN_BACKEND_INCLUDES := + +# +# Iterate through the backend common and specific include paths, include them into the +# current makefile and append the sources held by the COMMON_SOURCES and BACKEND_SOURCES variable +# (included from the given makefile) to the ARMNN_BACKEND_SOURCES list +# and optional include paths set by BACKEND_INCLUDES to the ARMNN_BACKEND_INCLUDES list +# +$(foreach mkPath,$(ARMNN_BACKEND_COMMON_MAKEFILE_DIRS),\ + $(eval include $(LOCAL_PATH)/$(mkPath)/common.mk)\ + $(eval ARMNN_BACKEND_SOURCES := $(ARMNN_BACKEND_SOURCES)\ + $(patsubst %,$(mkPath)/%,$(COMMON_SOURCES)))) + +$(foreach mkPath,$(ARMNN_BACKEND_MAKEFILE_DIRS),\ + $(eval include $(LOCAL_PATH)/$(mkPath)/backend.mk)\ + $(eval ARMNN_BACKEND_SOURCES := $(ARMNN_BACKEND_SOURCES)\ + $(patsubst %,$(mkPath)/%,$(BACKEND_SOURCES)))) + +$(foreach mkPath,$(ARMNN_BACKEND_MAKEFILE_DIRS),\ + $(eval include $(LOCAL_PATH)/$(mkPath)/backend.mk)\ + $(eval ARMNN_BACKEND_INCLUDES += $(BACKEND_INCLUDES))) + +# Mark source files as dependent on Android.mk and backend makefiles +LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk \ + $(ARMNN_BACKEND_MAKEFILE_LOCAL_PATHS) + +LOCAL_EXPORT_C_INCLUDES := \ + $(ARMNN_PROFILING_INCLUDE_PATH) \ + $(ARMNN_PROFILING_COMMON_INCLUDE_PATH) \ + $(ARMNN_PROFILING_CLIENT_INCLUDE_PATH) \ + $(ARMNN_MAIN_HEADER_PATH) \ + $(ARMNN_SOURCE_HEADER_PATH) \ + $(ARMNN_TIMELINE_DECODER_INCLUDE_PATH) \ + $(ARMNN_THIRD_PARTY_INCLUDE_PATH) \ + $(ARMNN_SOURCE_UTILS_HEADER_PATH) \ + $(ARMNN_PROFILING_HEADER_PATH) \ + $(ARMNN_BACKENDS_HEADER_PATH) \ + $(ARMNN_SERIALIZER_HEADER_PATH) \ + $(ARMNN_DESERIALIZER_HEADER_PATH) + +LOCAL_C_INCLUDES := \ + $(OPENCL_HEADER_PATH) \ + $(NN_HEADER_PATH) \ + $(ARMNN_GENERATED_HEADER_PATH) \ + $(ARMNN_PROFILING_INCLUDE_PATH) \ + $(ARMNN_PROFILING_COMMON_INCLUDE_PATH) \ + $(ARMNN_PROFILING_CLIENT_INCLUDE_PATH) \ + $(ARMNN_HEADER_PATH) \ + $(ARMNN_TIMELINE_DECODER_INCLUDE_PATH) \ + $(ARMNN_THIRD_PARTY_INCLUDE_PATH) \ + $(ARMNN_MAIN_HEADER_PATH) \ + $(ARMNN_SOURCE_HEADER_PATH) \ + $(ARMNN_SOURCE_UTILS_HEADER_PATH) \ + $(ARMNN_PROFILING_HEADER_PATH) \ + $(ARMNN_BACKENDS_HEADER_PATH) \ + $(ARMNN_SERIALIZER_HEADER_PATH) \ + $(ARMNN_DESERIALIZER_HEADER_PATH) \ + $(ARMNN_BACKEND_INCLUDES) \ + $(LOCAL_PATH)/../ComputeLibrary + +LOCAL_SRC_FILES := \ + $(ARMNN_BACKEND_SOURCES) \ + profiling/common/src/CommandHandlerFunctor.cpp \ + profiling/common/src/CommandHandlerKey.cpp \ + profiling/common/src/CommandHandlerRegistry.cpp \ + profiling/common/src/CommonProfilingUtils.cpp \ + profiling/common/src/CounterDirectory.cpp \ + profiling/common/src/LabelsAndEventClasses.cpp \ + profiling/common/src/Logging.cpp \ + profiling/common/src/NetworkSockets.cpp \ + profiling/common/src/PacketVersionResolver.cpp \ + profiling/common/src/Processes.cpp \ + profiling/common/src/SwTrace.cpp \ + profiling/common/src/Threads.cpp \ + profiling/client/src/ActivateTimelineReportingCommandHandler.cpp \ + profiling/client/src/BufferManager.cpp \ + profiling/client/src/CommandHandler.cpp \ + profiling/client/src/ConnectionAcknowledgedCommandHandler.cpp \ + profiling/client/src/CounterIdMap.cpp \ + profiling/client/src/DeactivateTimelineReportingCommandHandler.cpp \ + profiling/client/src/FileOnlyProfilingConnection.cpp \ + profiling/client/src/Holder.cpp \ + profiling/client/src/IProfilingService.cpp \ + profiling/client/src/PacketBuffer.cpp \ + profiling/client/src/PeriodicCounterCapture.cpp \ + profiling/client/src/PeriodicCounterSelectionCommandHandler.cpp \ + profiling/client/src/PerJobCounterSelectionCommandHandler.cpp \ + profiling/client/src/ProfilingConnectionDumpToFileDecorator.cpp \ + profiling/client/src/ProfilingConnectionFactory.cpp \ + profiling/client/src/ProfilingService.cpp \ + profiling/client/src/ProfilingStateMachine.cpp \ + profiling/client/src/ProfilingUtils.cpp \ + profiling/client/src/RegisterBackendCounters.cpp \ + profiling/client/src/RequestCounterDirectoryCommandHandler.cpp \ + profiling/client/src/SendCounterPacket.cpp \ + profiling/client/src/SendThread.cpp \ + profiling/client/src/SendTimelinePacket.cpp \ + profiling/client/src/SocketProfilingConnection.cpp \ + profiling/client/src/TimelinePacketWriterFactory.cpp \ + profiling/client/src/TimelineUtilityMethods.cpp \ + profiling/client/src/backends/BackendProfiling.cpp \ + profiling/client/src/backends/IBackendProfiling.cpp \ + profiling/server/src/timelineDecoder/DirectoryCaptureCommandHandler.cpp \ + profiling/server/src/timelineDecoder/TimelineCaptureCommandHandler.cpp \ + profiling/server/src/timelineDecoder/TimelineDecoder.cpp \ + profiling/server/src/timelineDecoder/TimelineDirectoryCaptureCommandHandler.cpp \ + src/armnn/ArmNNProfilingServiceInitialiser.cpp \ + src/armnn/BackendHelper.cpp \ + src/armnn/BackendRegistry.cpp \ + src/armnn/Descriptors.cpp \ + src/armnn/Exceptions.cpp \ + src/armnn/Graph.cpp \ + src/armnn/ILayerSupport.cpp \ + src/armnn/InternalTypes.cpp \ + src/armnn/JsonPrinter.cpp \ + src/armnn/Layer.cpp \ + src/armnn/LoadedNetwork.cpp \ + src/armnn/Logging.cpp \ + src/armnn/Network.cpp \ + src/armnn/NetworkUtils.cpp \ + src/armnn/Observable.cpp \ + src/armnn/Optimizer.cpp \ + src/armnn/OutputHandler.cpp \ + src/armnn/ProfilingEvent.cpp \ + src/armnn/Profiling.cpp \ + src/armnn/Runtime.cpp \ + src/armnn/SerializeLayerParameters.cpp \ + src/armnn/SubgraphView.cpp \ + src/armnn/SubgraphViewSelector.cpp \ + src/armnn/Tensor.cpp \ + src/armnn/Threadpool.cpp \ + src/armnn/TypesUtils.cpp \ + src/armnn/Utils.cpp \ + src/armnn/WallClockTimer.cpp \ + src/armnn/WorkingMemHandle.cpp \ + src/armnnUtils/CompatibleTypes.cpp \ + src/armnnUtils/DataLayoutIndexed.cpp \ + src/armnnUtils/DotSerializer.cpp \ + src/armnnUtils/FloatingPointConverter.cpp \ + src/armnnUtils/HeapProfiling.cpp \ + src/armnnUtils/LeakChecking.cpp \ + src/armnnUtils/ParserHelper.cpp \ + src/armnnUtils/Permute.cpp \ + src/armnnUtils/TensorUtils.cpp \ + src/armnnUtils/VerificationHelpers.cpp \ + src/armnnUtils/Filesystem.cpp \ + src/armnnUtils/ProfilingOptionsConverter.cpp \ + src/armnnUtils/Transpose.cpp \ + src/armnn/layers/ActivationLayer.cpp \ + src/armnn/layers/AdditionLayer.cpp \ + src/armnn/layers/ArgMinMaxLayer.cpp \ + src/armnn/layers/BatchMatMulLayer.cpp \ + src/armnn/layers/BatchNormalizationLayer.cpp \ + src/armnn/layers/BatchToSpaceNdLayer.cpp \ + src/armnn/layers/CastLayer.cpp \ + src/armnn/layers/ChannelShuffleLayer.cpp \ + src/armnn/layers/ComparisonLayer.cpp \ + src/armnn/layers/ConcatLayer.cpp \ + src/armnn/layers/ConstantLayer.cpp \ + src/armnn/layers/Convolution2dLayer.cpp \ + src/armnn/layers/Convolution3dLayer.cpp \ + src/armnn/layers/ConvertFp16ToFp32Layer.cpp \ + src/armnn/layers/ConvertFp32ToFp16Layer.cpp \ + src/armnn/layers/DebugLayer.cpp \ + src/armnn/layers/DepthToSpaceLayer.cpp \ + src/armnn/layers/DepthwiseConvolution2dLayer.cpp \ + src/armnn/layers/DequantizeLayer.cpp \ + src/armnn/layers/DetectionPostProcessLayer.cpp \ + src/armnn/layers/DivisionLayer.cpp \ + src/armnn/layers/ElementwiseBaseLayer.cpp \ + src/armnn/layers/ElementwiseBinaryLayer.cpp \ + src/armnn/layers/ElementwiseUnaryLayer.cpp \ + src/armnn/layers/FakeQuantizationLayer.cpp \ + src/armnn/layers/FillLayer.cpp \ + src/armnn/layers/FloorLayer.cpp \ + src/armnn/layers/FullyConnectedLayer.cpp \ + src/armnn/layers/GatherLayer.cpp \ + src/armnn/layers/GatherNdLayer.cpp \ + src/armnn/layers/InputLayer.cpp \ + src/armnn/layers/InstanceNormalizationLayer.cpp \ + src/armnn/layers/L2NormalizationLayer.cpp \ + src/armnn/layers/LogicalBinaryLayer.cpp \ + src/armnn/layers/LogSoftmaxLayer.cpp \ + src/armnn/layers/LstmLayer.cpp \ + src/armnn/layers/MapLayer.cpp \ + src/armnn/layers/MaximumLayer.cpp \ + src/armnn/layers/MeanLayer.cpp \ + src/armnn/layers/MemCopyLayer.cpp \ + src/armnn/layers/MemImportLayer.cpp \ + src/armnn/layers/MergeLayer.cpp \ + src/armnn/layers/MinimumLayer.cpp \ + src/armnn/layers/MultiplicationLayer.cpp \ + src/armnn/layers/NormalizationLayer.cpp \ + src/armnn/layers/OutputLayer.cpp \ + src/armnn/layers/PadLayer.cpp \ + src/armnn/layers/PermuteLayer.cpp \ + src/armnn/layers/Pooling2dLayer.cpp \ + src/armnn/layers/Pooling3dLayer.cpp \ + src/armnn/layers/PreCompiledLayer.cpp \ + src/armnn/layers/PreluLayer.cpp \ + src/armnn/layers/QLstmLayer.cpp \ + src/armnn/layers/QuantizeLayer.cpp \ + src/armnn/layers/QuantizedLstmLayer.cpp \ + src/armnn/layers/RankLayer.cpp \ + src/armnn/layers/ReduceLayer.cpp \ + src/armnn/layers/ReshapeLayer.cpp \ + src/armnn/layers/ResizeLayer.cpp \ + src/armnn/layers/ShapeLayer.cpp \ + src/armnn/layers/SliceLayer.cpp \ + src/armnn/layers/SoftmaxLayer.cpp \ + src/armnn/layers/SpaceToBatchNdLayer.cpp \ + src/armnn/layers/SpaceToDepthLayer.cpp \ + src/armnn/layers/SplitterLayer.cpp \ + src/armnn/layers/StackLayer.cpp \ + src/armnn/layers/StandInLayer.cpp \ + src/armnn/layers/StridedSliceLayer.cpp \ + src/armnn/layers/SubtractionLayer.cpp \ + src/armnn/layers/SwitchLayer.cpp \ + src/armnn/layers/TransposeConvolution2dLayer.cpp \ + src/armnn/layers/TransposeLayer.cpp \ + src/armnn/layers/UnidirectionalSequenceLstmLayer.cpp \ + src/armnn/layers/UnmapLayer.cpp \ + src/armnnSerializer/Serializer.cpp \ + src/armnnSerializer/SerializerUtils.cpp \ + src/armnnDeserializer/Deserializer.cpp + +LOCAL_STATIC_LIBRARIES := libflatbuffers-cpp +ifeq ($(TARGET_ARCH),arm) +LOCAL_STATIC_LIBRARIES += arm_compute_library +endif +ifeq ($(TARGET_ARCH),arm64) +LOCAL_STATIC_LIBRARIES += arm_compute_library +endif + +LOCAL_SHARED_LIBRARIES := \ + liblog + +LOCAL_CFLAGS := \ + -std=$(CPP_VERSION) \ + -fexceptions \ + -Wno-unused-parameter \ + -frtti \ + -DFMT_HEADER_ONLY \ + -Wno-ignored-qualifiers \ + -Wno-macro-redefined \ + -Wno-unreachable-code-loop-increment + +LOCAL_LDFLAGS += \ + -Wl,-Map=libarmnnMapFile.map + +# The variable to enable/disable the CL backend (ARMNN_COMPUTE_CL_ENABLED) is declared in android-nn-driver/Android.mk +ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1) +LOCAL_CFLAGS += \ + -DARMCOMPUTECL_ENABLED +endif # ARMNN_COMPUTE_CL_ENABLED == 1 +# The variable to enable/disable the NEON backend (ARMNN_COMPUTE_NEON_ENABLED) is declared in android-nn-driver/Android.mk +ifeq ($(ARMNN_COMPUTE_NEON_ENABLED),1) +LOCAL_CFLAGS += \ + -DARMCOMPUTENEON_ENABLED +endif # ARMNN_COMPUTE_NEON_ENABLED == 1 +# The variable to enable/disable the REFERENCE backend (ARMNN_REF_ENABLED) is declared in android-nn-driver/Android.mk +ifeq ($(ARMNN_REF_ENABLED),1) +LOCAL_CFLAGS += \ + -DARMNNREF_ENABLED +endif # ARMNN_REF_ENABLED == 1 + +ifeq ($(Q_OR_LATER),1) +LOCAL_CFLAGS += \ + -DARMNN_MIXED_PRECISION_FP16_POOLING +endif # PLATFORM_VERSION == Q or later + +include $(BUILD_STATIC_LIBRARY) + +############### +# armnn-tests # +############### +include $(CLEAR_VARS) + +#For in-tree android build, disable building tests as the boost dependency (only used in test) +#is not present. +BUILD_TESTS := 0 +ifeq ($(BUILD_TESTS),1) + +LOCAL_MODULE := armnn-tests +LOCAL_LICENSE_KINDS := SPDX-license-identifier-BSD SPDX-license-identifier-BSL-1.0 SPDX-license-identifier-MIT SPDX-license-identifier-PSF-2.0 legacy_unencumbered +LOCAL_LICENSE_CONDITIONS := notice unencumbered +LOCAL_NOTICE_FILE := $(LOCAL_PATH)/LICENSE +ifeq ($(Q_OR_LATER),1) +# "eng" is deprecated in Android Q +LOCAL_MODULE_TAGS := optional +else +LOCAL_MODULE_TAGS := eng optional +endif +LOCAL_ARM_MODE := arm +LOCAL_PROPRIETARY_MODULE := true + +# placeholder to hold all backend unit test source files +ARMNN_BACKEND_TEST_SOURCES := +ARMNN_BACKEND_TEST_INCLUDES := + +# +# iterate through the backend common and specific include paths, include them into the current +# makefile and append the sources held by the COMMON_TEST_SOURCES and BACKEND_TEST_SOURCES +# (included from the given makefile) to the ARMNN_BACKEND_TEST_SOURCES list +# +$(foreach mkPath,$(ARMNN_BACKEND_COMMON_MAKEFILE_DIRS), \ + $(eval include $(LOCAL_PATH)/$(mkPath)/common.mk) \ + $(eval ARMNN_BACKEND_TEST_SOURCES := $(ARMNN_BACKEND_TEST_SOURCES) \ + $(patsubst %,$(mkPath)/%,$(COMMON_TEST_SOURCES)))) + +$(foreach mkPath,$(ARMNN_BACKEND_MAKEFILE_DIRS), \ + $(eval include $(LOCAL_PATH)/$(mkPath)/backend.mk) \ + $(eval ARMNN_BACKEND_TEST_SOURCES := $(ARMNN_BACKEND_TEST_SOURCES) \ + $(patsubst %,$(mkPath)/%,$(BACKEND_TEST_SOURCES)))) + +$(foreach mkPath,$(ARMNN_BACKEND_MAKEFILE_DIRS),\ + $(eval include $(LOCAL_PATH)/$(mkPath)/backend.mk)\ + $(eval ARMNN_BACKEND_TEST_INCLUDES += $(BACKEND_TEST_INCLUDES))) + +# Placeholder to hold all backend link files. +ARMNN_BACKEND_TEST_STATIC_LIBRARIES := +ARMNN_BACKEND_TEST_SHARED_LIBRARIES := +ifeq ($(TARGET_ARCH),arm) +ARMNN_BACKEND_TEST_STATIC_LIBRARIES += arm_compute_library +endif +ifeq ($(TARGET_ARCH),arm64) +ARMNN_BACKEND_TEST_STATIC_LIBRARIES += arm_compute_library +endif + +# Iterate through the Arm NN backends and specific include paths, include them into the +# current makefile and append the linkfiles held by +# the optional BACKEND_STATIC_LIBRARIES and optional BACKEND_SHARED_LIBRARIES variable +# (included from the given makefile) to +# the ARMNN_BACKEND_STATIC_LIBRARIES and ARMNN_BACKEND_SHARED_LIBRARIES lists + +$(foreach mkPath,$(ARMNN_BACKEND_MAKEFILE_DIRS),\ + $(eval include $(LOCAL_PATH)/$(mkPath)/backend.mk)\ + $(eval ARMNN_BACKEND_TEST_STATIC_LIBRARIES += $(BACKEND_TEST_STATIC_LIBRARIES))) + +$(foreach mkPath,$(ARMNN_BACKEND_MAKEFILE_DIRS),\ + $(eval include $(LOCAL_PATH)/$(mkPath)/backend.mk)\ + $(eval ARMNN_BACKEND_TEST_SHARED_LIBRARIES += $(BACKEND_TEST_SHARED_LIBRARIES))) + + +# Mark source files as dependent on Android.mk +LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk + +LOCAL_C_INCLUDES := \ + $(OPENCL_HEADER_PATH) \ + $(NN_HEADER_PATH) \ + $(ARMNN_GENERATED_HEADER_PATH) \ + $(ARMNN_PROFILING_INCLUDE_PATH) \ + $(ARMNN_PROFILING_COMMON_INCLUDE_PATH) \ + $(ARMNN_PROFILING_CLIENT_INCLUDE_PATH) \ + $(ARMNN_HEADER_PATH) \ + $(ARMNN_TIMELINE_DECODER_INCLUDE_PATH) \ + $(ARMNN_THIRD_PARTY_INCLUDE_PATH) \ + $(ARMNN_MAIN_HEADER_PATH) \ + $(ARMNN_SOURCE_HEADER_PATH) \ + $(ARMNN_SOURCE_UTILS_HEADER_PATH) \ + $(ARMNN_TEST_UTILS_SOURCE_PATH) \ + $(ARMNN_PROFILING_HEADER_PATH) \ + $(ARMNN_BACKENDS_HEADER_PATH) \ + $(ARMNN_SERIALIZER_HEADER_PATH) \ + $(ARMNN_DESERIALIZER_HEADER_PATH) \ + $(ARMNN_BACKEND_INCLUDES) \ + $(LOCAL_PATH)/../ComputeLibrary + + +LOCAL_CFLAGS := \ + -std=$(CPP_VERSION) \ + -fexceptions \ + -frtti \ + -Wno-unused-local-typedef \ + -Wno-unused-variable + +# The variable to enable/disable the CL backend (ARMNN_COMPUTE_CL_ENABLED) is declared in android-nn-driver/Android.mk +ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1) +LOCAL_CFLAGS += \ + -DARMCOMPUTECL_ENABLED +endif # ARMNN_COMPUTE_CL_ENABLED == 1 +# The variable to enable/disable the NEON backend (ARMNN_COMPUTE_NEON_ENABLED) is declared in android-nn-driver/Android.mk +ifeq ($(ARMNN_COMPUTE_NEON_ENABLED),1) +LOCAL_CFLAGS += \ + -DARMCOMPUTENEON_ENABLED +endif # ARMNN_COMPUTE_NEON_ENABLED == 1 +# The variable to enable/disable the REFERENCE backend (ARMNN_REF_ENABLED) is declared in android-nn-driver/Android.mk +ifeq ($(ARMNN_REF_ENABLED),1) +LOCAL_CFLAGS += \ + -DARMNNREF_ENABLED +endif # ARMNN_REF_ENABLED == 1 + +LOCAL_SRC_FILES := \ + $(ARMNN_BACKEND_TEST_SOURCES) \ + src/armnn/test/ConstTensorLayerVisitor.cpp \ + src/armnn/test/EndToEndTest.cpp \ + src/armnn/ExecutionFrame.cpp \ + src/armnn/test/ExecutionFrameTest.cpp \ + src/armnn/test/FloatingPointConverterTest.cpp \ + src/armnn/test/FlowControl.cpp \ + src/armnn/test/GraphTests.cpp \ + src/armnn/test/InferOutputTests.cpp \ + src/armnn/test/InstrumentTests.cpp \ + src/armnnUtils/ModelAccuracyChecker.cpp \ + src/armnn/test/ModelAccuracyCheckerTest.cpp \ + src/armnn/test/NetworkTests.cpp \ + src/armnn/test/ObservableTest.cpp \ + src/armnn/test/optimizations/ConvertConstantsFloatToHalfTests.cpp \ + src/armnn/test/optimizations/ConvertConstantsHalfToFloatTests.cpp \ + src/armnn/test/optimizations/Fp32NetworkToFp16ConverterTests.cpp \ + src/armnn/test/optimizations/FuseActivationTests.cpp \ + src/armnn/test/optimizations/InsertDebugLayerTests.cpp \ + src/armnn/test/optimizations/MovePermuteUpTests.cpp \ + src/armnn/test/optimizations/OptimizeConsecutiveReshapesTests.cpp \ + src/armnn/test/optimizations/OptimizeInverseConversionsTests.cpp \ + src/armnn/test/optimizations/OptimizeInversePermutesTests.cpp \ + src/armnn/test/optimizations/PermuteAndBatchToSpaceAsDepthToSpaceTests.cpp \ + src/armnn/test/optimizations/PermuteAsReshapeTests.cpp \ + src/armnn/test/optimizations/ReduceMultipleAxesTests.cpp \ + src/armnn/test/optimizations/SquashEqualSiblingsTests.cpp \ + src/armnn/test/optimizations/TransposeAsReshapeTests.cpp \ + src/armnn/test/OptimizerTests.cpp \ + src/armnn/test/OptionalTest.cpp \ + src/armnn/test/ProfilerTests.cpp \ + src/armnn/test/ProfilingEventTest.cpp \ + src/armnnUtils/PrototxtConversions.cpp \ + src/armnnUtils/test/PrototxtConversionsTest.cpp \ + src/armnn/test/SubgraphViewTests.cpp \ + src/armnn/test/TensorHandleStrategyTest.cpp \ + src/armnn/test/TensorTest.cpp \ + src/armnn/test/TestInputOutputLayerVisitor.cpp \ + src/armnn/test/TestLayerVisitor.cpp \ + src/armnn/test/TestNameAndDescriptorLayerVisitor.cpp \ + src/armnn/test/TestNameOnlyLayerVisitor.cpp \ + src/armnn/test/UtilsTests.cpp \ + src/armnnUtils/test/ParserHelperTest.cpp \ + src/armnnUtils/test/QuantizeHelperTest.cpp \ + src/armnnUtils/test/TensorUtilsTest.cpp \ + src/armnnTestUtils/CommonTestUtils.cpp \ + src/armnnTestUtils/GraphUtils.cpp \ + src/armnnTestUtils/MockBackend.cpp \ + src/armnnTestUtils/MockMemoryManager.cpp \ + src/armnnTestUtils/MockTensorHandle.cpp \ + src/armnnTestUtils/MockTensorHandleFactory.cpp \ + src/armnnTestUtils/TensorCopyUtils.cpp \ + src/armnnTestUtils/TestUtils.cpp \ + src/armnnTestUtils/UnitTests.cpp \ + src/profiling/test/BufferTests.cpp \ + src/profiling/test/FileOnlyProfilingDecoratorTests.cpp \ + src/profiling/test/PrintPacketHeaderHandler.cpp \ + src/profiling/test/ProfilingConnectionDumpToFileDecoratorTests.cpp \ + src/profiling/test/ProfilingGuidTest.cpp \ + src/profiling/test/ProfilingTests.cpp \ + src/profiling/test/ProfilingTestUtils.cpp \ + src/profiling/test/SendCounterPacketTests.cpp \ + src/profiling/test/SendTimelinePacketTests.cpp \ + src/profiling/test/TestTimelinePacketHandler.cpp \ + src/profiling/test/TimelineModel.cpp \ + src/profiling/test/TimelinePacketTests.cpp \ + src/profiling/test/TimelineUtilityMethodsTests.cpp \ + src/armnnSerializer/test/ActivationSerializationTests.cpp \ + src/armnnSerializer/test/ComparisonSerializationTests.cpp \ + src/armnnSerializer/test/LstmSerializationTests.cpp \ + src/armnnSerializer/test/SerializerTests.cpp \ + src/armnnSerializer/test/SerializerTestUtils.cpp + +ifeq ($(ARMNN_REF_ENABLED),1) +LOCAL_SRC_FILES += \ + src/armnn/test/DebugCallbackTest.cpp \ + src/armnn/test/RuntimeTests.cpp +endif + +LOCAL_STATIC_LIBRARIES := \ + libneuralnetworks_common \ + libflatbuffers-cpp \ + $(ARMNN_BACKEND_TEST_STATIC_LIBRARIES) + +LOCAL_WHOLE_STATIC_LIBRARIES := libarmnn + +LOCAL_SHARED_LIBRARIES := \ + libbase \ + libhidlbase \ + libhidltransport \ + libhidlmemory \ + liblog \ + libutils \ + android.hardware.neuralnetworks@1.0 \ + android.hidl.allocator@1.0 \ + android.hidl.memory@1.0 \ + $(ARMNN_BACKEND_TEST_SHARED_LIBRARIES) + +ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1) +ifeq (,$(realpath $(TOPDIR)vendor/arm/mali/valhall/Android.bp)) + LOCAL_SHARED_LIBRARIES += libGLES_mali +else + LOCAL_SHARED_LIBRARIES += libOpenCL +endif +endif + +include $(BUILD_EXECUTABLE) +endif # BUILD_TESTS +endif # ARMNN_ENABLE diff --git a/shim/Android.bp b/shim/Android.bp deleted file mode 100644 index fd460b0a4..000000000 --- a/shim/Android.bp +++ /dev/null @@ -1,186 +0,0 @@ -// -// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved. -// SPDX-License-Identifier: MIT -// - -//////////////////////////////////////////// -// // -// libarmnn_support_library // -// // -//////////////////////////////////////////// - -cc_library_shared { - name: "libarmnn_support_library", - enabled : false, - arch: { - arm: { - enabled : true, - }, - arm64: { - enabled : true, - }, - }, - defaults: ["neuralnetworks_cl_defaults"], - include_dirs: [ - "external/armnn/include", - "external/armnn/third-party", - "system/logging/liblog/include", - ], - srcs: [ - "sl/support_library_service.cpp", - "sl/canonical/*.cpp", - ], - shared_libs: [ - "liblog", - "libnativewindow", - "libcrypto", - ], - openmp: true, - cflags: [ - "-DNN_COMPATIBILITY_LIBRARY_BUILD", - "-fexceptions", - "-fPIC", - "-std=c++17", - "-Wall", - "-fexceptions", - "-Werror", - "-Wno-unused-parameter", - "-Wno-unused-private-field", - "-Wno-unused-variable", - "-Wno-attributes", - "-Wno-format-security", - "-Wno-extern-c-compat", - "-Wno-invalid-partial-specialization", - "-Wno-unneeded-internal-declaration", - "-Wno-unused-function", - "-DNN_DEBUGGABLE", - ], - // Change the soname, this library will be added as cc_prebuilt_library_shared - // with different name to android.hardware.neuralnetworks-shim-service-armnn - ldflags: [ - "-Wl,-soname,libarmnn_support_library_prebuilt.so", - ], - static_libs: [ - "libbase_ndk", - "libneuralnetworks_common_cl_cpu", - "libtflite_static", - "neuralnetworks_canonical_sample_driver_cl", - "neuralnetworks_types_cl", - ], - whole_static_libs: [ - "libneuralnetworks_cl", - "libarmnn", - ], -} - -//////////////////////////////////////////// -// // -// libarmnn_support_library_prebuilt // -// // -//////////////////////////////////////////// - -cc_prebuilt_library_shared { - name: "libarmnn_support_library_prebuilt", - check_elf_files: false, - host_supported: false, - shared_libs: [ - "libbase", - "libcutils", - "liblog", - "libnativewindow", - ], - proprietary: true, - vendor: true, - apex_available: ["//apex_available:vendor", "//apex_available:platform"], - allow_undefined_symbols: true, - target: { - android_x86_64: { - enabled: false, - }, - android_x86: { - enabled: false, - }, - android_riscv64: { - enabled: false, - }, - android_arm64: { - srcs: ["sl/build/android_arm64/libarmnn_support_library_prebuilt.so"], - }, - android_arm: { - srcs: ["sl/build/android_arm/libarmnn_support_library_prebuilt.so"], - }, - }, -} - -//////////////////////////////////////////// -// // -// shim service // -// // -//////////////////////////////////////////// - -cc_defaults { - name: "NeuralNetworksShimArmnnDriverAidl_defaults", - enabled : false, - arch: { - arm: { - enabled : true, - }, - arm64: { - enabled : true, - }, - }, - check_elf_files: false, - host_supported: false, - defaults: [ - "neuralnetworks_defaults", - "neuralnetworks_use_latest_utils_hal_aidl", - ], - header_libs: [ - "libneuralnetworks_headers", - ], - cflags: [ - "-DNN_COMPATIBILITY_LIBRARY_BUILD", - ], - ldflags: [ - // libarmnn_support_library has undefined symbols that - // cause linker failures with --no-allow-shlib-undefined, the default - // when linking executables. See b/181227567 - "-Wl,--allow-shlib-undefined", - ], - static_libs: [ - "libaidlcommonsupport", - "libarect", - "libcutils", - "libneuralnetworks_common", - "libneuralnetworks_shim_static", - "neuralnetworks_supportlibrary_loader", - "neuralnetworks_utils_hal_common", - ], - shared_libs: [ - "libbase", - "libbinder_ndk", - "libhidlbase", - "libhidlmemory", - "liblog", - "libnativewindow", - "libutils", - "libarmnn_support_library_prebuilt", - ], - apex_available: ["//apex_available:vendor", "//apex_available:platform"], -} - -cc_defaults { - name: "NeuralNetworksShimArmnnDriverAidl_server_defaults", - defaults: ["NeuralNetworksShimArmnnDriverAidl_defaults"], - relative_install_path: "hw", - proprietary: true, -} - -cc_binary { - name: "android.hardware.neuralnetworks-shim-service-armnn", - srcs: ["shimservice.cpp"], - defaults: ["NeuralNetworksShimArmnnDriverAidl_server_defaults"], - stl: "libc++_static", - init_rc: ["config/android.hardware.neuralnetworks-shim-service-armnn.rc"], - vintf_fragments: ["config/android.hardware.neuralnetworks-shim-service-armnn.xml"], -} diff --git a/shim/Android.bp.off b/shim/Android.bp.off new file mode 100644 index 000000000..f3810da46 --- /dev/null +++ b/shim/Android.bp.off @@ -0,0 +1,97 @@ +// +// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + + +//////////////////////////////////////////// +// // +// shim service // +// // +//////////////////////////////////////////// + +cc_prebuilt_library_shared { + name: "libarmnn_support_library", + check_elf_files: false, + shared_libs: [ + "libbase", + "libcutils", + "liblog", + "libnativewindow", + ], + proprietary: true, + vendor: true, + // libnativewindow versioning trips this check. b/181227567 for fixing + allow_undefined_symbols: true, + target: { + android_x86_64: { + srcs: ["./sl/build/libarmnn_support_library.so"], + }, + android_x86: { + srcs: ["./sl/build/libarmnn_support_library.so"], + }, + android_arm64: { + srcs: ["./sl/build/libarmnn_support_library.so"], + }, + android_arm: { + srcs: ["./sl/build/libarmnn_support_library.so"], + }, + }, + apex_available: ["//apex_available:vendor"], +} + +cc_defaults { + name: "NeuralNetworksShimArmnnDriverAidl_defaults", + defaults: ["neuralnetworks_defaults"], + header_libs: [ + "libneuralnetworks_headers", + ], + cflags: [ + "-DNN_COMPATIBILITY_LIBRARY_BUILD", + ], + static_libs: [ + "android.hardware.common-V2-ndk_platform", + "android.hardware.graphics.common-V2-ndk_platform", + "android.hardware.neuralnetworks-V1-ndk_platform", + "libaidlcommonsupport", + "libarect", + "libcutils", + "libneuralnetworks_shim_static", + "neuralnetworks_supportlibrary_loader", + "neuralnetworks_types", + "libneuralnetworks_common", + "neuralnetworks_utils_hal_aidl", + "neuralnetworks_utils_hal_common", + ], + shared_libs: [ + "android.hidl.allocator@1.0", + "android.hidl.memory@1.0", + "libbase", + "libhidltransport", + "libbinder_ndk", + "libhidlbase", + "libhidlmemory", + "liblog", + "libnativewindow", + "libutils", + "libarmnn_support_library", + ], + +} + +cc_defaults { + name: "NeuralNetworksShimArmnnDriverAidl_server_defaults", + defaults: ["NeuralNetworksShimArmnnDriverAidl_defaults"], + relative_install_path: "hw", + proprietary: true, +} + + +cc_binary { + name: "android.hardware.neuralnetworks-shim-service-armnn", + srcs: ["./shimservice.cpp"], + enabled: true, + defaults: ["NeuralNetworksShimArmnnDriverAidl_server_defaults"], + init_rc: ["./config/android.hardware.neuralnetworks-shim-service-armnn.rc"], + vintf_fragments: ["./config/android.hardware.neuralnetworks-shim-service-armnn.xml"], +} diff --git a/shim/config/android.hardware.neuralnetworks-shim-service-armnn.rc b/shim/config/android.hardware.neuralnetworks-shim-service-armnn.rc index df210e46d..55661e424 100644 --- a/shim/config/android.hardware.neuralnetworks-shim-service-armnn.rc +++ b/shim/config/android.hardware.neuralnetworks-shim-service-armnn.rc @@ -1,5 +1,4 @@ -service hal_neuralnetworks_armnn /vendor/bin/hw/android.hardware.neuralnetworks-shim-service-armnn +service neuralnetworks_hal_service_armnn /vendor/bin/hw/android.hardware.neuralnetworks-shim-service-armnn class hal user system group system - task_profiles NNApiHALPerformance diff --git a/shim/config/android.hardware.neuralnetworks-shim-service-armnn.xml b/shim/config/android.hardware.neuralnetworks-shim-service-armnn.xml index 5051763af..a1258a588 100644 --- a/shim/config/android.hardware.neuralnetworks-shim-service-armnn.xml +++ b/shim/config/android.hardware.neuralnetworks-shim-service-armnn.xml @@ -5,6 +5,6 @@ <manifest version="1.0" type="device"> <hal format="aidl"> <name>android.hardware.neuralnetworks</name> - <fqname>IDevice/google-armnn</fqname> + <fqname>IDevice/arm-armnn-shim</fqname> </hal> </manifest> diff --git a/shim/shimservice.cpp b/shim/shimservice.cpp index 4339f3505..44dc596c7 100644 --- a/shim/shimservice.cpp +++ b/shim/shimservice.cpp @@ -31,7 +31,7 @@ int main() ANeuralNetworksShimDeviceInfo* deviceInfo; ANeuralNetworksShimDeviceInfo_create(&deviceInfo, /*deviceName=*/"arm-armnn-sl", - /*serviceName=*/"google-armnn"); + /*serviceName=*/"arm-armnn-shim"); const auto guardDeviceInfo = android::base::make_scope_guard( [deviceInfo] { ANeuralNetworksShimDeviceInfo_free(deviceInfo); }); diff --git a/shim/sl/build/android_arm/libarmnn_support_library_prebuilt.so b/shim/sl/build/android_arm/libarmnn_support_library_prebuilt.so Binary files differdeleted file mode 100755 index a655c7579..000000000 --- a/shim/sl/build/android_arm/libarmnn_support_library_prebuilt.so +++ /dev/null diff --git a/shim/sl/build/android_arm64/libarmnn_support_library_prebuilt.so b/shim/sl/build/android_arm64/libarmnn_support_library_prebuilt.so Binary files differdeleted file mode 100755 index a4a88ea9c..000000000 --- a/shim/sl/build/android_arm64/libarmnn_support_library_prebuilt.so +++ /dev/null diff --git a/shim/sl/canonical/ArmnnDevice.cpp b/shim/sl/canonical/ArmnnDevice.cpp index 8f2212dba..71135cb13 100644 --- a/shim/sl/canonical/ArmnnDevice.cpp +++ b/shim/sl/canonical/ArmnnDevice.cpp @@ -76,7 +76,6 @@ ArmnnDevice::ArmnnDevice(DriverOptions options) } armnn::IRuntime::CreationOptions runtimeOptions; -#if defined(ARMCOMPUTECL_ENABLED) if (std::find(m_Options.GetBackends().begin(), m_Options.GetBackends().end(), armnn::Compute::GpuAcc) != m_Options.GetBackends().end()) @@ -109,7 +108,6 @@ ArmnnDevice::ArmnnDevice(DriverOptions options) VLOG(DRIVER) << "ArmnnDevice: Unknown exception: %s. Device will be unavailable." << error.what(); } } -#endif runtimeOptions.m_EnableGpuProfiling = m_Options.IsGpuProfilingEnabled(); m_Runtime = armnn::IRuntime::Create(runtimeOptions); diff --git a/shim/sl/canonical/ArmnnDriverImpl.cpp b/shim/sl/canonical/ArmnnDriverImpl.cpp index 060dd5a25..0f7888bb4 100644 --- a/shim/sl/canonical/ArmnnDriverImpl.cpp +++ b/shim/sl/canonical/ArmnnDriverImpl.cpp @@ -1,5 +1,5 @@ // -// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved. +// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // @@ -400,11 +400,6 @@ GeneralResult<SharedPreparedModel> ArmnnDriverImpl::PrepareArmnnModelFromCache( pread(*dataCacheHandle[0], hashValue.data(), hashValue.size(), 0); // Read the model - if (cachedDataSize < hashValue.size()) - { - return NN_ERROR(ErrorStatus::GENERAL_FAILURE) - << "ArmnnDriverImpl::prepareModelFromCache(): cachedDataSize is less than hashValue!"; - } std::vector<uint8_t> dataCacheData(cachedDataSize - hashValue.size()); pread(*dataCacheHandle[0], dataCacheData.data(), dataCacheData.size(), hashValue.size()); auto calculatedHashValue = Hash(dataCacheData); diff --git a/shim/sl/canonical/ArmnnPreparedModel.cpp b/shim/sl/canonical/ArmnnPreparedModel.cpp index 192ea599b..79cd24134 100644 --- a/shim/sl/canonical/ArmnnPreparedModel.cpp +++ b/shim/sl/canonical/ArmnnPreparedModel.cpp @@ -569,13 +569,10 @@ GeneralResult<std::pair<SyncFence, ExecuteFencedInfoCallback>> ArmnnPreparedMode { case ErrorStatus::OUTPUT_INSUFFICIENT_SIZE: result.error().code = (ErrorStatus::OUTPUT_INSUFFICIENT_SIZE); - [[fallthrough]]; case ErrorStatus::GENERAL_FAILURE: result.error().code = (ErrorStatus::GENERAL_FAILURE); - [[fallthrough]]; case ErrorStatus::INVALID_ARGUMENT: result.error().code = (ErrorStatus::INVALID_ARGUMENT); - [[fallthrough]]; default: { result.value() = std::make_pair(timingSinceLaunch, timingAfterFence); diff --git a/shim/sl/canonical/ConversionUtils.hpp b/shim/sl/canonical/ConversionUtils.hpp index f595db255..91a8e3080 100644 --- a/shim/sl/canonical/ConversionUtils.hpp +++ b/shim/sl/canonical/ConversionUtils.hpp @@ -1,5 +1,5 @@ // -// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved. +// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // @@ -455,7 +455,7 @@ void SanitizeBiasQuantizationScale(armnn::TensorInfo& biasInfo, // 4D Tensor Permutations const armnn::PermutationVector IdentityPermutation4D({ 0U, 1U, 2U, 3U }); const armnn::PermutationVector IdentityPermutation3D({ 0U, 1U, 2U }); -const armnn::PermutationVector SwapDim2And3({ 0U, 1U, 3U, 2U }); +const armnn::PermutationVector SwapDim1And2({ 0U, 2U, 1U, 3U }); // 3D Permutation Vectors const armnn::PermutationVector RotateTensorLeft({ 1U, 2U, 0U }); @@ -603,8 +603,8 @@ bool CreateConcatPermutationParameters(const unsigned int numberOfDimensions, // or along dimension 0 or 2 for a 3-D tensor. if (numberOfDimensions == 4 && concatDimension == 2) { - concatDimension = 3; - permutationPair = std::make_pair(SwapDim2And3, SwapDim2And3); + concatDimension = 1; + permutationPair = std::make_pair(SwapDim1And2, SwapDim1And2); needPermute = true; } else if (numberOfDimensions == 3 && concatDimension == 1) diff --git a/shim/sl/canonical/DriverOptions.cpp b/shim/sl/canonical/DriverOptions.cpp index 15d08d8cb..5c73edfaa 100644 --- a/shim/sl/canonical/DriverOptions.cpp +++ b/shim/sl/canonical/DriverOptions.cpp @@ -1,5 +1,5 @@ // -// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved. +// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // @@ -254,8 +254,13 @@ DriverOptions::DriverOptions() // If no backends have been specified then the default value is GpuAcc. if (backends.empty()) { - VLOG(DRIVER) << "No backends have been specified, defaulting to GpuAcc."; - m_Backends.emplace_back("GpuAcc"); + VLOG(DRIVER) << "No backends have been specified:"; + std::cout << optionsDesc.help() << std::endl + << "Unable to start:" << std::endl + << "No backends have been specified" << std::endl; + m_ShouldExit = true; + m_ExitCode = EXIT_FAILURE; + return; } if (!unsupportedOperationsAsString.empty()) diff --git a/shim/sl/generate_prebuilts.sh b/shim/sl/generate_prebuilts.sh deleted file mode 100755 index 7e6c67120..000000000 --- a/shim/sl/generate_prebuilts.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -# -# Generate ArmNN SL driver prebuilts - -eval set -- "$OPTS" -if [[ -z "$ANDROID_BUILD_TOP" ]]; then - echo ANDROID_BUILD_TOP not set, bailing out - echo you must run lunch before running this script - exit 1 -fi - -set -e -cd $ANDROID_BUILD_TOP - -source build/envsetup.sh -ARCHS="arm,arm64" -ARMNN_SL_DRIVER="libarmnn_support_library" - -for arch in ${ARCHS//,/ } -do - lunch "aosp_${arch}-userdebug" - - LIB=lib - if [[ $arch =~ "64" ]]; then - LIB=lib64 - fi - - TMPFILE=$(mktemp) - build/soong/soong_ui.bash --make-mode ${ARMNN_SL_DRIVER} 2>&1 | tee ${TMPFILE} - TARGETDIR=external/armnn/shim/sl/build/android_${arch}/${ARMNN_SL_DRIVER}_prebuilt.so - mkdir -p ${TARGETDIR%/*} - cp $OUT/system/${LIB}/${ARMNN_SL_DRIVER}.so ${TARGETDIR} - -done - |