diff options
author | Xin Li <delphij@google.com> | 2024-01-17 22:13:22 -0800 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2024-01-17 22:13:22 -0800 |
commit | ad91332cd3667f747e6e6ed818bdfbfc4353af17 (patch) | |
tree | a7d067b3c577198deffe4230397769dcab8447b2 | |
parent | 7524d1ac1f264910842b63d9179378be0dbfb133 (diff) | |
parent | ae38d44fbffb707d099f707ec884a1c7b6ecb7e7 (diff) | |
download | armnn-temp_319669529.tar.gz |
Merge Android 24Q1 Release (ab/11220357)temp_319669529
Bug: 319669529
Merged-In: I0a06723796f8475a1fc7ab0b155c436a10e12b9d
Change-Id: Ia2bf6f60d4f76e96ceabb6449f79e9da4f751894
-rw-r--r-- | Android.bp | 373 | ||||
-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 | 0 -> 25176608 bytes | |||
-rwxr-xr-x | shim/sl/build/android_arm64/libarmnn_support_library_prebuilt.so | bin | 0 -> 31964448 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 |
14 files changed, 613 insertions, 116 deletions
diff --git a/Android.bp b/Android.bp index 8414eb516..5638cc433 100644 --- a/Android.bp +++ b/Android.bp @@ -1,8 +1,375 @@ // -// Copyright © 2017 ARM Ltd. All rights reserved. +// Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // -// Dummy Android.bp file to keep backward compatibility with previous -// build systems/environments. +//////////////////////////////////////////// +// // +// libarmnn.a // +// // +//////////////////////////////////////////// +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/shim/Android.bp b/shim/Android.bp new file mode 100644 index 000000000..fd460b0a4 --- /dev/null +++ b/shim/Android.bp @@ -0,0 +1,186 @@ +// +// 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 deleted file mode 100644 index f3810da46..000000000 --- a/shim/Android.bp.off +++ /dev/null @@ -1,97 +0,0 @@ -// -// 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 55661e424..df210e46d 100644 --- a/shim/config/android.hardware.neuralnetworks-shim-service-armnn.rc +++ b/shim/config/android.hardware.neuralnetworks-shim-service-armnn.rc @@ -1,4 +1,5 @@ -service neuralnetworks_hal_service_armnn /vendor/bin/hw/android.hardware.neuralnetworks-shim-service-armnn +service hal_neuralnetworks_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 a1258a588..5051763af 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/arm-armnn-shim</fqname> + <fqname>IDevice/google-armnn</fqname> </hal> </manifest> diff --git a/shim/shimservice.cpp b/shim/shimservice.cpp index 44dc596c7..4339f3505 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=*/"arm-armnn-shim"); + /*serviceName=*/"google-armnn"); 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 differnew file mode 100755 index 000000000..a655c7579 --- /dev/null +++ b/shim/sl/build/android_arm/libarmnn_support_library_prebuilt.so 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 differnew file mode 100755 index 000000000..a4a88ea9c --- /dev/null +++ b/shim/sl/build/android_arm64/libarmnn_support_library_prebuilt.so diff --git a/shim/sl/canonical/ArmnnDevice.cpp b/shim/sl/canonical/ArmnnDevice.cpp index 71135cb13..8f2212dba 100644 --- a/shim/sl/canonical/ArmnnDevice.cpp +++ b/shim/sl/canonical/ArmnnDevice.cpp @@ -76,6 +76,7 @@ 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()) @@ -108,6 +109,7 @@ 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 0f7888bb4..060dd5a25 100644 --- a/shim/sl/canonical/ArmnnDriverImpl.cpp +++ b/shim/sl/canonical/ArmnnDriverImpl.cpp @@ -1,5 +1,5 @@ // -// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. +// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // @@ -400,6 +400,11 @@ 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 79cd24134..192ea599b 100644 --- a/shim/sl/canonical/ArmnnPreparedModel.cpp +++ b/shim/sl/canonical/ArmnnPreparedModel.cpp @@ -569,10 +569,13 @@ 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 91a8e3080..f595db255 100644 --- a/shim/sl/canonical/ConversionUtils.hpp +++ b/shim/sl/canonical/ConversionUtils.hpp @@ -1,5 +1,5 @@ // -// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. +// Copyright © 2022-2023 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 SwapDim1And2({ 0U, 2U, 1U, 3U }); +const armnn::PermutationVector SwapDim2And3({ 0U, 1U, 3U, 2U }); // 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 = 1; - permutationPair = std::make_pair(SwapDim1And2, SwapDim1And2); + concatDimension = 3; + permutationPair = std::make_pair(SwapDim2And3, SwapDim2And3); needPermute = true; } else if (numberOfDimensions == 3 && concatDimension == 1) diff --git a/shim/sl/canonical/DriverOptions.cpp b/shim/sl/canonical/DriverOptions.cpp index 5c73edfaa..15d08d8cb 100644 --- a/shim/sl/canonical/DriverOptions.cpp +++ b/shim/sl/canonical/DriverOptions.cpp @@ -1,5 +1,5 @@ // -// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. +// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // @@ -254,13 +254,8 @@ DriverOptions::DriverOptions() // If no backends have been specified then the default value is GpuAcc. if (backends.empty()) { - 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; + VLOG(DRIVER) << "No backends have been specified, defaulting to GpuAcc."; + m_Backends.emplace_back("GpuAcc"); } if (!unsupportedOperationsAsString.empty()) diff --git a/shim/sl/generate_prebuilts.sh b/shim/sl/generate_prebuilts.sh new file mode 100755 index 000000000..7e6c67120 --- /dev/null +++ b/shim/sl/generate_prebuilts.sh @@ -0,0 +1,35 @@ +#!/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 + |