[automerger skipped] Merge Android 14 QPR1 am: b66846c382 -s ours am: 7524d1ac1f -s ours am: 1163dc6184 -s ours

am skip reason: Merged-In Icd13c7cdf0ca3f48e8c01b5b3d7e904048c2b37f with SHA-1 c99400642a is already in history

Original change: https://android-review.googlesource.com/c/platform/external/armnn/+/2862799

Change-Id: I442e719bbe0e5bdc73b07dc471d89b9b8a33de91
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/Android.bp b/Android.bp
index 8414eb5..5638cc4 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 0000000..fd460b0
--- /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 f3810da..0000000
--- 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 55661e4..df210e4 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 a1258a5..5051763 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 44dc596..4339f35 100644
--- a/shim/shimservice.cpp
+++ b/shim/shimservice.cpp
@@ -31,7 +31,7 @@
     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
new file mode 100755
index 0000000..a655c75
--- /dev/null
+++ b/shim/sl/build/android_arm/libarmnn_support_library_prebuilt.so
Binary files differ
diff --git a/shim/sl/build/android_arm64/libarmnn_support_library_prebuilt.so b/shim/sl/build/android_arm64/libarmnn_support_library_prebuilt.so
new file mode 100755
index 0000000..a4a88ea
--- /dev/null
+++ b/shim/sl/build/android_arm64/libarmnn_support_library_prebuilt.so
Binary files differ
diff --git a/shim/sl/canonical/ArmnnDevice.cpp b/shim/sl/canonical/ArmnnDevice.cpp
index 71135cb..8f2212d 100644
--- a/shim/sl/canonical/ArmnnDevice.cpp
+++ b/shim/sl/canonical/ArmnnDevice.cpp
@@ -76,6 +76,7 @@
     }
     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 @@
             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 0f7888b..060dd5a 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 @@
     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 79cd241..192ea59 100644
--- a/shim/sl/canonical/ArmnnPreparedModel.cpp
+++ b/shim/sl/canonical/ArmnnPreparedModel.cpp
@@ -569,10 +569,13 @@
                 {
                     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 91a8e30..f595db2 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 @@
 // 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 @@
     // 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 5c73edf..15d08d8 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 @@
     // 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 0000000..7e6c671
--- /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
+